. * */ namespace OCA\Talk\Files; use OCA\Files\Event\LoadSidebar; use OCA\Talk\AppInfo\Application; use OCA\Talk\Config; use OCA\Talk\TInitialState; use OCP\App\IAppManager; use OCP\AppFramework\Services\IInitialState; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventDispatcher; use OCP\EventDispatcher\IEventListener; use OCP\Files\IRootFolder; use OCP\ICacheFactory; use OCP\IConfig; use OCP\IUser; use OCP\IUserSession; use OCP\Util; /** * Helper class to add the Talk UI to the sidebar of the Files app. */ class TemplateLoader implements IEventListener { use TInitialState; /** @var IAppManager */ private $appManager; /** @var IRootFolder */ private $rootFolder; /** @var IUserSession */ private $userSession; public function __construct(IInitialState $initialState, ICacheFactory $memcacheFactory, Config $talkConfig, IConfig $serverConfig, IAppManager $appManager, IRootFolder $rootFolder, IUserSession $userSession) { $this->initialState = $initialState; $this->memcacheFactory = $memcacheFactory; $this->talkConfig = $talkConfig; $this->serverConfig = $serverConfig; $this->appManager = $appManager; $this->rootFolder = $rootFolder; $this->userSession = $userSession; } public static function register(IEventDispatcher $dispatcher): void { $dispatcher->addServiceListener(LoadSidebar::class, self::class); } /** * Loads the Talk UI in the sidebar of the Files app. * * This method should be called when handling the LoadSidebar event of the * Files app. * * @param Event $event */ public function handle(Event $event): void { if (!($event instanceof LoadSidebar)) { return; } if ($this->serverConfig->getAppValue('spreed', 'conversations_files', '1') !== '1') { return; } Util::addStyle(Application::APP_ID, 'merged-files'); Util::addScript(Application::APP_ID, 'talk-files-sidebar'); $user = $this->userSession->getUser(); if ($user instanceof IUser) { $this->publishInitialStateForUser($user, $this->rootFolder, $this->appManager); } else { $this->publishInitialStateForGuest(); } } }