summaryrefslogtreecommitdiff
path: root/app/Http/RequestHandlers/SynchronizeTrees.php
diff options
context:
space:
mode:
authorGreg Roach <fisharebest@gmail.com>2021-03-15 14:05:33 +0000
committerGreg Roach <fisharebest@gmail.com>2021-03-15 15:09:52 +0000
commitf0448b68d9ccb96d481d0f989b8bf9901c324b04 (patch)
treefb39d85245dd7396ade50ce07e20763f83316c1d /app/Http/RequestHandlers/SynchronizeTrees.php
parenta2221dfbfbf1dfbb322e14294e5387499e722805 (diff)
downloadwebtrees-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.php29
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.
}
}