]> source.dussan.org Git - nextcloud-server.git/commitdiff
Move DAV to the new bootstrap mechanism 21467/head
authorChristoph Wurst <christoph@winzerhof-wurst.at>
Thu, 18 Jun 2020 11:28:22 +0000 (13:28 +0200)
committerChristoph Wurst <christoph@winzerhof-wurst.at>
Fri, 19 Jun 2020 13:10:20 +0000 (15:10 +0200)
Signed-off-by: Christoph Wurst <christoph@winzerhof-wurst.at>
apps/dav/appinfo/app.php [deleted file]
apps/dav/lib/AppInfo/Application.php

diff --git a/apps/dav/appinfo/app.php b/apps/dav/appinfo/app.php
deleted file mode 100644 (file)
index 5e2d5c5..0000000
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-/**
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- *
- * @author Björn Schießle <bjoern@schiessle.org>
- * @author Christoph Wurst <christoph@winzerhof-wurst.at>
- * @author Georg Ehrke <oc.list@georgehrke.com>
- * @author Joas Schilling <coding@schilljs.com>
- * @author Julius Härtl <jus@bitgrid.net>
- * @author Lukas Reschke <lukas@statuscode.ch>
- * @author Thomas Citharel <nextcloud@tcit.fr>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Tobia De Koninck <tobia@ledfan.be>
- *
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * 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, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-use OCA\DAV\AppInfo\Application;
-use OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService;
-use OCA\DAV\CardDAV\CardDavBackend;
-use Symfony\Component\EventDispatcher\GenericEvent;
-
-\OC_App::loadApps(['dav']);
-
-/** @var Application $app */
-$app = \OC::$server->query(Application::class);
-$app->registerHooks();
-
-\OC::$server->registerService('CardDAVSyncService', function () use ($app) {
-       return $app->getSyncService();
-});
-
-$eventDispatcher = \OC::$server->getEventDispatcher();
-
-$eventDispatcher->addListener('OCP\Federation\TrustedServerEvent::remove',
-       function (GenericEvent $event) use ($app) {
-               /** @var CardDavBackend $cardDavBackend */
-               $cardDavBackend = $app->getContainer()->query(CardDavBackend::class);
-               $addressBookUri = $event->getSubject();
-               $addressBook = $cardDavBackend->getAddressBooksByUri('principals/system/system', $addressBookUri);
-               if (!is_null($addressBook)) {
-                       $cardDavBackend->deleteAddressBook($addressBook['id']);
-               }
-       }
-);
-
-$eventDispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createSubscription',
-       function (GenericEvent $event) use ($app) {
-               $jobList = $app->getContainer()->getServer()->getJobList();
-               $subscriptionData = $event->getArgument('subscriptionData');
-
-               /**
-                * Initial subscription refetch
-                * @var RefreshWebcalService $refreshWebcalService
-                */
-               $refreshWebcalService = $app->getContainer()->query(RefreshWebcalService::class);
-               $refreshWebcalService->refreshSubscription($subscriptionData['principaluri'], $subscriptionData['uri']);
-
-               $jobList->add(\OCA\DAV\BackgroundJob\RefreshWebcalJob::class, [
-                       'principaluri' => $subscriptionData['principaluri'],
-                       'uri' => $subscriptionData['uri']
-               ]);
-       }
-);
-
-$eventDispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteSubscription',
-       function (GenericEvent $event) use ($app) {
-               $jobList = $app->getContainer()->getServer()->getJobList();
-               $subscriptionData = $event->getArgument('subscriptionData');
-
-               $jobList->remove(\OCA\DAV\BackgroundJob\RefreshWebcalJob::class, [
-                       'principaluri' => $subscriptionData['principaluri'],
-                       'uri' => $subscriptionData['uri']
-               ]);
-
-               /** @var \OCA\DAV\CalDAV\CalDavBackend $calDavBackend */
-               $calDavBackend = $app->getContainer()->query(\OCA\DAV\CalDAV\CalDavBackend::class);
-               $calDavBackend->purgeAllCachedEventsForSubscription($subscriptionData['id']);
-       }
-);
-
-$eventHandler = function () use ($app) {
-       try {
-               $job = $app->getContainer()->query(\OCA\DAV\BackgroundJob\UpdateCalendarResourcesRoomsBackgroundJob::class);
-               $job->run([]);
-               $app->getContainer()->getServer()->getJobList()->setLastRun($job);
-       } catch (\Exception $ex) {
-               $app->getContainer()->getServer()->getLogger()->logException($ex);
-       }
-};
-
-$eventDispatcher->addListener('\OCP\Calendar\Resource\ForceRefreshEvent', $eventHandler);
-$eventDispatcher->addListener('\OCP\Calendar\Room\ForceRefreshEvent', $eventHandler);
-
-$cm = \OC::$server->getContactsManager();
-$cm->register(function () use ($cm, $app) {
-       $user = \OC::$server->getUserSession()->getUser();
-       if (!is_null($user)) {
-               $app->setupContactsProvider($cm, $user->getUID());
-       } else {
-               $app->setupSystemContactsProvider($cm);
-       }
-});
-
-$calendarManager = \OC::$server->getCalendarManager();
-$calendarManager->register(function () use ($calendarManager, $app) {
-       $user = \OC::$server->getUserSession()->getUser();
-       if ($user !== null) {
-               $app->setupCalendarProvider($calendarManager, $user->getUID());
-       }
-});
-
-$app->registerNotifier();
-$app->registerCalendarReminders();
index 7fd70f4c46765bdb3b34c1d9fdda44da96193182..a0d75f5fe2576548ec0b6cf1895d2fd5f139c778 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+declare(strict_types=1);
+
 /**
  * @copyright Copyright (c) 2016, ownCloud, Inc.
  *
 
 namespace OCA\DAV\AppInfo;
 
-use OC\AppFramework\Utility\SimpleContainer;
+use Exception;
+use OCA\DAV\BackgroundJob\UpdateCalendarResourcesRoomsBackgroundJob;
 use OCA\DAV\CalDAV\Activity\Backend;
 use OCA\DAV\CalDAV\Activity\Provider\Event;
 use OCA\DAV\CalDAV\BirthdayService;
+use OCA\DAV\CalDAV\CalDavBackend;
 use OCA\DAV\CalDAV\CalendarManager;
 use OCA\DAV\CalDAV\Reminder\Backend as ReminderBackend;
 use OCA\DAV\CalDAV\Reminder\NotificationProvider\AudioProvider;
@@ -42,31 +47,48 @@ use OCA\DAV\CalDAV\Reminder\NotificationProvider\PushProvider;
 use OCA\DAV\CalDAV\Reminder\NotificationProviderManager;
 use OCA\DAV\CalDAV\Reminder\Notifier;
 use OCA\DAV\CalDAV\Reminder\ReminderService;
+use OCA\DAV\CalDAV\WebcalCaching\RefreshWebcalService;
 use OCA\DAV\Capabilities;
+use OCA\DAV\CardDAV\CardDavBackend;
 use OCA\DAV\CardDAV\ContactsManager;
 use OCA\DAV\CardDAV\PhotoCache;
 use OCA\DAV\CardDAV\SyncService;
 use OCA\DAV\HookManager;
 use OCP\AppFramework\App;
+use OCP\AppFramework\Bootstrap\IBootContext;
+use OCP\AppFramework\Bootstrap\IBootstrap;
+use OCP\AppFramework\Bootstrap\IRegistrationContext;
+use OCP\AppFramework\IAppContainer;
 use OCP\Calendar\IManager as ICalendarManager;
 use OCP\Contacts\IManager as IContactsManager;
 use OCP\IConfig;
+use OCP\IContainer;
+use OCP\ILogger;
+use OCP\IServerContainer;
 use OCP\IUser;
+use OCP\Notification\IManager as INotificationManager;
+use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use Symfony\Component\EventDispatcher\GenericEvent;
+use Throwable;
+use function is_null;
+use function strpos;
 
-class Application extends App {
+class Application extends App implements IBootstrap {
        public const APP_ID = 'dav';
 
        /**
         * Application constructor.
         */
        public function __construct() {
-               parent::__construct('dav');
+               parent::__construct(self::APP_ID);
+       }
 
