From 4dcd0474d58bbcbea742948a03d3f26103f3933b Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Tue, 29 Nov 2016 20:35:19 +0100 Subject: [PATCH] Show mimeicon when versions don't have a preview Fixes #2413 Signed-off-by: Roeland Jago Douma --- apps/files_versions/js/versioncollection.js | 3 +- apps/files_versions/js/versionstabview.js | 47 ++++++++++++++++++++- apps/files_versions/lib/Storage.php | 1 + 3 files changed, 48 insertions(+), 3 deletions(-) diff --git a/apps/files_versions/js/versioncollection.js b/apps/files_versions/js/versioncollection.js index fdb12bae0a..24a4ba7fc6 100644 --- a/apps/files_versions/js/versioncollection.js +++ b/apps/files_versions/js/versioncollection.js @@ -81,7 +81,8 @@ name: version.name, fullPath: fullPath, timestamp: revision, - size: version.size + size: version.size, + mimetype: version.mimetype }; }); this._endReached = result.data.endReached; diff --git a/apps/files_versions/js/versionstabview.js b/apps/files_versions/js/versionstabview.js index 35abde6d34..075e0e9cdd 100644 --- a/apps/files_versions/js/versionstabview.js +++ b/apps/files_versions/js/versionstabview.js @@ -15,7 +15,7 @@ '
  • ' + '
    ' + '
    ' + - '' + + '' + '
    ' + '
    ' + '
    ' + @@ -162,6 +162,15 @@ _onAddModel: function(model) { var $el = $(this.itemTemplate(this._formatItem(model))); this.$versionsContainer.append($el); + + var preview = $el.find('.preview')[0]; + this._lazyLoadPreview({ + url: model.getPreviewUrl(), + mime: model.get('mimetype'), + callback: function(url) { + preview.src = url; + } + }); $el.find('.has-tooltip').tooltip(); }, @@ -206,7 +215,6 @@ downloadUrl: version.getDownloadUrl(), downloadIconUrl: OC.imagePath('core', 'actions/download'), revertIconUrl: OC.imagePath('core', 'actions/history'), - previewUrl: version.getPreviewUrl(), revertLabel: t('files_versions', 'Restore'), canRevert: (this.collection.getFileInfo().get('permissions') & OC.PERMISSION_UPDATE) !== 0 }, version.attributes); @@ -235,6 +243,41 @@ return false; } return !fileInfo.isDirectory(); + }, + + /** + * Lazy load a file's preview. + * + * @param path path of the file + * @param mime mime type + * @param callback callback function to call when the image was loaded + * @param etag file etag (for caching) + */ + _lazyLoadPreview : function(options) { + var self = this; + var url = options.url; + var mime = options.mime; + var ready = options.callback; + + // get mime icon url + var iconURL = OC.MimeType.getIconUrl(mime); + var previewURL, + urlSpec = {}; + ready(iconURL); // set mimeicon URL + + var img = new Image(); + img.onload = function(){ + // if loading the preview image failed (no preview for the mimetype) then img.width will < 5 + if (img.width > 5) { + ready(url, img); + } else if (options.error) { + options.error(); + } + }; + if (options.error) { + img.onerror = options.error; + } + img.src = url; } }); diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index e7c2c8b759..1aa19274c4 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -467,6 +467,7 @@ class Storage { $versions[$key]['path'] = Filesystem::normalizePath($pathinfo['dirname'] . '/' . $filename); $versions[$key]['name'] = $versionedFile; $versions[$key]['size'] = $view->filesize($dir . '/' . $entryName); + $versions[$key]['mimetype'] = \OC::$server->getMimeTypeDetector()->detectPath($versionedFile); } } }