Skip to content

Commit 10b82c8

Browse files
committed
feat(files_sharing): Support priority in public template providers
Signed-off-by: Louis Chmn <[email protected]>
1 parent 1c7ed89 commit 10b82c8

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

lib/composer/composer/autoload_classmap.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,7 @@
814814
'OCP\\Share\\IProviderFactory' => $baseDir . '/lib/public/Share/IProviderFactory.php',
815815
'OCP\\Share\\IPublicShareTemplateFactory' => $baseDir . '/lib/public/Share/IPublicShareTemplateFactory.php',
816816
'OCP\\Share\\IPublicShareTemplateProvider' => $baseDir . '/lib/public/Share/IPublicShareTemplateProvider.php',
817+
'OCP\\Share\\IPublicShareTemplateProviderWithPriority' => $baseDir . '/lib/public/Share/IPublicShareTemplateProviderWithPriority.php',
817818
'OCP\\Share\\IShare' => $baseDir . '/lib/public/Share/IShare.php',
818819
'OCP\\Share\\IShareHelper' => $baseDir . '/lib/public/Share/IShareHelper.php',
819820
'OCP\\Share\\IShareProvider' => $baseDir . '/lib/public/Share/IShareProvider.php',

lib/composer/composer/autoload_static.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -855,6 +855,7 @@ class ComposerStaticInit749170dad3f5e7f9ca158f5a9f04f6a2
855855
'OCP\\Share\\IProviderFactory' => __DIR__ . '/../../..' . '/lib/public/Share/IProviderFactory.php',
856856
'OCP\\Share\\IPublicShareTemplateFactory' => __DIR__ . '/../../..' . '/lib/public/Share/IPublicShareTemplateFactory.php',
857857
'OCP\\Share\\IPublicShareTemplateProvider' => __DIR__ . '/../../..' . '/lib/public/Share/IPublicShareTemplateProvider.php',
858+
'OCP\\Share\\IPublicShareTemplateProviderWithPriority' => __DIR__ . '/../../..' . '/lib/public/Share/IPublicShareTemplateProviderWithPriority.php',
858859
'OCP\\Share\\IShare' => __DIR__ . '/../../..' . '/lib/public/Share/IShare.php',
859860
'OCP\\Share\\IShareHelper' => __DIR__ . '/../../..' . '/lib/public/Share/IShareHelper.php',
860861
'OCP\\Share\\IShareProvider' => __DIR__ . '/../../..' . '/lib/public/Share/IShareProvider.php',

lib/private/Share20/PublicShareTemplateFactory.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,12 @@
1313
use OCP\Server;
1414
use OCP\Share\IPublicShareTemplateFactory;
1515
use OCP\Share\IPublicShareTemplateProvider;
16+
use OCP\Share\IPublicShareTemplateProviderWithPriority;
1617
use OCP\Share\IShare;
1718

1819
class PublicShareTemplateFactory implements IPublicShareTemplateFactory {
20+
public const DEFAULT_PRIORITY = 10;
21+
1922
public function __construct(
2023
private Coordinator $coordinator,
2124
private DefaultPublicShareTemplateProvider $defaultProvider,
@@ -41,6 +44,13 @@ public function getProvider(IShare $share): IPublicShareTemplateProvider {
4144
if (count($filteredProviders) === 0) {
4245
return $this->defaultProvider;
4346
} else {
47+
usort($filteredProviders, function (IPublicShareTemplateProvider $a, IPublicShareTemplateProvider $b) {
48+
$aPriority = $a instanceof IPublicShareTemplateProviderWithPriority ? $a->getPriority() : self::DEFAULT_PRIORITY;
49+
$bPriority = $b instanceof IPublicShareTemplateProviderWithPriority ? $b->getPriority() : self::DEFAULT_PRIORITY;
50+
51+
return $aPriority <=> $bPriority;
52+
});
53+
4454
return array_shift($filteredProviders);
4555
}
4656
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
/**
5+
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
6+
* SPDX-License-Identifier: AGPL-3.0-or-later
7+
*/
8+
9+
namespace OCP\Share;
10+
11+
use OCP\AppFramework\Attribute\Consumable;
12+
use OCP\AppFramework\Attribute\Implementable;
13+
14+
/**
15+
* Allow providers to specify a priority for selection when multiple providers can handle a share.
16+
*
17+
* @since 33.0.0
18+
*/
19+
#[Consumable(since: '33.0.0')]
20+
#[Implementable(since: '33.0.0')]
21+
interface IPublicShareTemplateProviderWithPriority {
22+
/**
23+
* Returns the priority of the provider. Lower values indicate higher priority.
24+
*
25+
* @since 33.0.0
26+
*/
27+
public function getPriority(): int;
28+
}

0 commit comments

Comments
 (0)