Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
25 / 25
PreviewApiController
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
7
100.00% covered (success)
100.00%
25 / 25
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
9 / 9
 getThumbnails
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
8 / 8
 getPreview
100.00% covered (success)
100.00%
1 / 1
4
100.00% covered (success)
100.00%
8 / 8
<?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 2016
 */
namespace OCA\Gallery\Controller;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\ILogger;
use OCP\Files\File;
use OCP\AppFramework\ApiController;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
use OCA\Gallery\Http\ImageResponse;
use OCA\Gallery\Service\ConfigService;
use OCA\Gallery\Service\ThumbnailService;
use OCA\Gallery\Service\PreviewService;
use OCA\Gallery\Service\DownloadService;
use OCA\Gallery\Utility\EventSource;
/**
 * Class PreviewApiController
 *
 * @package OCA\Gallery\Controller
 */
class PreviewApiController extends ApiController {
    use Preview;
    /**  @var EventSource */
    private $eventSource;
    /**
     * Constructor
     *
     * @param string $appName
     * @param IRequest $request
     * @param IURLGenerator $urlGenerator
     * @param ConfigService $configService
     * @param ThumbnailService $thumbnailService
     * @param PreviewService $previewService
     * @param DownloadService $downloadService
     * @param EventSource $eventSource
     * @param ILogger $logger
     */
    public function __construct(
        $appName,
        IRequest $request,
        IURLGenerator $urlGenerator,
        ConfigService $configService,
        ThumbnailService $thumbnailService,
        PreviewService $previewService,
        DownloadService $downloadService,
        EventSource $eventSource,
        ILogger $logger
    ) {
        parent::__construct($appName, $request);
        $this->urlGenerator = $urlGenerator;
        $this->configService = $configService;
        $this->thumbnailService = $thumbnailService;
        $this->previewService = $previewService;
        $this->downloadService = $downloadService;
        $this->eventSource = $eventSource;
        $this->logger = $logger;
    }
    /**
     * @NoAdminRequired
     * @NoCSRFRequired
     * @CORS
     *
     * Generates thumbnails
     *
     * @see PreviewController::getThumbnails()
     *
     * @param string $ids the ID of the files of which we need thumbnail previews of
     * @param bool $square
     * @param double $scale
     *
     * @return array<string,array|string|null>
     */
    public function getThumbnails($ids, $square, $scale) {
        $idsArray = explode(';', $ids);
        foreach ($idsArray as $id) {
            // Casting to integer here instead of using array_map to extract IDs from the URL
            list($thumbnail, $status) = $this->getThumbnail((int)$id, $square, $scale);
            $thumbnail['fileid'] = $id;
            $thumbnail['status'] = $status;
            $this->eventSource->send('preview', $thumbnail);
        }
        $this->eventSource->close();
        $this->exitController();
        // @codeCoverageIgnoreStart
    } // @codeCoverageIgnoreEnd
    /**
     * @NoAdminRequired
     * @NoCSRFRequired
     * @CORS
     *
     * Sends either a large preview of the requested file or the original file itself
     *
     * @param int $fileId the ID of the file of which we need a large preview of
     * @param int $width
     * @param int $height
     * @param bool $nativesvg This is a GET parameter, so no camelCase
     *
     * @return ImageResponse|Http\JSONResponse
     */
    public function getPreview($fileId, $width, $height, $nativesvg = false) {
        /** @type File $file */
        list($file, $preview, $status) = $this->getData($fileId, $width, $height);
        if (!$preview) {
            return new JSONResponse(
                [
                    'message' => "I'm truly sorry, but we were unable to generate a preview for this file",
                    'success' => false
                ], $status
            );
        }
        $preview['name'] = $file->getName();
        // That's the only exception out of all the image media types we serve
        if ($preview['mimetype'] === 'image/svg+xml' && !$nativesvg) {
            $preview['mimetype'] = 'text/plain';
        }
        return new ImageResponse($preview, $status);
    }
}