diff --git a/lib/Service/ConfigService.php b/lib/Service/ConfigService.php index 0f4f5d5f7..0fcc90892 100644 --- a/lib/Service/ConfigService.php +++ b/lib/Service/ConfigService.php @@ -199,4 +199,12 @@ public function getAttachmentFolder(string $userId = null): string { return $this->config->getUserValue($userId ?? $this->getUserId(), 'deck', 'attachment_folder', '/Deck'); } + + public function setAttachmentFolder(?string $userId = null, string $path): void { + if ($userId === null && $this->getUserId() === null) { + throw new NoPermissionException('Must be logged in get the attachment folder'); + } + + $this->config->setUserValue($userId ?? $this->getUserId(), 'deck', 'attachment_folder', $path); + } } diff --git a/lib/Service/FilesAppService.php b/lib/Service/FilesAppService.php index 2ec7de929..e214b7ca3 100644 --- a/lib/Service/FilesAppService.php +++ b/lib/Service/FilesAppService.php @@ -31,6 +31,7 @@ use OCA\Deck\StatusException; use OCP\AppFramework\Http\StreamResponse; use OCP\Constants; +use OCP\Files\Folder; use OCP\Files\IMimeTypeDetector; use OCP\Files\IRootFolder; use OCP\Files\NotFoundException; @@ -189,6 +190,16 @@ public function create(Attachment $attachment) { $folder = $userFolder->newFolder($this->configService->getAttachmentFolder()); } + if ($folder->isShared()) { + $folderName = $userFolder->getNonExistingName($this->configService->getAttachmentFolder()); + $folder = $userFolder->newFolder($folderName); + $this->configService->setAttachmentFolder($this->userId, $folderName); + } + + if (!$folder instanceof Folder || $folder->isShared()) { + throw new NotFoundException('No target folder found'); + } + $fileName = $folder->getNonExistingName($fileName); $target = $folder->newFile($fileName); $content = fopen($file['tmp_name'], 'rb');