diff options
author | Roeland Jago Douma <roeland@famdouma.nl> | 2016-11-29 20:35:19 +0100 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2016-11-29 20:35:57 +0100 |
commit | 4dcd0474d58bbcbea742948a03d3f26103f3933b (patch) | |
tree | e5e4f4b171f4f95509bfe7452f0d370d51631c64 | |
parent | 8d81b9e6eb9f27b8b95f17b86bd3b1bdfddc122d (diff) | |
download | nextcloud-server-4dcd0474d58bbcbea742948a03d3f26103f3933b.tar.gz nextcloud-server-4dcd0474d58bbcbea742948a03d3f26103f3933b.zip |
Show mimeicon when versions don't have a preview
Fixes #2413
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
-rw-r--r-- | apps/files_versions/js/versioncollection.js | 3 | ||||
-rw-r--r-- | apps/files_versions/js/versionstabview.js | 47 | ||||
-rw-r--r-- | 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 fdb12bae0a9..24a4ba7fc62 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 35abde6d34a..075e0e9cddb 100644 --- a/apps/files_versions/js/versionstabview.js +++ b/apps/files_versions/js/versionstabview.js @@ -15,7 +15,7 @@ '<li data-revision="{{timestamp}}">' + '<div>' + '<div class="preview-container">' + - '<img class="preview" src="{{previewUrl}}"/>' + + '<img class="preview" src="{{previewUrl}}" width="44" height="44"/>' + '</div>' + '<div class="version-container">' + '<div>' + @@ -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 e7c2c8b7593..1aa19274c48 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); } } } |