Skip to content

Commit 3cc5079

Browse files
authored
Merge pull request #32466 from nextcloud/fix/skip-dav-migrator
2 parents f40c2a0 + a770fd8 commit 3cc5079

2 files changed

Lines changed: 33 additions & 17 deletions

File tree

apps/dav/lib/UserMigration/CalendarMigrator.php

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ function (ICalendar $calendar) use ($user, $output) {
182182
)));
183183
}
184184

185+
/**
186+
* @throws InvalidCalendarException
187+
*/
185188
private function getUniqueCalendarUri(IUser $user, string $initialCalendarUri): string {
186189
$principalUri = $this->getPrincipalUri($user);
187190

@@ -190,7 +193,7 @@ private function getUniqueCalendarUri(IUser $user, string $initialCalendarUri):
190193
: CalendarMigrator::MIGRATED_URI_PREFIX . $initialCalendarUri;
191194

192195
if ($initialCalendarUri === '') {
193-
throw new CalendarMigratorException('Failed to get unique calendar URI');
196+
throw new InvalidCalendarException();
194197
}
195198

196199
$existingCalendarUris = array_map(
@@ -457,17 +460,20 @@ public function import(IUser $user, IImportSource $importSource, OutputInterface
457460
VObjectReader::OPTION_FORGIVING,
458461
);
459462
} catch (Throwable $e) {
460-
throw new CalendarMigratorException("Failed to read file \"$importPath\"", 0, $e);
463+
$output->writeln("Failed to read file \"$importPath\", skipping…");
464+
continue;
461465
}
462466

463467
$problems = $vCalendar->validate();
464468
if (!empty($problems)) {
465-
throw new CalendarMigratorException("Invalid calendar data contained in \"$importPath\"");
469+
$output->writeln("Invalid calendar data contained in \"$importPath\", skipping…");
470+
continue;
466471
}
467472

468473
$splitFilename = explode('.', $filename, 2);
469474
if (count($splitFilename) !== 2) {
470-
throw new CalendarMigratorException("Invalid filename \"$filename\", expected filename of the format \"<calendar_name>" . CalendarMigrator::FILENAME_EXT . '"');
475+
$output->writeln("Invalid filename \"$filename\", expected filename of the format \"<calendar_name>" . CalendarMigrator::FILENAME_EXT . '", skipping…');
476+
continue;
471477
}
472478
[$initialCalendarUri, $ext] = $splitFilename;
473479

apps/dav/lib/UserMigration/ContactsMigrator.php

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,9 @@ function (array $addressBookInfo) use ($user, $output) {
160160
)));
161161
}
162162

163+
/**
164+
* @throws InvalidAddressBookException
165+
*/
163166
private function getUniqueAddressBookUri(IUser $user, string $initialAddressBookUri): string {
164167
$principalUri = $this->getPrincipalUri($user);
165168

@@ -168,7 +171,7 @@ private function getUniqueAddressBookUri(IUser $user, string $initialAddressBook
168171
: ContactsMigrator::MIGRATED_URI_PREFIX . $initialAddressBookUri;
169172

170173
if ($initialAddressBookUri === '') {
171-
throw new ContactsMigratorException('Failed to get unique address book URI');
174+
throw new InvalidAddressBookException();
172175
}
173176

174177
$existingAddressBookUris = array_map(
@@ -272,6 +275,8 @@ private function importContact(int $addressBookId, VCard $vCard, string $filenam
272275
/**
273276
* @param array{displayName: string, description?: string} $metadata
274277
* @param VCard[] $vCards
278+
*
279+
* @throws InvalidAddressBookException
275280
*/
276281
private function importAddressBook(IUser $user, string $filename, string $initialAddressBookUri, array $metadata, array $vCards, OutputInterface $output): void {
277282
$principalUri = $this->getPrincipalUri($user);
@@ -366,24 +371,29 @@ public function import(IUser $user, IImportSource $importSource, OutputInterface
366371

367372
$splitFilename = explode('.', $addressBookFilename, 2);
368373
if (count($splitFilename) !== 2) {
369-
throw new ContactsMigratorException("Invalid filename \"$addressBookFilename\", expected filename of the format \"<address_book_name>." . ContactsMigrator::FILENAME_EXT . '"');
374+
$output->writeln("Invalid filename \"$addressBookFilename\", expected filename of the format \"<address_book_name>." . ContactsMigrator::FILENAME_EXT . '", skipping…');
375+
continue;
370376
}
371377
[$initialAddressBookUri, $ext] = $splitFilename;
372378

373379
/** @var array{displayName: string, description?: string} $metadata */
374380
$metadata = json_decode($importSource->getFileContents($metadataImportPath), true, 512, JSON_THROW_ON_ERROR);
375381

376-
$this->importAddressBook(
377-
$user,
378-
$addressBookFilename,
379-
$initialAddressBookUri,
380-
$metadata,
381-
$vCards,
382-
$output,
383-
);
384-
385-
foreach ($vCards as $vCard) {
386-
$vCard->destroy();
382+
try {
383+
$this->importAddressBook(
384+
$user,
385+
$addressBookFilename,
386+
$initialAddressBookUri,
387+
$metadata,
388+
$vCards,
389+
$output,
390+
);
391+
} catch (InvalidAddressBookException $e) {
392+
// Allow this exception to skip a failed import
393+
} finally {
394+
foreach ($vCards as $vCard) {
395+
$vCard->destroy();
396+
}
387397
}
388398
}
389399
}

0 commit comments

Comments
 (0)