diff --git a/src/client/collections/addons.js b/src/client/collections/addons.js index e1ff0ff4..5ed4b8be 100644 --- a/src/client/collections/addons.js +++ b/src/client/collections/addons.js @@ -3,8 +3,9 @@ define([ "underscore", "hr/hr", "core/backends/rpc", - "models/addon" -], function(Q, _, hr, rpc, Addon) { + "models/addon", + "utils/dialogs" +], function(Q, _, hr, rpc, Addon, dialogs) { var Addons = hr.Collection.extend({ model: Addon, defaults: _.defaults({ @@ -172,10 +173,16 @@ define([ return addon.load({}, _.pick(that.provides, addon.get("client.consumes", []))).fail(function(err) { err.addon = addon; return Q.reject(err); + }).then(function(provides) { + _.extend(that.provides, provides || {}); + }, function(err) { + return dialogs.alert("Error with addon '"+addon.get("name")+"'", "

Error when initializing this addon. Please check addons states using the addons manager and reinstall this addon.

Error message:"+ (err.message || err) +"

"); + }).then(function() { + return Q(); + }, function() { + return Q(); }); - }).then(function(provides) { - _.extend(that.provides, provides || {}); - }); + }) }, Q({})); } }); diff --git a/src/client/core/app.js b/src/client/core/app.js index 3b70b62d..3391aa96 100644 --- a/src/client/core/app.js +++ b/src/client/core/app.js @@ -118,9 +118,7 @@ box, session, addons, box, files, commands, menu, tabs, panels, operations, loca operations.render(); // Load addons - addons.loadAll().fail(function(err) { - dialogs.alert("Warning!", "

Error when initializing addons, it's possible that one of the addons is not correctly loaded. Please check addons states using the addons manager.

Addon ref: "+err.addon.get("name")+"

Error message:"+ err.message+"

"); - }).fin(function() { + addons.loadAll().fin(function() { // Remove loading state that.$(".cb-loading-alert").remove(); diff --git a/src/client/core/localfs.js b/src/client/core/localfs.js index 256a36da..f09bb881 100644 --- a/src/client/core/localfs.js +++ b/src/client/core/localfs.js @@ -333,7 +333,17 @@ define([ logger.log(" -> box:", boxFile.get("mtime")); logger.log(" -> local:", localEntry.mtime);*/ return readFile(localEntry._fullPath).then(function(content) { - return parent.write(content, localEntry._fullPath); + return parent.read(localEntry._fullPath).then(function(vfsContent) { + if (vfsContent == content) { + // Same content + return Q(); + } + return dialogs.confirm("Upload modifications of " + +localEntry._fullPath+" ("+vfsContent.length+"bytes to "+content.length+"bytes)"); + }).then(function(confirm) { + if (!confirm) return; + return parent.write(content, localEntry._fullPath); + }); }); } diff --git a/src/client/models/file.js b/src/client/models/file.js index bc11b370..4d88f870 100644 --- a/src/client/models/file.js +++ b/src/client/models/file.js @@ -379,15 +379,21 @@ define([ /* * Download */ - download: function(options) { + download: function(filename, options) { var url, d, that = this; + + if (_.isObject(filename)) { + options = filename; + filename = null; + } + options = _.defaults(options || {}, { redirect: false }); if (options.redirect) { window.open(this.exportUrl(),'_blank'); } else { - return this.vfsRequest("read", this.vfsUrl()).then(function(content) { + return this.vfsRequest("read", this.vfsUrl(filename, false)).then(function(content) { that.setCache(content); that.modifiedState(false); return content;