From fdfe984adbfa8887fb743bed1d1c61f01a9a283a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 22 Feb 2019 15:11:09 +0100 Subject: [PATCH] Register providers via class names Signed-off-by: Joas Schilling --- apps/files/lib/AppInfo/Application.php | 2 +- .../Collaboration/Resources/Manager.php | 31 ++++++++++++++++--- .../Collaboration/Resources/IManager.php | 5 +-- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/apps/files/lib/AppInfo/Application.php b/apps/files/lib/AppInfo/Application.php index bb674692891..dc2ed59618e 100644 --- a/apps/files/lib/AppInfo/Application.php +++ b/apps/files/lib/AppInfo/Application.php @@ -108,7 +108,7 @@ class Application extends App { */ /** @var IManager $resourceManager */ $resourceManager = $container->query(IManager::class); - $resourceManager->registerResourceProvider($container->query(ResourceProvider::class)); + $resourceManager->registerResourceProvider(ResourceProvider::class); Listener::register($server->getEventDispatcher()); } } diff --git a/lib/private/Collaboration/Resources/Manager.php b/lib/private/Collaboration/Resources/Manager.php index 3c2714b76a6..54852e9cce5 100644 --- a/lib/private/Collaboration/Resources/Manager.php +++ b/lib/private/Collaboration/Resources/Manager.php @@ -24,6 +24,7 @@ namespace OC\Collaboration\Resources; use Doctrine\DBAL\Exception\UniqueConstraintViolationException; +use OCP\AppFramework\QueryException; use OCP\Collaboration\Resources\CollectionException; use OCP\Collaboration\Resources\ICollection; use OCP\Collaboration\Resources\IManager; @@ -32,6 +33,7 @@ use OCP\Collaboration\Resources\IResource; use OCP\Collaboration\Resources\ResourceException; use OCP\DB\QueryBuilder\IQueryBuilder; use OCP\IDBConnection; +use OCP\ILogger; use OCP\IUser; class Manager implements IManager { @@ -42,12 +44,18 @@ class Manager implements IManager { /** @var IDBConnection */ protected $connection; + /** @var ILogger */ + protected $logger; - /** @var IProvider[] */ + /** @var string[] */ protected $providers = []; - public function __construct(IDBConnection $connection) { + /** @var IProvider[] */ + protected $providerInstances = []; + + public function __construct(IDBConnection $connection, ILogger $logger) { $this->connection = $connection; + $this->logger = $logger; } /** @@ -260,7 +268,20 @@ class Manager implements IManager { * @since 16.0.0 */ public function getProviders(): array { - return $this->providers; + if (!empty($this->providers)) { + foreach ($this->providers as $provider) { + try { + $this->providerInstances[] = \OC::$server->query($provider); + } catch (QueryException $e) { + $this->logger->logException($e, [ + 'message' => 'Error when instantiating resource provider' + ]); + } + } + $this->providers = []; + } + + return $this->providerInstances; } /** @@ -504,9 +525,9 @@ class Manager implements IManager { } /** - * @param IProvider $provider + * @param string $provider */ - public function registerResourceProvider(IProvider $provider): void { + public function registerResourceProvider(string $provider): void { $this->providers[] = $provider; } diff --git a/lib/public/Collaboration/Resources/IManager.php b/lib/public/Collaboration/Resources/IManager.php index a04edaf9f8c..fe694bbffbc 100644 --- a/lib/public/Collaboration/Resources/IManager.php +++ b/lib/public/Collaboration/Resources/IManager.php @@ -114,7 +114,8 @@ interface IManager extends IProvider { public function getResourceForUser(string $type, string $id, ?IUser $user): IResource; /** - * @param IProvider $provider + * @param string $provider + * @since 16.0.0 */ - public function registerResourceProvider(IProvider $provider): void; + public function registerResourceProvider(string $provider): void; }