diff --git a/appinfo/info.xml b/appinfo/info.xml index 4de99f98a38..c619a738936 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -11,7 +11,7 @@ - **๐Ÿ’พ Open format:** Files are saved as [Markdown](https://en.wikipedia.org/wiki/Markdown), so you can edit them from any other text app too. - **โœŠ Strong foundation:** We use [๐Ÿˆ tiptap](https://tiptap.scrumpy.io) which is based on [๐Ÿฆ‰ ProseMirror](https://prosemirror.net) โ€“ huge thanks to them! ]]> - 3.9.1 + 3.9.2 agpl Julius Hรคrtl Text diff --git a/lib/Command/ResetDocument.php b/lib/Command/ResetDocument.php index 0864ccb68ec..4702db69abb 100644 --- a/lib/Command/ResetDocument.php +++ b/lib/Command/ResetDocument.php @@ -23,6 +23,7 @@ namespace OCA\Text\Command; +use OCA\Text\Db\Document; use OCA\Text\Exception\DocumentHasUnsavedChangesException; use OCA\Text\Service\DocumentService; use Symfony\Component\Console\Command\Command; @@ -44,9 +45,15 @@ protected function configure(): void { ->setDescription('Reset a text document session to the current file content') ->addArgument( 'file-id', - InputArgument::REQUIRED, + InputArgument::OPTIONAL, 'File id of the document to reset' ) + ->addOption( + 'all', + 'a', + null, + 'Reset all document sessions' + ) ->addOption( 'force', 'f', @@ -56,30 +63,45 @@ protected function configure(): void { ; } - /** - * @param InputInterface $input - * @param OutputInterface $output - * @return int - */ protected function execute(InputInterface $input, OutputInterface $output): int { $fileId = $input->getArgument('file-id'); + $all = $input->getOption('all'); $fullReset = $input->getOption('force'); - if ($fullReset) { - $output->writeln('Force-reset the document session for file ' . $fileId); - $this->documentService->resetDocument($fileId, true); + if (!$fileId && !$all) { + $output->writeln('Either --all option or file-id argument is required.'); + return 1; + } + if ($fileId && $all) { + $output->writeln('The --all option and file id argument are exclusionary.'); + return 1; + } - return 0; + if ($all) { + $fileIds = array_map(static function (Document $document) { + return $document->getId(); + }, $this->documentService->getAll()); + } else { + $fileIds = [$fileId]; } - $output->writeln('Reset the document session for file ' . $fileId); - try { - $this->documentService->resetDocument($fileId); - } catch (DocumentHasUnsavedChangesException) { - $output->writeln('Not resetting due to unsaved changes'); - return 1; + $rc = 0; + foreach ($fileIds as $id) { + if ($fullReset) { + $output->writeln('Force-reset the document session for file ' . $id); + $this->documentService->resetDocument($id, true); + continue; + } + + $output->writeln('Reset the document session for file ' . $id); + try { + $this->documentService->resetDocument($id); + } catch (DocumentHasUnsavedChangesException) { + $output->writeln('Not resetting due to unsaved changes'); + $rc = 1; + } } - return 0; + return $rc; } } diff --git a/lib/Migration/ResetSessionsBeforeYjs.php b/lib/Migration/ResetSessionsBeforeYjs.php index a9ad5d451c9..a876f23af36 100644 --- a/lib/Migration/ResetSessionsBeforeYjs.php +++ b/lib/Migration/ResetSessionsBeforeYjs.php @@ -2,7 +2,7 @@ namespace OCA\Text\Migration; -use OCA\Text\Db\SessionMapper; +use OCA\Text\Db\Document; use OCA\Text\Service\DocumentService; use OCP\IConfig; use OCP\Migration\IOutput; @@ -10,14 +10,11 @@ class ResetSessionsBeforeYjs implements IRepairStep { private IConfig $config; - private SessionMapper $sessionMapper; private DocumentService $documentService; public function __construct(IConfig $config, - SessionMapper $sessionMapper, DocumentService $documentService) { $this->config = $config; - $this->sessionMapper = $sessionMapper; $this->documentService = $documentService; } @@ -25,31 +22,28 @@ public function __construct(IConfig $config, * @return string */ public function getName(): string { - return 'Force-reset all Text sessions before Yjs migration'; + return 'Force-reset all Text document sessions'; } - /** - * @param IOutput $output - * - * @return void - */ public function run(IOutput $output): void { $appVersion = $this->config->getAppValue('text', 'installed_version'); - if (!$appVersion || version_compare($appVersion, '3.7.2') !== -1) { + if (!$appVersion || version_compare($appVersion, '3.9.2') !== -1) { return; } - $sessions = $this->sessionMapper->findAllDocuments(); - if (!$sessions) { + $fileIds = array_map(static function (Document $document) { + return $document->getId(); + }, $this->documentService->getAll()); + + if (!$fileIds) { return; } - $output->startProgress(count($sessions)); - foreach ($sessions as $session) { - $documentId = $session->getDocumentId(); - $this->documentService->unlock($documentId); - $this->documentService->resetDocument($documentId, true); + $output->startProgress(count($fileIds)); + foreach ($fileIds as $fileId) { + $this->documentService->unlock($fileId); + $this->documentService->resetDocument($fileId, true); $output->advance(); } $output->finishProgress();