Skip to content

Commit 569b21f

Browse files
authored
Merge pull request #51568 from nextcloud/feat/add-wcf-cap
feat(files): Add capability for clients to check WCF state
2 parents f938e82 + a697da3 commit 569b21f

File tree

6 files changed

+93
-0
lines changed

6 files changed

+93
-0
lines changed

apps/files/composer/composer/autoload_classmap.php

+1
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

+1
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',
+38
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

+2
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

+4
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
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)