aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/files/composer/composer/autoload_classmap.php1
-rw-r--r--apps/files/composer/composer/autoload_static.php1
-rw-r--r--apps/files/lib/AdvancedCapabilities.php38
-rw-r--r--apps/files/lib/AppInfo/Application.php2
-rw-r--r--apps/files/openapi.json4
-rw-r--r--apps/files/tests/AdvancedCapabilitiesTest.php47
6 files changed, 93 insertions, 0 deletions
diff --git a/apps/files/composer/composer/autoload_classmap.php b/apps/files/composer/composer/autoload_classmap.php
index 5922560f521..0d9e6aa2d77 100644
--- a/apps/files/composer/composer/autoload_classmap.php
+++ b/apps/files/composer/composer/autoload_classmap.php
@@ -16,6 +16,7 @@ return array(
'OCA\\Files\\Activity\\Settings\\FileActivitySettings' => $baseDir . '/../lib/Activity/Settings/FileActivitySettings.php',
'OCA\\Files\\Activity\\Settings\\FileChanged' => $baseDir . '/../lib/Activity/Settings/FileChanged.php',
'OCA\\Files\\Activity\\Settings\\FileFavoriteChanged' => $baseDir . '/../lib/Activity/Settings/FileFavoriteChanged.php',
+ 'OCA\\Files\\AdvancedCapabilities' => $baseDir . '/../lib/AdvancedCapabilities.php',
'OCA\\Files\\App' => $baseDir . '/../lib/App.php',
'OCA\\Files\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
'OCA\\Files\\BackgroundJob\\CleanupDirectEditingTokens' => $baseDir . '/../lib/BackgroundJob/CleanupDirectEditingTokens.php',
diff --git a/apps/files/composer/composer/autoload_static.php b/apps/files/composer/composer/autoload_static.php
index bf489b037f7..5ece9073178 100644
--- a/apps/files/composer/composer/autoload_static.php
+++ b/apps/files/composer/composer/autoload_static.php
@@ -31,6 +31,7 @@ class ComposerStaticInitFiles
'OCA\\Files\\Activity\\Settings\\FileActivitySettings' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileActivitySettings.php',
'OCA\\Files\\Activity\\Settings\\FileChanged' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileChanged.php',
'OCA\\Files\\Activity\\Settings\\FileFavoriteChanged' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileFavoriteChanged.php',
+ 'OCA\\Files\\AdvancedCapabilities' => __DIR__ . '/..' . '/../lib/AdvancedCapabilities.php',
'OCA\\Files\\App' => __DIR__ . '/..' . '/../lib/App.php',
'OCA\\Files\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
'OCA\\Files\\BackgroundJob\\CleanupDirectEditingTokens' => __DIR__ . '/..' . '/../lib/BackgroundJob/CleanupDirectEditingTokens.php',
diff --git a/apps/files/lib/AdvancedCapabilities.php b/apps/files/lib/AdvancedCapabilities.php
new file mode 100644
index 00000000000..22f990f0cf8
--- /dev/null
+++ b/apps/files/lib/AdvancedCapabilities.php
@@ -0,0 +1,38 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\Files;
+
+use OCA\Files\Service\SettingsService;
+use OCP\Capabilities\ICapability;
+use OCP\Capabilities\IInitialStateExcludedCapability;
+
+/**
+ * Capabilities not needed for every request.
+ * This capabilities might be hard to compute or no used by the webui.
+ */
+class AdvancedCapabilities implements ICapability, IInitialStateExcludedCapability {
+
+ public function __construct(
+ protected SettingsService $service,
+ ) {
+ }
+
+ /**
+ * Return this classes capabilities
+ *
+ * @return array{files: array{'windows_compatible_filenames': bool}}
+ */
+ public function getCapabilities(): array {
+ return [
+ 'files' => [
+ 'windows_compatible_filenames' => $this->service->hasFilesWindowsSupport(),
+ ],
+ ];
+ }
+}
diff --git a/apps/files/lib/AppInfo/Application.php b/apps/files/lib/AppInfo/Application.php
index 8d00912f7bb..4b3948d43b5 100644
--- a/apps/files/lib/AppInfo/Application.php
+++ b/apps/files/lib/AppInfo/Application.php
@@ -9,6 +9,7 @@ declare(strict_types=1);
namespace OCA\Files\AppInfo;
use Closure;
+use OCA\Files\AdvancedCapabilities;
use OCA\Files\Capabilities;
use OCA\Files\Collaboration\Resources\Listener;
use OCA\Files\Collaboration\Resources\ResourceProvider;
@@ -107,6 +108,7 @@ class Application extends App implements IBootstrap {
* Register capabilities
*/
$context->registerCapability(Capabilities::class);
+ $context->registerCapability(AdvancedCapabilities::class);
$context->registerCapability(DirectEditingCapabilities::class);
$context->registerDeclarativeSettings(DeclarativeAdminSettings::class);
diff --git a/apps/files/openapi.json b/apps/files/openapi.json
index 5766b1cce13..fbb1bd17eeb 100644
--- a/apps/files/openapi.json
+++ b/apps/files/openapi.json
@@ -29,6 +29,7 @@
"files": {
"type": "object",
"required": [
+ "windows_compatible_filenames",
"$comment",
"bigfilechunking",
"blacklisted_files",
@@ -41,6 +42,9 @@
"directEditing"
],
"properties": {
+ "windows_compatible_filenames": {
+ "type": "boolean"
+ },
"$comment": {
"type": "string",
"nullable": true
diff --git a/apps/files/tests/AdvancedCapabilitiesTest.php b/apps/files/tests/AdvancedCapabilitiesTest.php
new file mode 100644
index 00000000000..af38c51a4a2
--- /dev/null
+++ b/apps/files/tests/AdvancedCapabilitiesTest.php
@@ -0,0 +1,47 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\Files;
+
+use OCA\Files\Service\SettingsService;
+use PHPUnit\Framework\MockObject\MockObject;
+use Test\TestCase;
+
+class AdvancedCapabilitiesTest extends TestCase {
+
+ protected SettingsService&MockObject $service;
+ protected AdvancedCapabilities $capabilities;
+
+ protected function setUp(): void {
+ $this->service = $this->createMock(SettingsService::class);
+ $this->capabilities = new AdvancedCapabilities($this->service);
+ }
+
+ /**
+ * @dataProvider dataGetCapabilities
+ */
+ public function testGetCapabilities(bool $wcf): void {
+ $this->service
+ ->expects(self::once())
+ ->method('hasFilesWindowsSupport')
+ ->willReturn($wcf);
+
+ self::assertEqualsCanonicalizing(['files' => [ 'windows_compatible_filenames' => $wcf ]], $this->capabilities->getCapabilities());
+ }
+
+ public static function dataGetCapabilities(): array {
+ return [
+ 'WCF enabled' => [
+ true,
+ ],
+ 'WCF disabled' => [
+ false,
+ ],
+ ];
+ }
+}