From ce433637dad27e944ff2d78167ba962cb2273bad Mon Sep 17 00:00:00 2001 From: Robin Appelman <robin@icewind.nl> Date: Wed, 2 Oct 2019 16:36:53 +0200 Subject: [PATCH] allow trash backends to overwrite the tooltip for trash items Signed-off-by: Robin Appelman <robin@icewind.nl> --- apps/files_trashbin/js/files_trashbin.js | Bin 12528 -> 12581 bytes apps/files_trashbin/js/files_trashbin.js.map | Bin 45706 -> 45856 bytes .../lib/Sabre/AbstractTrash.php | 4 ++ apps/files_trashbin/lib/Sabre/ITrash.php | 2 + .../lib/Sabre/PropfindPlugin.php | 5 ++ apps/files_trashbin/lib/Trash/ITrashItem.php | 2 + apps/files_trashbin/lib/Trash/TrashItem.php | 4 ++ apps/files_trashbin/src/filelist.js | 46 +++++++++--------- 8 files changed, 41 insertions(+), 22 deletions(-) diff --git a/apps/files_trashbin/js/files_trashbin.js b/apps/files_trashbin/js/files_trashbin.js index d381919b0aa071fe032be05991bccb775a3405c5..c9fd1c55ddad1a62b541f06cd6c2cf09911043b6 100644 GIT binary patch delta 225 zcmey6xHM@)ARm)X;$&$)6~U6slAKf}>$K9m<dV$%JcazpF??Q(#gmuwSpmsMe241u zZBz9Mit-DBOA<?>4PwFU)S{Bi)MA}t+x+OFSe+aol^APXlv+|+lvkaSSzM5lSm~FT zn`)IGof)f>TapQ68m1a+6(klFr+Vg<Xyixd#p)OuXzFAn76%limSv`vTPYgo6eN~p zSQYD}R+JPax+In)TIJN%GHYsDPu?J;yxB=WgOM?RbG9Iunj)mk1mx`yQRf7DW%GU6 NVrItT&B2Ou`2pZgPBH)h delta 159 zcmZ3Q^dWIWARo7NT4`Q#NoIbYLgM5OJ}<`n$(Q-8fFvLPA;!eX7x|^6^KBEOi(;*d zQcFsU@~TrZiwklREBz94Q>_vw^9qP-CPwGQ>KGbm>SQDq2Nb22Wu}%}DH`Y$B$i}Y z<?EzYloTbpB$gyv<!|;C2w-GP+&oWE14JDcQf2~DuSL{3H;c#>Gc)JcYD`|JEWCNH HVh29}ljk-u diff --git a/apps/files_trashbin/js/files_trashbin.js.map b/apps/files_trashbin/js/files_trashbin.js.map index 1def7411fb04853da3c5a41ce9fb83bd54addc67..7d338f0ea71b3d2661654d0d35ab174cfdeda688 100644 GIT binary patch delta 4318 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 bE_f@KgwJwg54!WozL&KF)<4L;KIZv1a|_NE delta 4293 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 MpM3PMw=RtT8#8am;Q#;t diff --git a/apps/files_trashbin/lib/Sabre/AbstractTrash.php b/apps/files_trashbin/lib/Sabre/AbstractTrash.php index b4d13a41e38..90f14fddd58 100644 --- a/apps/files_trashbin/lib/Sabre/AbstractTrash.php +++ b/apps/files_trashbin/lib/Sabre/AbstractTrash.php @@ -79,6 +79,10 @@ abstract class AbstractTrash implements ITrash { return $this->data->getOriginalLocation(); } + public function getTitle(): string { + return $this->data->getTitle(); + } + public function delete() { $this->trashManager->removeItem($this->data); } diff --git a/apps/files_trashbin/lib/Sabre/ITrash.php b/apps/files_trashbin/lib/Sabre/ITrash.php index 49c600c3f18..7a05fbe9507 100644 --- a/apps/files_trashbin/lib/Sabre/ITrash.php +++ b/apps/files_trashbin/lib/Sabre/ITrash.php @@ -32,6 +32,8 @@ interface ITrash { public function getOriginalLocation(): string; + public function getTitle(): string; + public function getDeletionTime(): int; public function getSize(); diff --git a/apps/files_trashbin/lib/Sabre/PropfindPlugin.php b/apps/files_trashbin/lib/Sabre/PropfindPlugin.php index 19da79fd2a3..81fed3eba2b 100644 --- a/apps/files_trashbin/lib/Sabre/PropfindPlugin.php +++ b/apps/files_trashbin/lib/Sabre/PropfindPlugin.php @@ -37,6 +37,7 @@ class PropfindPlugin extends ServerPlugin { const TRASHBIN_FILENAME = '{http://nextcloud.org/ns}trashbin-filename'; const TRASHBIN_ORIGINAL_LOCATION = '{http://nextcloud.org/ns}trashbin-original-location'; const TRASHBIN_DELETION_TIME = '{http://nextcloud.org/ns}trashbin-deletion-time'; + const TRASHBIN_TITLE = '{http://nextcloud.org/ns}trashbin-title'; /** @var Server */ private $server; @@ -70,6 +71,10 @@ class PropfindPlugin extends ServerPlugin { return $node->getOriginalLocation(); }); + $propFind->handle(self::TRASHBIN_TITLE, function () use ($node) { + return $node->getTitle(); + }); + $propFind->handle(self::TRASHBIN_DELETION_TIME, function () use ($node) { return $node->getDeletionTime(); }); diff --git a/apps/files_trashbin/lib/Trash/ITrashItem.php b/apps/files_trashbin/lib/Trash/ITrashItem.php index 74348cf1817..bd241c89a34 100644 --- a/apps/files_trashbin/lib/Trash/ITrashItem.php +++ b/apps/files_trashbin/lib/Trash/ITrashItem.php @@ -75,4 +75,6 @@ interface ITrashItem extends FileInfo { * @since 15.0.0 */ public function getUser(): IUser; + + public function getTitle(): string; } diff --git a/apps/files_trashbin/lib/Trash/TrashItem.php b/apps/files_trashbin/lib/Trash/TrashItem.php index a0a0e1f67ce..0112b6dbc8e 100644 --- a/apps/files_trashbin/lib/Trash/TrashItem.php +++ b/apps/files_trashbin/lib/Trash/TrashItem.php @@ -173,4 +173,8 @@ class TrashItem implements ITrashItem { public function getExtension(): string { return $this->fileInfo->getExtension(); } + + public function getTitle(): string { + return $this->getOriginalLocation(); + } } diff --git a/apps/files_trashbin/src/filelist.js b/apps/files_trashbin/src/filelist.js index 661b2f012f4..60b44ea7541 100644 --- a/apps/files_trashbin/src/filelist.js +++ b/apps/files_trashbin/src/filelist.js @@ -13,6 +13,7 @@ var FILENAME_PROP = '{http://nextcloud.org/ns}trashbin-filename' var DELETION_TIME_PROP = '{http://nextcloud.org/ns}trashbin-deletion-time' var TRASHBIN_ORIGINAL_LOCATION = '{http://nextcloud.org/ns}trashbin-original-location' + var TRASHBIN_TITLE = '{http://nextcloud.org/ns}trashbin-title' /** * Convert a file name in the format filename.d12345 to the real file name. @@ -45,32 +46,33 @@ } FileList.prototype = _.extend({}, OCA.Files.FileList.prototype, /** @lends OCA.Trashbin.FileList.prototype */ { - id: 'trashbin', - appName: t('files_trashbin', 'Deleted files'), - /** @type {OC.Files.Client} */ - client: null, + id: 'trashbin', + appName: t('files_trashbin', 'Deleted files'), + /** @type {OC.Files.Client} */ + client: null, - /** + /** * @private */ - initialize: function() { - this.client.addFileInfoParser(function(response, data) { - var props = response.propStat[0].properties - var path = props[TRASHBIN_ORIGINAL_LOCATION] - return { - displayName: props[FILENAME_PROP], - mtime: parseInt(props[DELETION_TIME_PROP], 10) * 1000, - hasPreview: true, - path: path, - extraData: path - } - }) + initialize: function() { + this.client.addFileInfoParser(function(response, data) { + var props = response.propStat[0].properties + var path = props[TRASHBIN_ORIGINAL_LOCATION] + var title = props[TRASHBIN_TITLE] + return { + displayName: props[FILENAME_PROP], + mtime: parseInt(props[DELETION_TIME_PROP], 10) * 1000, + hasPreview: true, + path: path, + extraData: title + } + }) - var result = OCA.Files.FileList.prototype.initialize.apply(this, arguments) - this.$el.find('.undelete').click('click', _.bind(this._onClickRestoreSelected, this)) + var result = OCA.Files.FileList.prototype.initialize.apply(this, arguments) + this.$el.find('.undelete').click('click', _.bind(this._onClickRestoreSelected, this)) - this.setSort('mtime', 'desc') - /** + this.setSort('mtime', 'desc') + /** * Override crumb making to add "Deleted Files" entry * and convert files with ".d" extensions to a more * user friendly name. @@ -252,7 +254,7 @@ * Returns list of webdav properties to request */ _getWebdavProperties: function() { - return [FILENAME_PROP, DELETION_TIME_PROP, TRASHBIN_ORIGINAL_LOCATION].concat(this.filesClient.getPropfindProperties()) + return [FILENAME_PROP, DELETION_TIME_PROP, TRASHBIN_ORIGINAL_LOCATION, TRASHBIN_TITLE].concat(this.filesClient.getPropfindProperties()) }, /** -- GitLab