Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
24 / 24
Preview
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
5 / 5
7
100.00% covered (success)
100.00%
24 / 24
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
4 / 4
 isMimeSupported
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 setupView
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
5 / 5
 preparePreview
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
7 / 7
 getPreviewFromCore
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
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;
    }
}