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 4fe4bf5995754b46be182bde820b28864925d81c..21a75fad15cb8b45886028ab090c20d81146f0f5 100644 |
--- a/ui/file_manager/gallery/js/gallery_item.js |
+++ b/ui/file_manager/gallery/js/gallery_item.js |
@@ -155,10 +155,12 @@ Gallery.Item.REGEXP_COPY_N = |
* Creates a name for an edited copy of the file. |
* |
* @param {!DirectoryEntry} dirEntry Entry. |
+ * @param {string} newMimeType Mime type of new image. |
* @param {function(string)} callback Callback. |
* @private |
*/ |
-Gallery.Item.prototype.createCopyName_ = function(dirEntry, callback) { |
+Gallery.Item.prototype.createCopyName_ = function( |
+ dirEntry, newMimeType, callback) { |
var name = this.getFileName(); |
// If the item represents a file created during the current Gallery session |
@@ -168,42 +170,33 @@ Gallery.Item.prototype.createCopyName_ = function(dirEntry, callback) { |
return; |
} |
- var ext = ''; |
- var index = name.lastIndexOf('.'); |
- if (index != -1) { |
- ext = name.substr(index); |
- name = name.substr(0, index); |
- } |
- |
- if (!ext.match(/jpe?g/i)) { |
- // Chrome can natively encode only two formats: JPEG and PNG. |
- // All non-JPEG images are saved in PNG, hence forcing the file extension. |
- ext = '.png'; |
- } |
+ var baseName = name.replace(/\.[^\.\/]+$/, ''); |
+ var ext = newMimeType === 'image/jpeg' ? '.jpg' : '.png'; |
function tryNext(tries) { |
// All the names are used. Let's overwrite the last one. |
if (tries == 0) { |
- setTimeout(callback, 0, name + ext); |
+ setTimeout(callback, 0, baseName + ext); |
return; |
} |
// If the file name contains the copy signature add/advance the sequential |
// number. |
- var matchN = Gallery.Item.REGEXP_COPY_N.exec(name); |
- var match0 = Gallery.Item.REGEXP_COPY_0.exec(name); |
+ var matchN = Gallery.Item.REGEXP_COPY_N.exec(baseName); |
+ var match0 = Gallery.Item.REGEXP_COPY_0.exec(baseName); |
if (matchN && matchN[1] && matchN[2]) { |
var copyNumber = parseInt(matchN[2], 10) + 1; |
- name = matchN[1] + Gallery.Item.COPY_SIGNATURE + ' (' + copyNumber + ')'; |
+ baseName = matchN[1] + Gallery.Item.COPY_SIGNATURE + |
+ ' (' + copyNumber + ')'; |
} else if (match0 && match0[1]) { |
- name = match0[1] + Gallery.Item.COPY_SIGNATURE + ' (1)'; |
+ baseName = match0[1] + Gallery.Item.COPY_SIGNATURE + ' (1)'; |
} else { |
- name += Gallery.Item.COPY_SIGNATURE; |
+ baseName += Gallery.Item.COPY_SIGNATURE; |
} |
- dirEntry.getFile(name + ext, {create: false, exclusive: false}, |
+ dirEntry.getFile(baseName + ext, {create: false, exclusive: false}, |
tryNext.bind(null, tries - 1), |
- callback.bind(null, name + ext)); |
+ callback.bind(null, baseName + ext)); |
} |
tryNext(10); |
@@ -225,6 +218,8 @@ Gallery.Item.prototype.saveToFile = function( |
ImageUtil.metrics.startInterval(ImageUtil.getMetricName('SaveTime')); |
var name = this.getFileName(); |
+ var newMimeType = name.match(/\.jpe?g$/i) || FileType.isRaw(this.entry_) ? |
+ 'image/jpeg' : 'image/png'; |
var onSuccess = function(entry) { |
var locationInfo = volumeManager.getLocationInfo(entry); |
@@ -270,6 +265,7 @@ Gallery.Item.prototype.saveToFile = function( |
// Create the blob of new image. |
var metadataItem = metadataItems[0]; |
metadataItem.modificationTime = new Date(); |
+ metadataItem.mediaMimeType = newMimeType; |
var metadataEncoder = ImageEncoder.encodeMetadata( |
metadataItem, canvas, /* quality for thumbnail*/ 0.8); |
// Contrary to what one might think 1.0 is not a good default. Opening |
@@ -278,7 +274,7 @@ Gallery.Item.prototype.saveToFile = function( |
// It shrinks some photos a bit, keeps others about the same size, but |
// does not visibly lower the quality. |
blob = ImageEncoder.getBlob(canvas, metadataEncoder, 0.9); |
- }).then(function() { |
+ }.bind(this)).then(function() { |
// Create writer. |
return new Promise(function(fullfill, reject) { |
fileEntry.createWriter(fullfill, reject); |
@@ -328,10 +324,12 @@ Gallery.Item.prototype.saveToFile = function( |
}; |
var saveToDir = function(dir) { |
- if (overwrite && !this.locationInfo_.isReadOnly) { |
+ if (overwrite && |
+ !this.locationInfo_.isReadOnly && |
+ !FileType.isRaw(this.entry_)) { |
checkExistence(dir); |
} else { |
- this.createCopyName_(dir, function(copyName) { |
+ this.createCopyName_(dir, newMimeType, function(copyName) { |
this.original_ = false; |
name = copyName; |
checkExistence(dir); |