From e21fb22b9e53d132b36b5bacc48f2ff17407a5ca Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Fri, 25 Feb 2022 00:37:22 +0100 Subject: [PATCH 1/2] Use consistent url for the preview with the activity app Allows to incrase the likehook of browser cache hits Signed-off-by: Carl Schwan --- apps/files/js/filelist.js | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js index 69322273a118e..e45063d49a2d5 100644 --- a/apps/files/js/filelist.js +++ b/apps/files/js/filelist.js @@ -2381,12 +2381,39 @@ */ urlSpec.a = this._filesConfig.get('cropimagepreviews') ? 0 : 1; + // Use map to get consistent parameter ordering with activity app generated URl (php) + const urlSpecMap = new Map() + urlSpecMap.set('forceIcon', urlSpec.forceIcon) + urlSpecMap.set('a', urlSpec.a) + urlSpecMap.set('x', urlSpec.x) + urlSpecMap.set('y', urlSpec.y) + + if (urlSpec.mode) { + urlSpecMap.set('mode', urlSpec.mode) + } + if (typeof urlSpec.fileId !== 'undefined') { - delete urlSpec.file; - return OC.generateUrl('/core/preview?') + $.param(urlSpec); + urlSpecMap.set('fileId', urlSpec.fileId) + urlSpecMap.set('c', urlSpec.c) + + let param = [] + urlSpecMap.forEach((value, key) => { + param.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)) + }) + param = param.join('&') + + return window.location.protocol + '//' + window.location.hostname + OC.generateUrl('/core/preview?') + param } else { - delete urlSpec.fileId; - return OC.generateUrl('/core/preview.png?') + $.param(urlSpec); + urlSpecMap.set('file', urlSpec.file) + urlSpecMap.set('c', urlSpec.c) + + let param = [] + urlSpecMap.forEach((key, value) => { + param.push(encodeURIComponent(key) + '=' + encodeURIComponent(value)) + }) + param = param.join('&') + + return window.location.protocol + '//' + window.location.hostname + OC.generateUrl('/core/preview.png?') + param } }, From 5d821064ae75187d404e0242478cd0b2e09b24f3 Mon Sep 17 00:00:00 2001 From: Carl Schwan Date: Tue, 19 Apr 2022 13:51:34 +0200 Subject: [PATCH 2/2] Don't sort router parameter for caching purpose Otherwise the order of the parameters given to the router is not consitent with the one that the API user gives. Signed-off-by: Carl Schwan --- lib/private/Route/CachingRouter.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/private/Route/CachingRouter.php b/lib/private/Route/CachingRouter.php index f65060e710b88..38c21bfb2f5c6 100644 --- a/lib/private/Route/CachingRouter.php +++ b/lib/private/Route/CachingRouter.php @@ -49,8 +49,9 @@ public function __construct($cache, LoggerInterface $logger) { * @return string */ public function generate($name, $parameters = [], $absolute = false) { - asort($parameters); - $key = $this->context->getHost() . '#' . $this->context->getBaseUrl() . $name . sha1(json_encode($parameters)) . (int)$absolute; + $sortedParameters = $parameters; + asort($sortedParameters); + $key = $this->context->getHost() . '#' . $this->context->getBaseUrl() . $name . sha1(json_encode($sortedParameters)) . (int)$absolute; $cachedKey = $this->cache->get($key); if ($cachedKey) { return $cachedKey;