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();