| Index: ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
|
| diff --git a/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js b/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
|
| index a9fa132e7fdf0867a45f8ccd8ce1b2b349188e6c..0580e1dafaf80e0da72c9529756b05a6905bbae5 100644
|
| --- a/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
|
| +++ b/ui/file_manager/file_manager/foreground/js/thumbnail_loader.js
|
| @@ -12,14 +12,19 @@
|
| * default: IMAGE.
|
| * @param {Object=} opt_metadata Metadata object.
|
| * @param {string=} opt_mediaType Media type.
|
| - * @param {ThumbnailLoader.UseEmbedded=} opt_useEmbedded If to use embedded
|
| - * jpeg thumbnail if available. Default: USE_EMBEDDED.
|
| + * @param {Array<ThumbnailLoader.LoadTarget>=} opt_loadTargets The list of load
|
| + * targets in preferential order. The default value is [CONTENT_METADATA,
|
| + * EXTERNAL_METADATA, FILE_ENTRY].
|
| * @param {number=} opt_priority Priority, the highest is 0. default: 2.
|
| * @constructor
|
| */
|
| function ThumbnailLoader(entry, opt_loaderType, opt_metadata, opt_mediaType,
|
| - opt_useEmbedded, opt_priority) {
|
| - opt_useEmbedded = opt_useEmbedded || ThumbnailLoader.UseEmbedded.USE_EMBEDDED;
|
| + opt_loadTargets, opt_priority) {
|
| + var loadTargets = opt_loadTargets || [
|
| + ThumbnailLoader.LoadTarget.CONTENT_METADATA,
|
| + ThumbnailLoader.LoadTarget.EXTERNAL_METADATA,
|
| + ThumbnailLoader.LoadTarget.FILE_ENTRY
|
| + ];
|
|
|
| this.mediaType_ = opt_mediaType || FileType.getMediaType(entry);
|
| this.loaderType_ = opt_loaderType || ThumbnailLoader.LoaderType.IMAGE;
|
| @@ -27,8 +32,15 @@ function ThumbnailLoader(entry, opt_loaderType, opt_metadata, opt_mediaType,
|
| this.priority_ = (opt_priority !== undefined) ? opt_priority : 2;
|
| this.transform_ = null;
|
|
|
| + /**
|
| + * @type {?ThumbnailLoader.LoadTarget}
|
| + * @private
|
| + */
|
| + this.loadTarget_ = null;
|
| +
|
| if (!opt_metadata) {
|
| this.thumbnailUrl_ = entry.toURL(); // Use the URL directly.
|
| + this.loadTarget_ = ThumbnailLoader.LoadTarget.FILE_ENTRY;
|
| return;
|
| }
|
|
|
| @@ -37,20 +49,39 @@ function ThumbnailLoader(entry, opt_loaderType, opt_metadata, opt_mediaType,
|
| if (opt_metadata.external && opt_metadata.external.customIconUrl)
|
| this.fallbackUrl_ = opt_metadata.external.customIconUrl;
|
|
|
| - if (ThumbnailLoader.hasThumbnailInMetadata(opt_metadata) &&
|
| - opt_useEmbedded === ThumbnailLoader.UseEmbedded.USE_EMBEDDED) {
|
| - // If the thumbnail generated from the local cache (metadata.thumbnail.url)
|
| - // is available, use it. If not, use the one passed from the external
|
| - // provider (metadata.external.thumbnailUrl).
|
| - this.thumbnailUrl_ =
|
| - (opt_metadata.thumbnail && opt_metadata.thumbnail.url) ||
|
| - (opt_metadata.external && opt_metadata.external.thumbnailUrl);
|
| - this.transform_ =
|
| - opt_metadata.thumbnail && opt_metadata.thumbnail.transform;
|
| - } else if (FileType.isImage(entry)) {
|
| - this.thumbnailUrl_ = entry.toURL();
|
| - this.transform_ = opt_metadata.media && opt_metadata.media.imageTransform;
|
| - } else if (this.fallbackUrl_) {
|
| + for (var i = 0; i < loadTargets.length; i++) {
|
| + switch (loadTargets[i]) {
|
| + case ThumbnailLoader.LoadTarget.CONTENT_METADATA:
|
| + if (opt_metadata.thumbnail && opt_metadata.thumbnail.url) {
|
| + this.thumbnailUrl_ = opt_metadata.thumbnail.url;
|
| + this.thumbnailTransform =
|
| + opt_metadata.thumbnail && opt_metadata.thumbnail.transform;
|
| + this.loadTarget_ = ThumbnailLoader.LoadTarget.CONTENT_METADATA;
|
| + }
|
| + break;
|
| + case ThumbnailLoader.LoadTarget.EXTERNAL_METADATA:
|
| + if (opt_metadata.external && opt_metadata.external.thumbnailUrl &&
|
| + (!opt_metadata.external.dirty || !FileType.isImage(entry))) {
|
| + this.thumbnailUrl_ = opt_metadata.external.thumbnailUrl;
|
| + this.loadTarget_ = ThumbnailLoader.LoadTarget.EXTERNAL_METADATA;
|
| + }
|
| + break;
|
| + case ThumbnailLoader.LoadTarget.FILE_ENTRY:
|
| + if (FileType.isImage(entry)) {
|
| + this.thumbnailUrl_ = entry.toURL();
|
| + this.transform_ =
|
| + opt_metadata.media && opt_metadata.media.imageTransform;
|
| + this.loadTarget_ = ThumbnailLoader.LoadTarget.FILE_ENTRY;
|
| + }
|
| + break;
|
| + default:
|
| + assertNotReached('Unkonwn load type: ' + loadTargets[i]);
|
| + }
|
| + if (this.thumbnailUrl_)
|
| + break;
|
| + }
|
| +
|
| + if (!this.thumbnailUrl_ && this.fallbackUrl_) {
|
| // Use fallback as the primary thumbnail.
|
| this.thumbnailUrl_ = this.fallbackUrl_;
|
| this.fallbackUrl_ = null;
|
| @@ -95,13 +126,16 @@ ThumbnailLoader.LoaderType = {
|
| };
|
|
|
| /**
|
| - * Whether to use the embedded thumbnail, or not. The embedded thumbnail may
|
| - * be small.
|
| - * @enum {number}
|
| + * Load target of ThumbnailLoader.
|
| + * @enum {string}
|
| */
|
| -ThumbnailLoader.UseEmbedded = {
|
| - USE_EMBEDDED: 0,
|
| - NO_EMBEDDED: 1
|
| +ThumbnailLoader.LoadTarget = {
|
| + // e.g. Drive thumbnail, FSP thumbnail.
|
| + EXTERNAL_METADATA: 'externalMetadata',
|
| + // e.g. EXIF thumbnail.
|
| + CONTENT_METADATA: 'contentMetadata',
|
| + // Image file itself.
|
| + FILE_ENTRY: 'fileEntry'
|
| };
|
|
|
| /**
|
| @@ -119,13 +153,11 @@ ThumbnailLoader.THUMBNAIL_MAX_WIDTH = 500;
|
| ThumbnailLoader.THUMBNAIL_MAX_HEIGHT = 500;
|
|
|
| /**
|
| - * Returns whether the metadata have the thumbnail information or not.
|
| - * @param {!Object} metadata Metadata.
|
| - * @return {boolean}
|
| + * Returns the target of loading.
|
| + * @return {?ThumbnailLoader.LoadTarget}
|
| */
|
| -ThumbnailLoader.hasThumbnailInMetadata = function(metadata) {
|
| - return (metadata.thumbnail && metadata.thumbnail.url) ||
|
| - (metadata.external && metadata.external.thumbnailUrl);
|
| +ThumbnailLoader.prototype.getLoadTarget = function() {
|
| + return this.loadTarget_;
|
| };
|
|
|
| /**
|
|
|