diff options
| author | Greg Roach <fisharebest@gmail.com> | 2021-03-15 14:05:33 +0000 |
|---|---|---|
| committer | Greg Roach <fisharebest@gmail.com> | 2021-03-15 15:09:52 +0000 |
| commit | f0448b68d9ccb96d481d0f989b8bf9901c324b04 (patch) | |
| tree | fb39d85245dd7396ade50ce07e20763f83316c1d /app/Http/RequestHandlers/SynchronizeTrees.php | |
| parent | a2221dfbfbf1dfbb322e14294e5387499e722805 (diff) | |
| download | webtrees-f0448b68d9ccb96d481d0f989b8bf9901c324b04.tar.gz webtrees-f0448b68d9ccb96d481d0f989b8bf9901c324b04.tar.bz2 webtrees-f0448b68d9ccb96d481d0f989b8bf9901c324b04.zip | |
Filesystem error handling
Diffstat (limited to 'app/Http/RequestHandlers/SynchronizeTrees.php')
| -rw-r--r-- | app/Http/RequestHandlers/SynchronizeTrees.php | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/app/Http/RequestHandlers/SynchronizeTrees.php b/app/Http/RequestHandlers/SynchronizeTrees.php index e43180fbff..55d97426c9 100644 --- a/app/Http/RequestHandlers/SynchronizeTrees.php +++ b/app/Http/RequestHandlers/SynchronizeTrees.php @@ -26,6 +26,9 @@ use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Services\AdminService; use Fisharebest\Webtrees\Services\TimeoutService; use Fisharebest\Webtrees\Services\TreeService; +use League\Flysystem\FilesystemException; +use League\Flysystem\UnableToReadFile; +use League\Flysystem\UnableToRetrieveMetadata; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\StreamFactoryInterface; @@ -79,22 +82,26 @@ class SynchronizeTrees implements RequestHandlerInterface foreach ($gedcom_files as $gedcom_file) { // Only import files that have changed - $filemtime = (string) $data_filesystem->lastModified($gedcom_file); + try { + $filemtime = (string) $data_filesystem->lastModified($gedcom_file); - $tree = $this->tree_service->all()->get($gedcom_file) ?? $this->tree_service->create($gedcom_file, $gedcom_file); + $tree = $this->tree_service->all()->get($gedcom_file) ?? $this->tree_service->create($gedcom_file, $gedcom_file); - if ($tree->getPreference('filemtime') !== $filemtime) { - $resource = $data_filesystem->readStream($gedcom_file); - $stream = app(StreamFactoryInterface::class)->createStreamFromResource($resource); - $this->tree_service->importGedcomFile($tree, $stream, $gedcom_file); - $stream->close(); - $tree->setPreference('filemtime', $filemtime); + if ($tree->getPreference('filemtime') !== $filemtime) { + $resource = $data_filesystem->readStream($gedcom_file); + $stream = app(StreamFactoryInterface::class)->createStreamFromResource($resource); + $this->tree_service->importGedcomFile($tree, $stream, $gedcom_file); + $stream->close(); + $tree->setPreference('filemtime', $filemtime); - FlashMessages::addMessage(I18N::translate('The GEDCOM file ā%sā has been imported.', e($gedcom_file)), 'success'); + FlashMessages::addMessage(I18N::translate('The GEDCOM file ā%sā has been imported.', e($gedcom_file)), 'success'); - if ($this->timeout_service->isTimeNearlyUp(10.0)) { - return redirect(route(__CLASS__), StatusCodeInterface::STATUS_TEMPORARY_REDIRECT); + if ($this->timeout_service->isTimeNearlyUp(10.0)) { + return redirect(route(__CLASS__), StatusCodeInterface::STATUS_TEMPORARY_REDIRECT); + } } + } catch (FilesystemException | UnableToRetrieveMetadata | UnableToReadFile $ex) { + // Can't read the file - skip it. } } |
