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_; |
}; |
/** |