Add per-group and skip cleanup options

pull/803/head
Akhil 2023-09-01 17:03:50 +05:30
parent eb262ac5b6
commit 16f12ef061
No known key found for this signature in database
GPG Key ID: A8AB680DBB7F3D45
1 changed files with 22 additions and 1 deletions

View File

@ -27,7 +27,9 @@ use OCA\Memories\Db\TimelineWrite;
use OCA\Memories\Service; use OCA\Memories\Service;
use OCP\Files\IRootFolder; use OCP\Files\IRootFolder;
use OCP\IConfig; use OCP\IConfig;
use OCP\IGroupManager;
use OCP\IUser; use OCP\IUser;
use OCP\IGroup;
use OCP\IUserManager; use OCP\IUserManager;
use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
@ -40,6 +42,8 @@ class IndexOpts
public bool $clear = false; public bool $clear = false;
public ?string $user = null; public ?string $user = null;
public ?string $folder = null; public ?string $folder = null;
public ?string $group = null;
public bool $skipCleanup = false;
public function __construct(InputInterface $input) public function __construct(InputInterface $input)
{ {
@ -47,6 +51,8 @@ class IndexOpts
$this->clear = (bool) $input->getOption('clear'); $this->clear = (bool) $input->getOption('clear');
$this->user = $input->getOption('user'); $this->user = $input->getOption('user');
$this->folder = $input->getOption('folder'); $this->folder = $input->getOption('folder');
$this->skipCleanup = $input->getOption('skip-cleanup');
$this->group = $input->getOption('group');
} }
} }
@ -56,6 +62,7 @@ class Index extends Command
protected array $sizes; protected array $sizes;
protected IUserManager $userManager; protected IUserManager $userManager;
protected IGroupManager $groupManager;
protected IRootFolder $rootFolder; protected IRootFolder $rootFolder;
protected IConfig $config; protected IConfig $config;
protected Service\Index $indexer; protected Service\Index $indexer;
@ -71,6 +78,7 @@ class Index extends Command
public function __construct( public function __construct(
IRootFolder $rootFolder, IRootFolder $rootFolder,
IUserManager $userManager, IUserManager $userManager,
IGroupManager $groupManager,
IConfig $config, IConfig $config,
Service\Index $indexer, Service\Index $indexer,
TimelineWrite $timelineWrite TimelineWrite $timelineWrite
@ -78,6 +86,7 @@ class Index extends Command
parent::__construct(); parent::__construct();
$this->userManager = $userManager; $this->userManager = $userManager;
$this->groupManager = $groupManager;
$this->rootFolder = $rootFolder; $this->rootFolder = $rootFolder;
$this->config = $config; $this->config = $config;
$this->indexer = $indexer; $this->indexer = $indexer;
@ -93,6 +102,8 @@ class Index extends Command
->addOption('folder', null, InputOption::VALUE_REQUIRED, 'Index only the specified folder (relative to the user\'s root)') ->addOption('folder', null, InputOption::VALUE_REQUIRED, 'Index only the specified folder (relative to the user\'s root)')
->addOption('force', 'f', InputOption::VALUE_NONE, 'Force refresh of existing index entries') ->addOption('force', 'f', InputOption::VALUE_NONE, 'Force refresh of existing index entries')
->addOption('clear', null, InputOption::VALUE_NONE, 'Clear all existing index entries') ->addOption('clear', null, InputOption::VALUE_NONE, 'Clear all existing index entries')
->addOption('skip-cleanup', null, InputOption::VALUE_NONE, 'Skip cleanup step')
->addOption('group', 'g', InputOption::VALUE_REQUIRED, 'Index only specified group')
; ;
} }
@ -125,7 +136,9 @@ class Index extends Command
$this->runIndex(); $this->runIndex();
// Clean up the index // Clean up the index
$this->indexer->cleanupStale(); if (!$this->opts->skipCleanup) {
$this->indexer->cleanupStale();
}
return 0; return 0;
} catch (\Exception $e) { } catch (\Exception $e) {
@ -200,6 +213,14 @@ class Index extends Command
} else { } else {
$this->output->writeln("<error>User {$uid} not found</error>"); $this->output->writeln("<error>User {$uid} not found</error>");
} }
} elseif ($gid = $this->opts->group) {
if ($group = $this->groupManager->get($gid)) {
$this->output->writeln("<error>Group {$gid} not found</error>");
} else {
foreach ($group->getUsers() as $user) {
$closure($user);
}
}
} else { } else {
$this->userManager->callForSeenUsers(static fn (IUser $user) => $closure($user)); $this->userManager->callForSeenUsers(static fn (IUser $user) => $closure($user));
} }