Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Check if a preview provider is available before using it
Else if a preview provider is registerd but not available (for example
missing support in some external lib). It will do 💥. This way the
providers can at least do the sanity checks required.

Signed-off-by: Roeland Jago Douma <[email protected]>
  • Loading branch information
rullzer committed Aug 17, 2018
commit 5b103744c8b480a47a8973079280b3cc078714f2
4 changes: 4 additions & 0 deletions lib/private/Preview/Generator.php
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,10 @@ private function getMaxPreview(ISimpleFolder $previewFolder, File $file, $mimeTy
continue;
}

if (!$provider->isAvailable($file)) {
continue;
}

$maxWidth = (int)$this->config->getSystemValue('preview_max_x', 4096);
$maxHeight = (int)$this->config->getSystemValue('preview_max_y', 4096);

Expand Down
14 changes: 12 additions & 2 deletions tests/lib/Preview/GeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -150,16 +150,24 @@ public function testGetNewPreview() {
}));

$invalidProvider = $this->createMock(IProvider::class);
$invalidProvider->method('isAvailable')
->willReturn(true);
$unavailableProvider = $this->createMock(IProvider::class);
$unavailableProvider->method('isAvailable')
->willReturn(false);
$validProvider = $this->createMock(IProvider::class);
$validProvider->method('isAvailable')
->with($file)
->willReturn(true);

$this->previewManager->method('getProviders')
->willReturn([
'/image\/png/' => ['wrongProvider'],
'/myMimeType/' => ['brokenProvider', 'invalidProvider', 'validProvider'],
'/myMimeType/' => ['brokenProvider', 'invalidProvider', 'unavailableProvider', 'validProvider'],
]);

$this->helper->method('getProvider')
->will($this->returnCallback(function($provider) use ($invalidProvider, $validProvider) {
->will($this->returnCallback(function($provider) use ($invalidProvider, $validProvider, $unavailableProvider) {
if ($provider === 'wrongProvider') {
$this->fail('Wrongprovider should not be constructed!');
} else if ($provider === 'brokenProvider') {
Expand All @@ -168,6 +176,8 @@ public function testGetNewPreview() {
return $invalidProvider;
} else if ($provider === 'validProvider') {
return $validProvider;
} else if ($provider === 'unavailableProvider') {
return $unavailableProvider;
}
$this->fail('Unexpected provider requested');
}));
Expand Down