migrate-takeout: allow restricting to one user/folder
Signed-off-by: Varun Patil <varunpatil@ucla.edu>pull/563/head
parent
2756855b50
commit
642816f4b9
|
@ -35,6 +35,7 @@ use OCP\IUser;
|
||||||
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;
|
||||||
|
use Symfony\Component\Console\Input\InputOption;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
class MigrateGoogleTakeout extends Command
|
class MigrateGoogleTakeout extends Command
|
||||||
|
@ -80,6 +81,8 @@ class MigrateGoogleTakeout extends Command
|
||||||
->setName('memories:migrate-google-takeout')
|
->setName('memories:migrate-google-takeout')
|
||||||
->setDescription('Migrate JSON metadata from Google Takeout')
|
->setDescription('Migrate JSON metadata from Google Takeout')
|
||||||
->addOption('override', 'o', null, 'Override existing EXIF metadata')
|
->addOption('override', 'o', null, 'Override existing EXIF metadata')
|
||||||
|
->addOption('user', 'u', InputOption::VALUE_REQUIRED, 'Migrate only for the specified user')
|
||||||
|
->addOption('folder', 'f', InputOption::VALUE_REQUIRED, 'Migrate only for the specified folder')
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,9 +112,20 @@ class MigrateGoogleTakeout extends Command
|
||||||
Exif::ensureStaticExiftoolProc();
|
Exif::ensureStaticExiftoolProc();
|
||||||
|
|
||||||
// Call migration for each user
|
// Call migration for each user
|
||||||
$this->userManager->callForSeenUsers(function (IUser $user) {
|
if ($input->getOption('user')) {
|
||||||
|
$user = $this->userManager->get($input->getOption('user'));
|
||||||
|
if (!$user) {
|
||||||
|
$output->writeln("<error>User {$input->getOption('user')} does not exist</error>");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
$this->migrateUser($user);
|
$this->migrateUser($user);
|
||||||
});
|
} else {
|
||||||
|
$this->userManager->callForSeenUsers(function (IUser $user) {
|
||||||
|
$this->migrateUser($user);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Print statistics
|
// Print statistics
|
||||||
$output->writeln("\nMigrated JSON metadata from {$this->nProcessed} files");
|
$output->writeln("\nMigrated JSON metadata from {$this->nProcessed} files");
|
||||||
|
@ -126,10 +140,21 @@ class MigrateGoogleTakeout extends Command
|
||||||
// Get user's root folder
|
// Get user's root folder
|
||||||
\OC_Util::tearDownFS();
|
\OC_Util::tearDownFS();
|
||||||
\OC_Util::setupFS($user->getUID());
|
\OC_Util::setupFS($user->getUID());
|
||||||
$userFolder = $this->rootFolder->getUserFolder($user->getUID());
|
$folder = $this->rootFolder->getUserFolder($user->getUID());
|
||||||
|
|
||||||
|
// Check if we need to migrate a specific folder
|
||||||
|
if ($path = $this->input->getOption('folder')) {
|
||||||
|
try {
|
||||||
|
$folder = $folder->get($path);
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
$this->output->writeln("<error>Folder {$path} does not exist</error>");
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Iterate all files
|
// Iterate all files
|
||||||
$this->migrateFolder($userFolder);
|
$this->migrateFolder($folder);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function migrateFolder(Folder $folder): void
|
protected function migrateFolder(Folder $folder): void
|
||||||
|
|
Loading…
Reference in New Issue