diff --git a/lib/Service/NoteUtil.php b/lib/Service/NoteUtil.php index 004eedb1f..b98b60bb9 100644 --- a/lib/Service/NoteUtil.php +++ b/lib/Service/NoteUtil.php @@ -13,6 +13,7 @@ use OCP\Files\Folder; use OCP\Files\IRootFolder; use OCP\Files\Node; +use OCP\Files\NotFoundException; use OCP\IDBConnection; use OCP\IUserSession; use OCP\Share\IManager; @@ -196,12 +197,20 @@ public function getNotesFolderUserPath(string $userId, bool $saveInitial = false public function getOrCreateNotesFolder(string $userId, bool $create = true) : Folder { $userFolder = $this->getRoot()->getUserFolder($userId); $notesPath = $this->settingsService->get($userId, 'notesPath'); - $allowShared = $notesPath !== $this->settingsService->getDefaultNotesPath($userId); - $folder = null; + ['path' => $defaultPath, 'node' => $folder] = $this->settingsService->getDefaultNotesNode($userId); + $allowShared = $notesPath !== $defaultPath; + + if ($allowShared) { + try { + $folder = $userFolder->get($notesPath); + } catch (NotFoundException) { + $folder = null; + } + } + $updateNotesPath = false; - if ($userFolder->nodeExists($notesPath)) { - $folder = $userFolder->get($notesPath); + if ($folder) { if (!$allowShared && $folder->isShared()) { $notesPath = $userFolder->getNonExistingName($notesPath); $folder = $userFolder->newFolder($notesPath); diff --git a/lib/Service/SettingsService.php b/lib/Service/SettingsService.php index 8fc62a687..6baaa8739 100644 --- a/lib/Service/SettingsService.php +++ b/lib/Service/SettingsService.php @@ -12,7 +12,9 @@ use OCA\Notes\AppInfo\Application; use OCP\App\IAppManager; +use OCP\Files\Folder; use OCP\Files\IRootFolder; +use OCP\Files\NotFoundException; use OCP\IConfig; use OCP\IL10N; @@ -41,7 +43,7 @@ public function __construct( 'fileSuffix' => $this->getListAttrs('fileSuffix', [...$this->defaultSuffixes, 'custom']), 'notesPath' => [ 'default' => function (string $uid) { - return $this->getDefaultNotesPath($uid); + return $this->getDefaultNotesNode($uid)['path']; }, 'validate' => function ($value) { $value = str_replace([ '/', '\\' ], DIRECTORY_SEPARATOR, $value); @@ -86,13 +88,45 @@ private function getListAttrs(string $attributeName, array $values) : array { ]; } - public function getDefaultNotesPath(string $uid) : string { + /** + * Return the default notes node if it exists and the expected path if it exists + * @return array{ + * path: string, + * folder: Folder + * } + */ + public function getDefaultNotesNode(string $uid) : array { $defaultFolder = $this->config->getAppValue(Application::APP_ID, 'defaultFolder', 'Notes'); - $defaultExists = $this->root->getUserFolder($uid)->nodeExists($defaultFolder); - if ($defaultExists) { - return $defaultFolder; - } else { - return $this->l10n->t($defaultFolder); + $userFolder = $this->root->getUserFolder($uid); + try { + $node = $userFolder->get($defaultFolder); + return [ + 'path' => $defaultFolder, + 'node' => $node, + ]; + } catch (NotFoundException) { + $path = $this->l10n->t($defaultFolder); + + if ($path == $defaultFolder) { + // English locale, still non-existing + return [ + 'path' => $path, + 'node' => null, + ]; + } + + try { + $node = $userFolder->get($path); + return [ + 'path' => $path, + 'node' => $node, + ]; + } catch (NotFoundException) { + return [ + 'path' => $path, + 'node' => null, + ]; + } } }