Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
5 / 5 |
CRAP | |
100.00% |
24 / 24 |
| Preview | |
100.00% |
1 / 1 |
|
100.00% |
5 / 5 |
7 | |
100.00% |
24 / 24 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| isMimeSupported | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setupView | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
| preparePreview | |
100.00% |
1 / 1 |
3 | |
100.00% |
7 / 7 |
|||
| getPreviewFromCore | |
100.00% |
1 / 1 |
1 | |
100.00% |
7 / 7 |
|||
| <?php | |
| /** | |
| * Gallery | |
| * | |
| * This file is licensed under the Affero General Public License version 3 or | |
| * later. See the COPYING file. | |
| * | |
| * @author Olivier Paroz <galleryapps@oparoz.com> | |
| * | |
| * @copyright Olivier Paroz 2014-2016 | |
| */ | |
| namespace OCA\Gallery\Preview; | |
| use OCP\IConfig; | |
| use OCP\Image; | |
| use OCP\Files\File; | |
| use OCP\IPreview; | |
| use OCP\ILogger; | |
| /** | |
| * Generates previews | |
| * | |
| * @todo On OC9, replace \OC\Preview with IPreview if methods we need have been added | |
| * | |
| * @package OCA\Gallery\Preview | |
| */ | |
| class Preview { | |
| /** | |
| * @var string | |
| */ | |
| private $dataDir; | |
| /** | |
| * @var mixed | |
| */ | |
| private $previewManager; | |
| /** | |
| * @var ILogger | |
| */ | |
| private $logger; | |
| /** | |
| * @var string | |
| */ | |
| private $userId; | |
| /** | |
| * @var \OC\Preview | |
| */ | |
| private $preview; | |
| /** | |
| * @var File | |
| */ | |
| private $file; | |
| /** | |
| * @var int[] | |
| */ | |
| private $dims; | |
| /** | |
| * Constructor | |
| * | |
| * @param IConfig $config | |
| * @param IPreview $previewManager | |
| * @param ILogger $logger | |
| */ | |
| public function __construct( | |
| IConfig $config, | |
| IPreview $previewManager, | |
| ILogger $logger | |
| ) { | |
| $this->dataDir = $config->getSystemValue('datadirectory'); | |
| $this->previewManager = $previewManager; | |
| $this->logger = $logger; | |
| } | |
| /** | |
| * Returns true if the passed mime type is supported | |
| * | |
| * @param string $mimeType | |
| * | |
| * @return boolean | |
| */ | |
| public function isMimeSupported($mimeType = '*') { | |
| return $this->previewManager->isMimeSupported($mimeType); | |
| } | |
| /** | |
| * Initialises the view which will be used to access files and generate previews | |
| * | |
| * @fixme Private API, but can't use the PreviewManager yet as it's incomplete | |
| * | |
| * @param string $userId | |
| * @param File $file | |
| * @param string $imagePathFromFolder | |
| */ | |
| public function setupView($userId, $file, $imagePathFromFolder) { | |
| $this->userId = $userId; | |
| $this->file = $file; | |
| $imagePathFromFolder = ltrim($imagePathFromFolder, '/'); | |
| $this->preview = new \OC\Preview($userId, 'files', $imagePathFromFolder); | |
| } | |
| /** | |
| * Returns a preview based on OC's preview class and our custom methods | |
| * | |
| * We check that the preview returned by the Preview class can be used by | |
| * the browser. If not, we send "false" to the controller | |
| * | |
| * @fixme setKeepAspect is missing from public interface. | |
| * https://github.com/owncloud/core/issues/12772 | |
| * | |
| * @param int $maxWidth | |
| * @param int $maxHeight | |
| * @param bool $keepAspect | |
| * | |
| * @return array<string,string|\OC_Image>|false | |
| */ | |
| public function preparePreview($maxWidth, $maxHeight, $keepAspect) { | |
| $this->dims = [$maxWidth, $maxHeight]; | |
| $previewData = $this->getPreviewFromCore($keepAspect); | |
| if ($previewData && $previewData->valid()) { | |
| $preview = [ | |
| 'preview' => $previewData, | |
| 'mimetype' => $previewData->mimeType() | |
| ]; | |
| } else { | |
| $preview = false; | |
| } | |
| return $preview; | |
| } | |
| /** | |
| * Asks core for a preview based on our criteria | |
| * | |
| * @todo Need to read scaling setting from settings | |
| * | |
| * @param bool $keepAspect | |
| * | |
| * @return \OC_Image | |
| */ | |
| private function getPreviewFromCore($keepAspect) { | |
| list($maxX, $maxY) = $this->dims; | |
| $this->preview->setMaxX($maxX); | |
| $this->preview->setMaxY($maxY); | |
| $this->preview->setScalingUp(false); | |
| $this->preview->setKeepAspect($keepAspect); | |
| //$this->logger->debug("[PreviewService] preview {preview}", ['preview' => $this->preview]); | |
| $previewData = $this->preview->getPreview(); | |
| return $previewData; | |
| } | |
| } |