diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index e58cab05d..78dd0df19 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -22,15 +22,14 @@ */ namespace OCA\Contacts\AppInfo; -use OCA\Contacts\Dav\PatchPlugin; use OCA\Contacts\Listener\LoadContactsFilesActions; +use OCA\Contacts\Listener\LoadCustomPlugins; +use OCA\DAV\Events\SabreAddPluginEvent; use OCA\Files\Event\LoadAdditionalScriptsEvent; use OCP\AppFramework\App; use OCP\AppFramework\Bootstrap\IBootContext; use OCP\AppFramework\Bootstrap\IBootstrap; use OCP\AppFramework\Bootstrap\IRegistrationContext; -use OCP\EventDispatcher\IEventDispatcher; -use OCP\SabrePluginEvent; class Application extends App implements IBootstrap { public const APP_ID = 'contacts'; @@ -45,23 +44,9 @@ public function __construct() { public function register(IRegistrationContext $context): void { $context->registerEventListener(LoadAdditionalScriptsEvent::class, LoadContactsFilesActions::class); + $context->registerEventListener(SabreAddPluginEvent::class, LoadCustomPlugins::class); } public function boot(IBootContext $context): void { - $appContainer = $context->getAppContainer(); - $serverContainer = $context->getServerContainer(); - - /** @var IEventDispatcher $eventDispatcher */ - $eventDispatcher = $serverContainer->get(IEventDispatcher::class); - $eventDispatcher->addListener('OCA\DAV\Connector\Sabre::addPlugin', static function (SabrePluginEvent $event) use ($appContainer) { - if ($event->getServer() === null) { - return; - } - - // We have to register the PatchPlugin here and not info.xml, - // because info.xml plugins are loaded, after the - // beforeMethod:* hook has already been emitted. - $event->getServer()->addPlugin($appContainer->get(PatchPlugin::class)); - }); } } diff --git a/lib/Listener/LoadCustomPlugins.php b/lib/Listener/LoadCustomPlugins.php new file mode 100644 index 000000000..6f610ac19 --- /dev/null +++ b/lib/Listener/LoadCustomPlugins.php @@ -0,0 +1,56 @@ + + * + * @author Thomas Citharel + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCA\Contacts\Listener; + +use OCA\Contacts\Dav\PatchPlugin; +use OCA\DAV\Events\SabreAddPluginEvent; +use OCP\EventDispatcher\Event; +use OCP\EventDispatcher\IEventListener; + +class LoadCustomPlugins implements IEventListener { + /** @var PatchPlugin */ + private $patchPlugin; + + public function __construct(PatchPlugin $patchPlugin) { + $this->patchPlugin = $patchPlugin; + } + + public function handle(Event $event): void { + if (!($event instanceof SabreAddPluginEvent)) { + return; + } + + if ($event->getServer() === null) { + return; + } + + // We have to register the PatchPlugin here and not info.xml, + // because info.xml plugins are loaded, after the + // beforeMethod:* hook has already been emitted. + $event->getServer()->addPlugin($this->patchPlugin); + } +}