Skip to content

Commit

Permalink
feat(reset): Add --all option to text:reset occ command
Browse files Browse the repository at this point in the history
Allows to reset all editing sessions at once.

Signed-off-by: Jonas <jonas@freesources.org>
  • Loading branch information
mejo- authored and backportbot[bot] committed Jun 12, 2024
1 parent 9a3b239 commit be0b7b6
Showing 1 changed file with 39 additions and 17 deletions.
56 changes: 39 additions & 17 deletions lib/Command/ResetDocument.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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',
Expand All @@ -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('<error>Either --all option or file-id argument is required.</error>');
return 1;
}
if ($fileId && $all) {
$output->writeln('<error>The --all option and file id argument are exclusionary.</error>');
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;
}
}

0 comments on commit be0b7b6

Please sign in to comment.