diff options
Diffstat (limited to 'lib/private/App/AppManager.php')
-rw-r--r-- | lib/private/App/AppManager.php | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/private/App/AppManager.php b/lib/private/App/AppManager.php index 65a1e9e1e7e..3867dcc509e 100644 --- a/lib/private/App/AppManager.php +++ b/lib/private/App/AppManager.php @@ -98,7 +98,12 @@ class AppManager implements IAppManager { private array $loadedApps = []; private ?AppConfig $appConfig = null; + private ?IURLGenerator $urlGenerator = null; + /** + * Be extremely careful when injecting classes here. The AppManager is used by the installer, + * so it needs to work before installation. See how AppConfig and IURLGenerator are injected for reference + */ public function __construct( private IUserSession $userSession, private IConfig $config, @@ -106,7 +111,6 @@ class AppManager implements IAppManager { private ICacheFactory $memCacheFactory, private IEventDispatcher $dispatcher, private LoggerInterface $logger, - private IURLGenerator $urlGenerator, ) { } @@ -115,7 +119,7 @@ class AppManager implements IAppManager { $icon = null; foreach ($possibleIcons as $iconName) { try { - $icon = $this->urlGenerator->imagePath($appId, $iconName); + $icon = $this->getUrlGenerator()->imagePath($appId, $iconName); break; } catch (\RuntimeException $e) { // ignore @@ -135,6 +139,17 @@ class AppManager implements IAppManager { return $this->appConfig; } + private function getUrlGenerator(): IURLGenerator { + if ($this->urlGenerator !== null) { + return $this->urlGenerator; + } + if (!$this->config->getSystemValueBool('installed', false)) { + throw new \Exception('Nextcloud is not installed yet, AppConfig is not available'); + } + $this->urlGenerator = \OCP\Server::get(IURLGenerator::class); + return $this->urlGenerator; + } + /** * @return string[] $appId => $enabled */ |