diff --git a/lib/Command/DocumentIndex.php b/lib/Command/DocumentIndex.php index 431ba437..2811fdfc 100644 --- a/lib/Command/DocumentIndex.php +++ b/lib/Command/DocumentIndex.php @@ -11,9 +11,12 @@ use Exception; use OC\Core\Command\Base; +use OCA\FullTextSearch\Exceptions\IndexDoesNotExistException; use OCA\FullTextSearch\Model\Index; +use OCA\FullTextSearch\Service\IndexService; use OCA\FullTextSearch\Service\PlatformService; use OCA\FullTextSearch\Service\ProviderService; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -22,6 +25,7 @@ class DocumentIndex extends Base { public function __construct( private ProviderService $providerService, private PlatformService $platformService, + private IndexService $indexService, ) { parent::__construct(); } @@ -36,7 +40,8 @@ protected function configure() { ->setDescription('index one specific document') ->addArgument('userId', InputArgument::REQUIRED, 'userId') ->addArgument('providerId', InputArgument::REQUIRED, 'providerId') - ->addArgument('documentId', InputArgument::REQUIRED, 'documentId'); + ->addArgument('documentId', InputArgument::REQUIRED, 'documentId') + ->addOption('collection', null, InputOption::VALUE_OPTIONAL, 'collection to look the existing index up in, defaults to the internal collection'); } /** @@ -50,6 +55,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int $providerId = $input->getArgument('providerId'); $documentId = $input->getArgument('documentId'); $userId = $input->getArgument('userId'); + $collection = $input->getOption('collection'); $providerWrapper = $this->providerService->getProvider($providerId); $provider = $providerWrapper->getProvider(); @@ -57,6 +63,11 @@ protected function execute(InputInterface $input, OutputInterface $output): int $index = new Index($providerId, $documentId); $index->setOwnerId($userId); $index->setStatus(Index::INDEX_FULL); + try { + $index = $this->indexService->getIndex($providerId, $documentId, $collection); + } catch (IndexDoesNotExistException $e) { + $output->writeln('Index not found: index attributes have been set to default values'); + } $indexDocument = $provider->updateDocument($index); if (!$indexDocument->hasIndex()) { $indexDocument->setIndex($index); diff --git a/lib/Command/DocumentProvider.php b/lib/Command/DocumentProvider.php index a7e73877..059dac12 100644 --- a/lib/Command/DocumentProvider.php +++ b/lib/Command/DocumentProvider.php @@ -11,7 +11,9 @@ use Exception; use OC\Core\Command\Base; +use OCA\FullTextSearch\Exceptions\IndexDoesNotExistException; use OCA\FullTextSearch\Model\Index; +use OCA\FullTextSearch\Service\IndexService; use OCA\FullTextSearch\Service\ProviderService; use OCP\FullTextSearch\Model\IIndexDocument; use Symfony\Component\Console\Input\InputArgument; @@ -22,6 +24,7 @@ class DocumentProvider extends Base { public function __construct( private ProviderService $providerService, + private IndexService $indexService, ) { parent::__construct(); } @@ -37,7 +40,8 @@ protected function configure() { ->addArgument('userId', InputArgument::REQUIRED, 'userId') ->addArgument('providerId', InputArgument::REQUIRED, 'providerId') ->addArgument('documentId', InputArgument::REQUIRED, 'documentId') - ->addOption('content', 'c', InputOption::VALUE_NONE, 'return some content'); + ->addOption('content', 'c', InputOption::VALUE_NONE, 'return some content') + ->addOption('collection', null, InputOption::VALUE_OPTIONAL, 'collection to look the existing index up in, defaults to the internal collection'); } @@ -51,6 +55,7 @@ protected function execute(InputInterface $input, OutputInterface $output) { $providerId = $input->getArgument('providerId'); $documentId = $input->getArgument('documentId'); $userId = $input->getArgument('userId'); + $collection = $input->getOption('collection'); $providerWrapper = $this->providerService->getProvider($providerId); $provider = $providerWrapper->getProvider(); @@ -58,6 +63,11 @@ protected function execute(InputInterface $input, OutputInterface $output) { $index = new Index($providerId, $documentId); $index->setOwnerId($userId); $index->setStatus(Index::INDEX_FULL); + try { + $index = $this->indexService->getIndex($providerId, $documentId, $collection); + } catch (IndexDoesNotExistException $e) { + $output->writeln('Index not found: index attributes have been set to default values'); + } $indexDocument = $provider->updateDocument($index); $index->setOwnerId($indexDocument->getAccess()->getOwnerId());