-               $container = $this->getContainer();
-               $server = $container->getServer();
+       public function register(IRegistrationContext $context): void {
+               $context->registerServiceAlias('CardDAVSyncService', SyncService::class);
+               $context->registerService(PhotoCache::class, function (IContainer $c) {
+                       /** @var IServerContainer $server */
+                       $server = $c->query(IServerContainer::class);
 
-               $container->registerService(PhotoCache::class, function (SimpleContainer $s) use ($server) {
                        return new PhotoCache(
                                $server->getAppDataDir('dav-photocache'),
                                $server->getLogger()
@@ -76,46 +98,42 @@ class Application extends App {
                /*
                 * Register capabilities
                 */
-               $container->registerCapability(Capabilities::class);
+               $context->registerCapability(Capabilities::class);
        }
 
-       /**
-        * @param IContactsManager $contactsManager
-        * @param string $userID
-        */
-       public function setupContactsProvider(IContactsManager $contactsManager, $userID) {
-               /** @var ContactsManager $cm */
-               $cm = $this->getContainer()->query(ContactsManager::class);
-               $urlGenerator = $this->getContainer()->getServer()->getURLGenerator();
-               $cm->setupContactsProvider($contactsManager, $userID, $urlGenerator);
-       }
+       public function boot(IBootContext $context): void {
+               // Load all dav apps
+               \OC_App::loadApps(['dav']);
 
-       /**
-        * @param IContactsManager $contactsManager
-        */
-       public function setupSystemContactsProvider(IContactsManager $contactsManager) {
-               /** @var ContactsManager $cm */
-               $cm = $this->getContainer()->query(ContactsManager::class);
-               $urlGenerator = $this->getContainer()->getServer()->getURLGenerator();
-               $cm->setupSystemContactsProvider($contactsManager, $urlGenerator);
+               $this->registerHooks(
+                       $context->getAppContainer()->query(HookManager::class),
+                       $context->getServerContainer()->getEventDispatcher(),
+                       $context->getAppContainer(),
+                       $context->getServerContainer()
+               );
+               $this->registerContactsManager(
+                       $context->getAppContainer()->query(IContactsManager::class),
+                       $context->getAppContainer()
+               );
+               $this->registerCalendarManager(
+                       $context->getAppContainer()->query(ICalendarManager::class),
+                       $context->getAppContainer()
+               );
+               $this->registerNotifier(
+                       $context->getServerContainer()->getNotificationManager()
+               );
+               $this->registerCalendarReminders(
+                       $context->getAppContainer()->query(NotificationProviderManager::class),
+                       $context->getAppContainer()->query(ILogger::class)
+               );
        }
 
-       /**
-        * @param ICalendarManager $calendarManager
-        * @param string $userId
-        */
-       public function setupCalendarProvider(ICalendarManager $calendarManager, $userId) {
-               $cm = $this->getContainer()->query(CalendarManager::class);
-               $cm->setupCalendarProvider($calendarManager, $userId);
-       }
-
-       public function registerHooks() {
-               /** @var HookManager $hm */
-               $hm = $this->getContainer()->query(HookManager::class);
+       private function registerHooks(HookManager $hm,
+                                                                  EventDispatcherInterface $dispatcher,
+                                                                  IAppContainer $container,
+                                                                  IServerContainer $serverContainer) {
                $hm->setup();
 
-               $dispatcher = $this->getContainer()->getServer()->getEventDispatcher();
-
                // first time login event setup
                $dispatcher->addListener(IUser::class . '::firstLogin', function ($event) use ($hm) {
                        if ($event instanceof GenericEvent) {
@@ -123,35 +141,35 @@ class Application extends App {
                        }
                });
 
-               $birthdayListener = function ($event) {
+               $birthdayListener = function ($event) use ($container) {
                        if ($event instanceof GenericEvent) {
                                /** @var BirthdayService $b */
-                               $b = $this->getContainer()->query(BirthdayService::class);
+                               $b = $container->query(BirthdayService::class);
                                $b->onCardChanged(
-                                       $event->getArgument('addressBookId'),
-                                       $event->getArgument('cardUri'),
-                                       $event->getArgument('cardData')
+                                       (int) $event->getArgument('addressBookId'),
+                                       (string) $event->getArgument('cardUri'),
+                                       (string) $event->getArgument('cardData')
                                );
                        }
                };
 
                $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::createCard', $birthdayListener);
                $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::updateCard', $birthdayListener);
-               $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', function ($event) {
+               $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', function ($event) use ($container) {
                        if ($event instanceof GenericEvent) {
                                /** @var BirthdayService $b */
-                               $b = $this->getContainer()->query(BirthdayService::class);
+                               $b = $container->query(BirthdayService::class);
                                $b->onCardDeleted(
-                                       $event->getArgument('addressBookId'),
-                                       $event->getArgument('cardUri')
+                                       (int) $event->getArgument('addressBookId'),
+                                       (string) $event->getArgument('cardUri')
                                );
                        }
                });
 
-               $clearPhotoCache = function ($event) {
+               $clearPhotoCache = function ($event) use ($container) {
                        if ($event instanceof GenericEvent) {
                                /** @var PhotoCache $p */
-                               $p = $this->getContainer()->query(PhotoCache::class);
+                               $p = $container->query(PhotoCache::class);
                                $p->delete(
                                        $event->getArgument('addressBookId'),
                                        $event->getArgument('cardUri')
@@ -161,44 +179,46 @@ class Application extends App {
                $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::updateCard', $clearPhotoCache);
                $dispatcher->addListener('\OCA\DAV\CardDAV\CardDavBackend::deleteCard', $clearPhotoCache);
 
-               $dispatcher->addListener('OC\AccountManager::userUpdated', function (GenericEvent $event) {
+               $dispatcher->addListener('OC\AccountManager::userUpdated', function (GenericEvent $event) use ($container) {
                        $user = $event->getSubject();
-                       $syncService = $this->getContainer()->query(SyncService::class);
+                       /** @var SyncService $syncService */
+                       $syncService = $container->query(SyncService::class);
                        $syncService->updateUser($user);
                });
 
-               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendar', function (GenericEvent $event) {
+               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createCalendar', function (GenericEvent $event) use ($container) {
                        /** @var Backend $backend */
-                       $backend = $this->getContainer()->query(Backend::class);
+                       $backend = $container->query(Backend::class);
                        $backend->onCalendarAdd(
                                $event->getArgument('calendarData')
                        );
                });
-               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendar', function (GenericEvent $event) {
+               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateCalendar', function (GenericEvent $event) use ($container) {
                        /** @var Backend $backend */
-                       $backend = $this->getContainer()->query(Backend::class);
+                       $backend = $container->query(Backend::class);
                        $backend->onCalendarUpdate(
                                $event->getArgument('calendarData'),
                                $event->getArgument('shares'),
                                $event->getArgument('propertyMutations')
                        );
                });
-               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function (GenericEvent $event) {
+               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function (GenericEvent $event) use ($container) {
                        /** @var Backend $backend */
-                       $backend = $this->getContainer()->query(Backend::class);
+                       $backend = $container->query(Backend::class);
                        $backend->onCalendarDelete(
                                $event->getArgument('calendarData'),
                                $event->getArgument('shares')
                        );
 
-                       $reminderBackend = $this->getContainer()->query(ReminderBackend::class);
+                       /** @var ReminderBackend $reminderBackend */
+                       $reminderBackend = $container->query(ReminderBackend::class);
                        $reminderBackend->cleanRemindersForCalendar(
-                               $event->getArgument('calendarId')
+                               (int) $event->getArgument('calendarId')
                        );
                });
-               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateShares', function (GenericEvent $event) {
+               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::updateShares', function (GenericEvent $event) use ($container) {
                        /** @var Backend $backend */
-                       $backend = $this->getContainer()->query(Backend::class);
+                       $backend = $container->query(Backend::class);
                        $backend->onCalendarUpdateShares(
                                $event->getArgument('calendarData'),
                                $event->getArgument('shares'),
@@ -209,18 +229,18 @@ class Application extends App {
                        // Here we should recalculate if reminders should be sent to new or old sharees
                });
 
-               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::publishCalendar', function (GenericEvent $event) {
+               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::publishCalendar', function (GenericEvent $event) use ($container) {
                        /** @var Backend $backend */
-                       $backend = $this->getContainer()->query(Backend::class);
+                       $backend = $container->query(Backend::class);
                        $backend->onCalendarPublication(
                                $event->getArgument('calendarData'),
                                $event->getArgument('public')
                        );
                });
 
-               $listener = function (GenericEvent $event, $eventName) {
+               $listener = function (GenericEvent $event, $eventName) use ($container) {
                        /** @var Backend $backend */
-                       $backend = $this->getContainer()->query(Backend::class);
+                       $backend = $container->query(Backend::class);
 
                        $subject = Event::SUBJECT_OBJECT_ADD;
                        if ($eventName === '\OCA\DAV\CalDAV\CalDavBackend::updateCalendarObject') {
@@ -236,7 +256,7 @@ class Application extends App {
                        );
 
                        /** @var ReminderService $reminderBackend */
-                       $reminderService = $this->getContainer()->query(ReminderService::class);
+                       $reminderService = $container->query(ReminderService::class);
 
                        $reminderService->onTouchCalendarObject(
                                $eventName,
@@ -250,9 +270,9 @@ class Application extends App {
                /**
                 * In case the user has set their default calendar to this one
                 */
-               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function (GenericEvent $event) {
+               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteCalendar', function (GenericEvent $event) use ($serverContainer) {
                        /** @var IConfig $config */
-                       $config = $this->getContainer()->getServer()->getConfig();
+                       $config = $serverContainer->getConfig();
                        $principalUri = $event->getArgument('calendarData')['principaluri'];
                        if (strpos($principalUri, 'principals/users') === 0) {
                                list(, $UID) = \Sabre\Uri\split($principalUri);
@@ -262,28 +282,130 @@ class Application extends App {
                                }
                        }
                });
+
+               $dispatcher->addListener('OCP\Federation\TrustedServerEvent::remove',
+                       function (GenericEvent $event) {
+                               /** @var CardDavBackend $cardDavBackend */
+                               $cardDavBackend = \OC::$server->query(CardDavBackend::class);
+                               $addressBookUri = $event->getSubject();
+                               $addressBook = $cardDavBackend->getAddressBooksByUri('principals/system/system', $addressBookUri);
+                               if (!is_null($addressBook)) {
+                                       $cardDavBackend->deleteAddressBook($addressBook['id']);
+                               }
+                       }
+               );
+
+               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::createSubscription',
+                       function (GenericEvent $event) use ($container, $serverContainer) {
+                               $jobList = $serverContainer->getJobList();
+                               $subscriptionData = $event->getArgument('subscriptionData');
+
+                               /**
+                                * Initial subscription refetch
+                                *
+                                * @var RefreshWebcalService $refreshWebcalService
+                                */
+                               $refreshWebcalService = $container->query(RefreshWebcalService::class);
+                               $refreshWebcalService->refreshSubscription(
+                                       (string) $subscriptionData['principaluri'],
+                                       (string) $subscriptionData['uri']
+                               );
+
+                               $jobList->add(\OCA\DAV\BackgroundJob\RefreshWebcalJob::class, [
+                                       'principaluri' => $subscriptionData['principaluri'],
+                                       'uri' => $subscriptionData['uri']
+                               ]);
+                       }
+               );
+
+               $dispatcher->addListener('\OCA\DAV\CalDAV\CalDavBackend::deleteSubscription',
+                       function (GenericEvent $event) use ($container, $serverContainer) {
+                               $jobList = $serverContainer->getJobList();
+                               $subscriptionData = $event->getArgument('subscriptionData');
+
+                               $jobList->remove(\OCA\DAV\BackgroundJob\RefreshWebcalJob::class, [
+                                       'principaluri' => $subscriptionData['principaluri'],
+                                       'uri' => $subscriptionData['uri']
+                               ]);
+
+                               /** @var CalDavBackend $calDavBackend */
+                               $calDavBackend = $container->query(CalDavBackend::class);
+                               $calDavBackend->purgeAllCachedEventsForSubscription($subscriptionData['id']);
+                       }
+               );
+
+               $eventHandler = function () use ($container, $serverContainer) {
+                       try {
+                               /** @var UpdateCalendarResourcesRoomsBackgroundJob $job */
+                               $job = $container->query(UpdateCalendarResourcesRoomsBackgroundJob::class);
+                               $job->run([]);
+                               $serverContainer->getJobList()->setLastRun($job);
+                       } catch (Exception $ex) {
+                               $serverContainer->getLogger()->logException($ex);
+                       }
+               };
+
+               $dispatcher->addListener('\OCP\Calendar\Resource\ForceRefreshEvent', $eventHandler);
+               $dispatcher->addListener('\OCP\Calendar\Room\ForceRefreshEvent', $eventHandler);
+       }
+
+       private function registerContactsManager(IContactsManager $cm, IAppContainer $container): void {
+               $cm->register(function () use ($container, $cm): void {
+                       $user = \OC::$server->getUserSession()->getUser();
+                       if (!is_null($user)) {
+                               $this->setupContactsProvider($cm, $container, $user->getUID());
+                       } else {
+                               $this->setupSystemContactsProvider($cm, $container);
+                       }
+               });
        }
 
-       public function getSyncService() {
-               return $this->getContainer()->query(SyncService::class);
+       private function setupContactsProvider(IContactsManager $contactsManager,
+                                                                                  IAppContainer $container,
+                                                                                  string $userID): void {
+               /** @var ContactsManager $cm */
+               $cm = $container->query(ContactsManager::class);
+               $urlGenerator = $container->getServer()->getURLGenerator();
+               $cm->setupContactsProvider($contactsManager, $userID, $urlGenerator);
+       }
+
+       private function setupSystemContactsProvider(IContactsManager $contactsManager,
+                                                                                                IAppContainer $container): void {
+               /** @var ContactsManager $cm */
+               $cm = $container->query(ContactsManager::class);
+               $urlGenerator = $container->getServer()->getURLGenerator();
+               $cm->setupSystemContactsProvider($contactsManager, $urlGenerator);
+       }
+
+       private function registerCalendarManager(ICalendarManager $calendarManager,
+                                                                                        IAppContainer $container): void {
+               $calendarManager->register(function () use ($container, $calendarManager) {
+                       $user = \OC::$server->getUserSession()->getUser();
+                       if ($user !== null) {
+                               $this->setupCalendarProvider($calendarManager, $container, $user->getUID());
+                       }
+               });
+       }
+
+       private function setupCalendarProvider(ICalendarManager $calendarManager,
+                                                                                  IAppContainer $container,
+                                                                                  $userId) {
+               $cm = $container->query(CalendarManager::class);
+               $cm->setupCalendarProvider($calendarManager, $userId);
        }
 
-       public function registerNotifier():void {
-               $this->getContainer()
-                       ->getServer()
-                       ->getNotificationManager()
-                       ->registerNotifierService(Notifier::class);
+       private function registerNotifier(INotificationManager $manager): void {
+               $manager->registerNotifierService(Notifier::class);
        }
 
-       public function registerCalendarReminders():void {
+       private function registerCalendarReminders(NotificationProviderManager $manager,
+                                                                                          ILogger $logger): void {
                try {
-                       /** @var NotificationProviderManager $notificationProviderManager */
-                       $notificationProviderManager = $this->getContainer()->query(NotificationProviderManager::class);
-                       $notificationProviderManager->registerProvider(AudioProvider::class);
-                       $notificationProviderManager->registerProvider(EmailProvider::class);
-                       $notificationProviderManager->registerProvider(PushProvider::class);
-               } catch (\Exception $ex) {
-                       $this->getContainer()->getServer()->getLogger()->logException($ex);
+                       $manager->registerProvider(AudioProvider::class);
+                       $manager->registerProvider(EmailProvider::class);
+                       $manager->registerProvider(PushProvider::class);
+               } catch (Throwable $ex) {
+                       $logger->logException($ex);
                }
        }
 }