Index: ui/file_manager/gallery/js/gallery_item.js |
diff --git a/ui/file_manager/gallery/js/gallery_item.js b/ui/file_manager/gallery/js/gallery_item.js |
index 7244bf5e6be04c8b4879dc4ed05ecb182f0ff46d..227940a63eeb78b878c0459c841d4eb4c23d59fc 100644 |
--- a/ui/file_manager/gallery/js/gallery_item.js |
+++ b/ui/file_manager/gallery/js/gallery_item.js |
@@ -112,14 +112,6 @@ Gallery.Item.prototype.getFetchedMedia = function() { |
}; |
/** |
- * Sets the metadata. |
- * @param {!Object} metadata New metadata. |
- */ |
-Gallery.Item.prototype.setMetadata = function(metadata) { |
- this.metadata_ = Object.preventExtensions(metadata); |
-}; |
- |
-/** |
* @return {string} File name. |
*/ |
Gallery.Item.prototype.getFileName = function() { |
@@ -231,30 +223,45 @@ Gallery.Item.prototype.createCopyName_ = function(dirEntry, callback) { |
* Writes the new item content to either the existing or a new file. |
* |
* @param {!VolumeManager} volumeManager Volume manager instance. |
- * @param {string} fallbackDir Fallback directory in case the current directory |
- * is read only. |
+ * @param {DirectoryEntry} fallbackDir Fallback directory in case the current |
+ * directory is read only. |
* @param {boolean} overwrite Whether to overwrite the image to the item or not. |
* @param {!HTMLCanvasElement} canvas Source canvas. |
- * @param {!ImageEncoder.MetadataEncoder} metadataEncoder MetadataEncoder. |
* @param {function(boolean)=} opt_callback Callback accepting true for success. |
*/ |
Gallery.Item.prototype.saveToFile = function( |
- volumeManager, fallbackDir, overwrite, canvas, metadataEncoder, |
- opt_callback) { |
+ volumeManager, fallbackDir, overwrite, canvas, opt_callback) { |
ImageUtil.metrics.startInterval(ImageUtil.getMetricName('SaveTime')); |
var name = this.getFileName(); |
- var onSuccess = function(entry, locationInfo) { |
+ var onSuccess = function(entry) { |
+ var locationInfo = volumeManager.getLocationInfo(entry); |
+ if (!locationInfo) { |
+ // Reuse old location info if it fails to obtain location info. |
+ locationInfo = this.locationInfo_; |
+ } |
ImageUtil.metrics.recordEnum(ImageUtil.getMetricName('SaveResult'), 1, 2); |
ImageUtil.metrics.recordInterval(ImageUtil.getMetricName('SaveTime')); |
this.entry_ = entry; |
this.locationInfo_ = locationInfo; |
- this.metadataCache_.clear([this.entry_], 'fetchedMedia'); |
- if (opt_callback) |
- opt_callback(true); |
+ // Updates the metadata. |
+ this.metadataCache_.clear([this.entry_], '*'); |
+ this.metadataCache_.getLatest( |
+ [this.entry_], |
+ Gallery.METADATA_TYPE, |
+ function(metadataList) { |
+ if (metadataList.length === 1) { |
+ this.metadata_ = metadataList[0]; |
+ if (opt_callback) |
+ opt_callback(true); |
+ } else { |
+ if (opt_callback) |
+ opt_callback(false); |
+ } |
+ }.bind(this)); |
}.bind(this); |
var onError = function(error) { |
@@ -266,15 +273,19 @@ Gallery.Item.prototype.saveToFile = function( |
var doSave = function(newFile, fileEntry) { |
fileEntry.createWriter(function(fileWriter) { |
- function writeContent() { |
+ var writeContent = function() { |
fileWriter.onwriteend = onSuccess.bind(null, fileEntry); |
+ // TODO(hirono): Remove the quality 1 for thumbanils. The code path is |
+ // no longer used. |
+ var metadataEncoder = ImageEncoder.encodeMetadata( |
+ this.metadata_, canvas, 1 /* quality */); |
// Contrary to what one might think 1.0 is not a good default. Opening |
// and saving an typical photo taken with consumer camera increases its |
// file size by 50-100%. Experiments show that 0.9 is much better. It |
// shrinks some photos a bit, keeps others about the same size, but does |
// not visibly lower the quality. |
fileWriter.write(ImageEncoder.getBlob(canvas, metadataEncoder, 0.9)); |
- } |
+ }.bind(this); |
fileWriter.onerror = function(error) { |
onError(error); |
// Disable all callbacks on the first error. |
@@ -287,18 +298,12 @@ Gallery.Item.prototype.saveToFile = function( |
fileWriter.onwriteend = writeContent; |
fileWriter.truncate(0); |
} |
- }, onError); |
- }; |
+ }.bind(this), onError); |
+ }.bind(this); |
var getFile = function(dir, newFile) { |
dir.getFile(name, {create: newFile, exclusive: newFile}, |
function(fileEntry) { |
- var locationInfo = volumeManager.getLocationInfo(fileEntry); |
- // If the volume is gone, then abort the saving operation. |
- if (!locationInfo) { |
- onError('NotFound'); |
- return; |
- } |
doSave(newFile, fileEntry); |
}.bind(this), onError); |
}.bind(this); |