Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(108)

Unified Diff: ui/file_manager/gallery/js/gallery_item.js

Issue 1053653003: Gallery: Support RAW files in Gallery. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix the second bind. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/file_manager/gallery/css/gallery.css ('k') | ui/file_manager/gallery/js/gallery_item_unittest.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
« no previous file with comments | « ui/file_manager/gallery/css/gallery.css ('k') | ui/file_manager/gallery/js/gallery_item_unittest.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698