summaryrefslogtreecommitdiffstats
path: root/apps/files_trashbin/lib
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_trashbin/lib')
-rw-r--r--apps/files_trashbin/lib/AppInfo/Application.php3
-rw-r--r--apps/files_trashbin/lib/Controller/PreviewController.php69
-rw-r--r--apps/files_trashbin/lib/Helper.php3
3 files changed, 43 insertions, 32 deletions
diff --git a/apps/files_trashbin/lib/AppInfo/Application.php b/apps/files_trashbin/lib/AppInfo/Application.php
index ea27c8c16ea..8e4ec255567 100644
--- a/apps/files_trashbin/lib/AppInfo/Application.php
+++ b/apps/files_trashbin/lib/AppInfo/Application.php
@@ -57,7 +57,8 @@ class Application extends App {
\OC::$server->getUserManager(),
\OC::$server->getGroupManager(),
\OC::$server->getShareManager(),
- \OC::$server->getUserSession()
+ \OC::$server->getUserSession(),
+ \OC::$server->getConfig()
);
});
}
diff --git a/apps/files_trashbin/lib/Controller/PreviewController.php b/apps/files_trashbin/lib/Controller/PreviewController.php
index 8c3ff292b9f..8a1b31703bb 100644
--- a/apps/files_trashbin/lib/Controller/PreviewController.php
+++ b/apps/files_trashbin/lib/Controller/PreviewController.php
@@ -1,4 +1,5 @@
<?php
+declare(strict_types=1);
/**
* @copyright Copyright (c) 2016, Roeland Jago Douma <roeland@famdouma.nl>
*
@@ -26,6 +27,7 @@ namespace OCA\Files_Trashbin\Controller;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
+use OCP\AppFramework\Utility\ITimeFactory;
use OCP\Files\File;
use OCP\Files\Folder;
use OCP\Files\IMimeTypeDetector;
@@ -48,45 +50,36 @@ class PreviewController extends Controller {
/** @var IPreview */
private $previewManager;
- /**
- * @param string $appName
- * @param IRequest $request
- * @param IRootFolder $rootFolder
- * @param $userId
- * @param IMimeTypeDetector $mimeTypeDetector
- * @param IPreview $previewManager
- */
- public function __construct($appName,
+ /** @var ITimeFactory */
+ private $time;
+
+ public function __construct(string $appName,
IRequest $request,
IRootFolder $rootFolder,
- $userId,
+ string $userId,
IMimeTypeDetector $mimeTypeDetector,
- IPreview $previewManager) {
+ IPreview $previewManager,
+ ITimeFactory $time) {
parent::__construct($appName, $request);
$this->rootFolder = $rootFolder;
$this->userId = $userId;
$this->mimeTypeDetector = $mimeTypeDetector;
$this->previewManager = $previewManager;
+ $this->time = $time;
}
/**
* @NoAdminRequired
* @NoCSRFRequired
*
- * @param string $file
- * @param int $x
- * @param int $y
* @return DataResponse|Http\FileDisplayResponse
*/
public function getPreview(
- $file = '',
- $x = 44,
- $y = 44
+ int $fileId,
+ int $x = 44,
+ int $y = 44
) {
- if ($file === '') {
- return new DataResponse([], Http::STATUS_BAD_REQUEST);
- }
if ($x === 0 || $y === 0) {
return new DataResponse([], Http::STATUS_BAD_REQUEST);
@@ -96,23 +89,41 @@ class PreviewController extends Controller {
$userFolder = $this->rootFolder->getUserFolder($this->userId);
/** @var Folder $trash */
$trash = $userFolder->getParent()->get('files_trashbin/files');
- $trashFile = $trash->get($file);
+ $trashFiles = $trash->getById($fileId);
+
+ if (empty($trashFiles)) {
+ throw new NotFoundException();
+ }
+
+ $trashFile = array_pop($trashFiles);
if ($trashFile instanceof Folder) {
return new DataResponse([], Http::STATUS_BAD_REQUEST);
}
- /** @var File $trashFile */
- $fileName = $trashFile->getName();
- $i = strrpos($fileName, '.');
- if ($i !== false) {
- $fileName = substr($fileName, 0, $i);
- }
+ /*
+ * Files in the root of the trashbin are timetamped.
+ * So we have to strip that in order to properly detect the mimetype of the file.
+ */
+ if ($trashFile->getParent()->getPath() === $trash->getPath()) {
+ /** @var File $trashFile */
+ $fileName = $trashFile->getName();
+ $i = strrpos($fileName, '.');
+ if ($i !== false) {
+ $fileName = substr($fileName, 0, $i);
+ }
- $mimeType = $this->mimeTypeDetector->detectPath($fileName);
+ $mimeType = $this->mimeTypeDetector->detectPath($fileName);
+ } else {
+ $mimeType = $this->mimeTypeDetector->detectPath($trashFile->getName());
+ }
$f = $this->previewManager->getPreview($trashFile, $x, $y, true, IPreview::MODE_FILL, $mimeType);
- return new Http\FileDisplayResponse($f, Http::STATUS_OK, ['Content-Type' => $f->getMimeType()]);
+ $response = new Http\FileDisplayResponse($f, Http::STATUS_OK, ['Content-Type' => $f->getMimeType()]);
+
+ // Cache previews for 24H
+ $response->cacheFor(3600 * 24);
+ return $response;
} catch (NotFoundException $e) {
return new DataResponse([], Http::STATUS_NOT_FOUND);
} catch (\InvalidArgumentException $e) {
diff --git a/apps/files_trashbin/lib/Helper.php b/apps/files_trashbin/lib/Helper.php
index 01a4fd231ea..071a1a7766a 100644
--- a/apps/files_trashbin/lib/Helper.php
+++ b/apps/files_trashbin/lib/Helper.php
@@ -116,10 +116,9 @@ class Helper {
*/
public static function formatFileInfos($fileInfos) {
$files = array();
- $id = 0;
foreach ($fileInfos as $i) {
$entry = \OCA\Files\Helper::formatFileInfo($i);
- $entry['id'] = $id++;
+ $entry['id'] = $i->getId();
$entry['etag'] = $entry['mtime']; // add fake etag, it is only needed to identify the preview image
$entry['permissions'] = \OCP\Constants::PERMISSION_READ;
$files[] = $entry;