From 40357208c0644d486b1a918b4f904a74d1f8c0d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julius=20H=C3=A4rtl?= Date: Tue, 5 Oct 2021 15:35:52 +0200 Subject: Do not load template directories twice MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julius Härtl --- lib/Template/CollaboraTemplateProvider.php | 22 ++++++++++++++++++++-- lib/TemplateManager.php | 2 +- 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'lib') diff --git a/lib/Template/CollaboraTemplateProvider.php b/lib/Template/CollaboraTemplateProvider.php index 4246f98b..409ba70c 100644 --- a/lib/Template/CollaboraTemplateProvider.php +++ b/lib/Template/CollaboraTemplateProvider.php @@ -29,7 +29,9 @@ namespace OCA\Richdocuments\Template; use OCA\Richdocuments\TemplateManager; use OCP\Files\File; +use OCP\Files\NotFoundException; use OCP\Files\Template\ICustomTemplateProvider; +use OCP\Files\Template\ITemplateManager; use OCP\Files\Template\Template; use OCP\Files\Template\TemplateFileCreator; use OCP\IURLGenerator; @@ -40,10 +42,13 @@ class CollaboraTemplateProvider implements ICustomTemplateProvider { private $templateManager; /** @var IURLGenerator */ private $urlGenerator; + /** @var ITemplateManager */ + private $coreTemplateManager; - public function __construct(TemplateManager $templateManager, IURLGenerator $urlGenerator) { + public function __construct(TemplateManager $templateManager, IURLGenerator $urlGenerator, ITemplateManager $coreTemplateManager) { $this->templateManager = $templateManager; $this->urlGenerator = $urlGenerator; + $this->coreTemplateManager = $coreTemplateManager; } public function getTemplateType(): string { @@ -63,11 +68,24 @@ class CollaboraTemplateProvider implements ICustomTemplateProvider { return []; } + $collaboraTemplates = $this->isSameUserTemplateFolder() ? $this->templateManager->getSystem($type) : $this->templateManager->getAll($type); + return array_map(function(File $file) { $template = new Template(CollaboraTemplateProvider::class, (string)$file->getId(), $file); $template->setCustomPreviewUrl($this->urlGenerator->linkToRouteAbsolute('richdocuments.templates.getPreview', ['fileId' => $file->getId()])); return $template; - }, $this->templateManager->getAll($type)); + }, $collaboraTemplates); + } + + private function isSameUserTemplateFolder(): bool { + try { + $userTemplatesFolder = $this->templateManager->getUserTemplateDir(); + $internalPath = $userTemplatesFolder->getInternalPath(); + $userTemplatePath = mb_strpos($internalPath, 'files/') === 0 ? mb_substr($internalPath, 5): $internalPath; + return $this->coreTemplateManager->getTemplatePath() === $userTemplatePath; + } catch (NotFoundException $e) { + } + return false; } public function getCustomTemplate(string $template): File { diff --git a/lib/TemplateManager.php b/lib/TemplateManager.php index a907f9aa..2974a9c6 100644 --- a/lib/TemplateManager.php +++ b/lib/TemplateManager.php @@ -387,7 +387,7 @@ class TemplateManager { * @return Folder * @throws NotFoundException */ - private function getUserTemplateDir() { + public function getUserTemplateDir() { if ($this->userId === null) { throw new NotFoundException('userId not set'); } -- cgit v1.2.3