Skip to content

Commit a697da3

Browse files
committed
feat(files): Add capability for clients to check WCF state
This adds a non-initial-state capability for the windows-compatibile-filemnames feature. It is not required by the webui and it might have performance impacts (always compares system config against windows presets), so it is not included in every page load, but instead for querying from the clients. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
1 parent 8035c8d commit a697da3

File tree

6 files changed

+93
-0
lines changed

6 files changed

+93
-0
lines changed

apps/files/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
'OCA\\Files\\Activity\\Settings\\FileActivitySettings' => $baseDir . '/../lib/Activity/Settings/FileActivitySettings.php',
1717
'OCA\\Files\\Activity\\Settings\\FileChanged' => $baseDir . '/../lib/Activity/Settings/FileChanged.php',
1818
'OCA\\Files\\Activity\\Settings\\FileFavoriteChanged' => $baseDir . '/../lib/Activity/Settings/FileFavoriteChanged.php',
19+
'OCA\\Files\\AdvancedCapabilities' => $baseDir . '/../lib/AdvancedCapabilities.php',
1920
'OCA\\Files\\App' => $baseDir . '/../lib/App.php',
2021
'OCA\\Files\\AppInfo\\Application' => $baseDir . '/../lib/AppInfo/Application.php',
2122
'OCA\\Files\\BackgroundJob\\CleanupDirectEditingTokens' => $baseDir . '/../lib/BackgroundJob/CleanupDirectEditingTokens.php',

apps/files/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class ComposerStaticInitFiles
3131
'OCA\\Files\\Activity\\Settings\\FileActivitySettings' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileActivitySettings.php',
3232
'OCA\\Files\\Activity\\Settings\\FileChanged' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileChanged.php',
3333
'OCA\\Files\\Activity\\Settings\\FileFavoriteChanged' => __DIR__ . '/..' . '/../lib/Activity/Settings/FileFavoriteChanged.php',
34+
'OCA\\Files\\AdvancedCapabilities' => __DIR__ . '/..' . '/../lib/AdvancedCapabilities.php',
3435
'OCA\\Files\\App' => __DIR__ . '/..' . '/../lib/App.php',
3536
'OCA\\Files\\AppInfo\\Application' => __DIR__ . '/..' . '/../lib/AppInfo/Application.php',
3637
'OCA\\Files\\BackgroundJob\\CleanupDirectEditingTokens' => __DIR__ . '/..' . '/../lib/BackgroundJob/CleanupDirectEditingTokens.php',
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
namespace OCA\Files;
10+
11+
use OCA\Files\Service\SettingsService;
12+
use OCP\Capabilities\ICapability;
13+
use OCP\Capabilities\IInitialStateExcludedCapability;
14+
15+
/**
16+
* Capabilities not needed for every request.
17+
* This capabilities might be hard to compute or no used by the webui.
18+
*/
19+
class AdvancedCapabilities implements ICapability, IInitialStateExcludedCapability {
20+
21+
public function __construct(
22+
protected SettingsService $service,
23+
) {
24+
}
25+
26+
/**
27+
* Return this classes capabilities
28+
*
29+
* @return array{files: array{'windows_compatible_filenames': bool}}
30+
*/
31+
public function getCapabilities(): array {
32+
return [
33+
'files' => [
34+
'windows_compatible_filenames' => $this->service->hasFilesWindowsSupport(),
35+
],
36+
];
37+
}
38+
}

apps/files/lib/AppInfo/Application.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
namespace OCA\Files\AppInfo;
1010

1111
use Closure;
12+
use OCA\Files\AdvancedCapabilities;
1213
use OCA\Files\Capabilities;
1314
use OCA\Files\Collaboration\Resources\Listener;
1415
use OCA\Files\Collaboration\Resources\ResourceProvider;
@@ -107,6 +108,7 @@ public function register(IRegistrationContext $context): void {
107108
* Register capabilities
108109
*/
109110
$context->registerCapability(Capabilities::class);
111+
$context->registerCapability(AdvancedCapabilities::class);
110112
$context->registerCapability(DirectEditingCapabilities::class);
111113

112114
$context->registerDeclarativeSettings(DeclarativeAdminSettings::class);

apps/files/openapi.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"files": {
3030
"type": "object",
3131
"required": [
32+
"windows_compatible_filenames",
3233
"$comment",
3334
"bigfilechunking",
3435
"blacklisted_files",
@@ -41,6 +42,9 @@
4142
"directEditing"
4243
],
4344
"properties": {
45+
"windows_compatible_filenames": {
46+
"type": "boolean"
47+
},
4448
"$comment": {
4549
"type": "string",
4650
"nullable": true
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
7+
* SPDX-License-Identifier: AGPL-3.0-or-later
8+
*/
9+
namespace OCA\Files;
10+
11+
use OCA\Files\Service\SettingsService;
12+
use PHPUnit\Framework\MockObject\MockObject;
13+
use Test\TestCase;
14+
15+
class AdvancedCapabilitiesTest extends TestCase {
16+
17+
protected SettingsService&MockObject $service;
18+
protected AdvancedCapabilities $capabilities;
19+
20+
protected function setUp(): void {
21+
$this->service = $this->createMock(SettingsService::class);
22+
$this->capabilities = new AdvancedCapabilities($this->service);
23+
}
24+
25+
/**
26+
* @dataProvider dataGetCapabilities
27+
*/
28+
public function testGetCapabilities(bool $wcf): void {
29+
$this->service
30+
->expects(self::once())
31+
->method('hasFilesWindowsSupport')
32+
->willReturn($wcf);
33+
34+
self::assertEqualsCanonicalizing(['files' => [ 'windows_compatible_filenames' => $wcf ]], $this->capabilities->getCapabilities());
35+
}
36+
37+
public static function dataGetCapabilities(): array {
38+
return [
39+
'WCF enabled' => [
40+
true,
41+
],
42+
'WCF disabled' => [
43+
false,
44+
],
45+
];
46+
}
47+
}

0 commit comments

Comments
 (0)