139 lines
3.6 KiB
PHP
139 lines
3.6 KiB
PHP
<?php
|
|
/**
|
|
* Nextcloud - 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 2017
|
|
*/
|
|
|
|
namespace OCA\Gallery\Controller;
|
|
|
|
use OCP\IRequest;
|
|
use OCP\IURLGenerator;
|
|
use OCP\ILogger;
|
|
|
|
use OCP\AppFramework\ApiController;
|
|
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 FilesApiController
|
|
*
|
|
* @package OCA\Gallery\Controller
|
|
*/
|
|
class FilesApiController extends ApiController {
|
|
|
|
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
|
|
* @NoCSRFRequired
|
|
* @CORS
|
|
*
|
|
* Returns a list of all media files available to the authenticated user
|
|
*
|
|
* @see FilesController::getList()
|
|
*
|
|
* @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, $this->request, $this->logger);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @NoAdminRequired
|
|
* @NoCSRFRequired
|
|
* @CORS
|
|
*
|
|
* Sends the file matching the fileId
|
|
*
|
|
* In case of error we send an HTML error page
|
|
* We need to keep the session open in order to be able to send the error message to the error
|
|
* page
|
|
*
|
|
* @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]
|
|
);
|
|
|
|
// Don't set a cookie for the error message, we don't want it in the API
|
|
return new RedirectResponse($url);
|
|
}
|
|
|
|
// That's the only exception out of all the image media types
|
|
if ($download['mimetype'] === 'image/svg+xml') {
|
|
$download['mimetype'] = 'text/plain';
|
|
}
|
|
|
|
return new ImageResponse($download);
|
|
}
|
|
|
|
}
|