diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/private/App/AppManager.php | 19 | ||||
-rw-r--r-- | lib/private/Server.php | 1 |
2 files changed, 17 insertions, 3 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 */ diff --git a/lib/private/Server.php b/lib/private/Server.php index 2257513147c..21d60d55829 100644 --- a/lib/private/Server.php +++ b/lib/private/Server.php @@ -897,7 +897,6 @@ class Server extends ServerContainer implements IServerContainer { $c->get(ICacheFactory::class), $c->get(IEventDispatcher::class), $c->get(LoggerInterface::class), - $c->get(IURLGenerator::class), ); }); /** @deprecated 19.0.0 */ |