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%
24 / 24
FilesController
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
6
100.00% covered (success)
100.00%
24 / 24
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
8 / 8
 getList
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 download
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
11 / 11
<?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\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\RedirectResponse;
use OCA\Gallery\Http\ImageResponse;
use OCA\Gallery\Service\SearchFolderService;
use OCA\Gallery\Service\ConfigService;
use OCA\Gallery\Service\SearchMediaService;
use OCA\Gallery\Service\DownloadService;
use OCA\Gallery\Service\ServiceException;
/**
 * Class FilesController
 *
 * @package OCA\Gallery\Controller
 */
class FilesController extends Controller {
    use Files;
    use HttpError;
    /** @var IURLGenerator */
    private $urlGenerator;
    /**
     * Constructor
     *
     * @param string $appName
     * @param IRequest $request
     * @param IURLGenerator $urlGenerator
     * @param SearchFolderService $searchFolderService
     * @param ConfigService $configService
     * @param SearchMediaService $searchMediaService
     * @param DownloadService $downloadService
     * @param ILogger $logger
     */
    public function __construct(
        $appName,
        IRequest $request,
        IURLGenerator $urlGenerator,
        SearchFolderService $searchFolderService,
        ConfigService $configService,
        SearchMediaService $searchMediaService,
        DownloadService $downloadService,
        ILogger $logger
    ) {
        parent::__construct($appName, $request);
        $this->urlGenerator = $urlGenerator;
        $this->searchFolderService = $searchFolderService;
        $this->configService = $configService;
        $this->searchMediaService = $searchMediaService;
        $this->downloadService = $downloadService;
        $this->logger = $logger;
    }
    /**
     * @NoAdminRequired
     *
     * Returns a list of all media files available to the authenticated user
     *
     *    * Authentication can be via a login/password or a token/(password)
     *    * For private galleries, it returns all media files, with the full path from the root
     *     folder For public galleries, the path starts from the folder the link gives access to
     *     (virtual root)
     *    * An exception is only caught in case something really wrong happens. As we don't test
     *     files before including them in the list, we may return some bad apples
     *
     * @param string $location a path representing the current album in the app
     * @param string $features the list of supported features
     * @param string $etag the last known etag in the client
     * @param string $mediatypes the list of supported media types
     *
     * @return array <string,array<string,string|int>>|Http\JSONResponse
     */
    public function getList($location, $features, $etag, $mediatypes) {
        $featuresArray = explode(';', $features);
        $mediaTypesArray = explode(';', $mediatypes);
        try {
            return $this->getFilesAndAlbums($location, $featuresArray, $etag, $mediaTypesArray);
        } catch (\Exception $exception) {
            return $this->jsonError($exception);
        }
    }
    /**
     * @NoAdminRequired
     *
     * Sends the file matching the fileId
     *
     * @param int $fileId the ID of the file we want to download
     * @param string|null $filename
     *
     * @return ImageResponse
     */
    public function download($fileId, $filename = null) {
        try {
            $download = $this->getDownload($fileId, $filename);
        } catch (ServiceException $exception) {
            $code = $this->getHttpStatusCode($exception);
            $url = $this->urlGenerator->linkToRoute(
                $this->appName . '.page.error_page', ['code' => $code]
            );
            $response = new RedirectResponse($url);
            $response->addCookie('galleryErrorMessage', $exception->getMessage());
            return $response;
        }
        // That's the only exception out of all the image media types we serve
        if ($download['mimetype'] === 'image/svg+xml') {
            $download['mimetype'] = 'text/plain';
        }
        return new ImageResponse($download);
    }
}