Merge pull request #32466 from nextcloud/fix/skip-dav-migrator

pull/39366/merge
John Molakvoæ 3 months ago committed by GitHub
commit 3cc50790bc
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -182,6 +182,9 @@ class CalendarMigrator implements IMigrator, ISizeEstimationMigrator {
)));
}
/**
* @throws InvalidCalendarException
*/
private function getUniqueCalendarUri(IUser $user, string $initialCalendarUri): string {
$principalUri = $this->getPrincipalUri($user);
@ -190,7 +193,7 @@ class CalendarMigrator implements IMigrator, ISizeEstimationMigrator {
: CalendarMigrator::MIGRATED_URI_PREFIX . $initialCalendarUri;
if ($initialCalendarUri === '') {
throw new CalendarMigratorException('Failed to get unique calendar URI');
throw new InvalidCalendarException();
}
$existingCalendarUris = array_map(
@ -457,17 +460,20 @@ class CalendarMigrator implements IMigrator, ISizeEstimationMigrator {
VObjectReader::OPTION_FORGIVING,
);
} catch (Throwable $e) {
throw new CalendarMigratorException("Failed to read file \"$importPath\"", 0, $e);
$output->writeln("Failed to read file \"$importPath\", skipping…");
continue;
}
$problems = $vCalendar->validate();
if (!empty($problems)) {
throw new CalendarMigratorException("Invalid calendar data contained in \"$importPath\"");
$output->writeln("Invalid calendar data contained in \"$importPath\", skipping…");
continue;
}
$splitFilename = explode('.', $filename, 2);
if (count($splitFilename) !== 2) {
throw new CalendarMigratorException("Invalid filename \"$filename\", expected filename of the format \"<calendar_name>" . CalendarMigrator::FILENAME_EXT . '"');
$output->writeln("Invalid filename \"$filename\", expected filename of the format \"<calendar_name>" . CalendarMigrator::FILENAME_EXT . '", skipping…');
continue;
}
[$initialCalendarUri, $ext] = $splitFilename;

@ -160,6 +160,9 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator {
)));
}
/**
* @throws InvalidAddressBookException
*/
private function getUniqueAddressBookUri(IUser $user, string $initialAddressBookUri): string {
$principalUri = $this->getPrincipalUri($user);
@ -168,7 +171,7 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator {
: ContactsMigrator::MIGRATED_URI_PREFIX . $initialAddressBookUri;
if ($initialAddressBookUri === '') {
throw new ContactsMigratorException('Failed to get unique address book URI');
throw new InvalidAddressBookException();
}
$existingAddressBookUris = array_map(
@ -272,6 +275,8 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator {
/**
* @param array{displayName: string, description?: string} $metadata
* @param VCard[] $vCards
*
* @throws InvalidAddressBookException
*/
private function importAddressBook(IUser $user, string $filename, string $initialAddressBookUri, array $metadata, array $vCards, OutputInterface $output): void {
$principalUri = $this->getPrincipalUri($user);
@ -366,24 +371,29 @@ class ContactsMigrator implements IMigrator, ISizeEstimationMigrator {
$splitFilename = explode('.', $addressBookFilename, 2);
if (count($splitFilename) !== 2) {
throw new ContactsMigratorException("Invalid filename \"$addressBookFilename\", expected filename of the format \"<address_book_name>." . ContactsMigrator::FILENAME_EXT . '"');
$output->writeln("Invalid filename \"$addressBookFilename\", expected filename of the format \"<address_book_name>." . ContactsMigrator::FILENAME_EXT . '", skipping…');
continue;
}
[$initialAddressBookUri, $ext] = $splitFilename;
/** @var array{displayName: string, description?: string} $metadata */
$metadata = json_decode($importSource->getFileContents($metadataImportPath), true, 512, JSON_THROW_ON_ERROR);
$this->importAddressBook(
$user,
$addressBookFilename,
$initialAddressBookUri,
$metadata,
$vCards,
$output,
);
foreach ($vCards as $vCard) {
$vCard->destroy();
try {
$this->importAddressBook(
$user,
$addressBookFilename,
$initialAddressBookUri,
$metadata,
$vCards,
$output,
);
} catch (InvalidAddressBookException $e) {
// Allow this exception to skip a failed import
} finally {
foreach ($vCards as $vCard) {
$vCard->destroy();
}
}
}
}

Loading…
Cancel
Save