From de92da4dafadc641a9b8c46369639ea0d34e756a Mon Sep 17 00:00:00 2001 From: Antelle Date: Sun, 13 Dec 2015 17:59:41 +0300 Subject: [PATCH] sync bugfix --- app/scripts/collections/file-collection.js | 2 +- .../collections/file-info-collection.js | 4 +-- app/scripts/models/app-model.js | 25 +++++++------------ app/scripts/models/entry-model.js | 2 +- app/scripts/models/file-model.js | 1 + app/scripts/storage/storage-file-cache.js | 1 + .../views/settings/settings-file-view.js | 3 +-- 7 files changed, 16 insertions(+), 22 deletions(-) diff --git a/app/scripts/collections/file-collection.js b/app/scripts/collections/file-collection.js index aa9300a7..f908c087 100644 --- a/app/scripts/collections/file-collection.js +++ b/app/scripts/collections/file-collection.js @@ -19,7 +19,7 @@ var FileCollection = Backbone.Collection.extend({ }, getByName: function(name) { - return this.find(function(file) { return file.get('name') === name; }); + return this.find(function(file) { return file.get('name').toLowerCase() === name.toLowerCase(); }); }, getById: function(id) { diff --git a/app/scripts/collections/file-info-collection.js b/app/scripts/collections/file-info-collection.js index dd8f555e..260c1f86 100644 --- a/app/scripts/collections/file-info-collection.js +++ b/app/scripts/collections/file-info-collection.js @@ -33,8 +33,8 @@ var FileInfoCollection = Backbone.Collection.extend({ }); }, - getByName: function() { - return this.find(function(file) { return file.get('name') === name; }); + getByName: function(name) { + return this.find(function(file) { return file.get('name').toLowerCase() === name.toLowerCase(); }); } }); diff --git a/app/scripts/models/app-model.js b/app/scripts/models/app-model.js index d46df57d..908d093f 100644 --- a/app/scripts/models/app-model.js +++ b/app/scripts/models/app-model.js @@ -265,7 +265,7 @@ var AppModel = Backbone.Model.extend({ // no storage: load from cache as main storage logger.info('Open file from cache as main storage'); this.openFileFromCache(params, callback, fileInfo); - } else if (fileInfo && fileInfo.get('rev') === params.rev) { + } else if (fileInfo && fileInfo.get('rev') === params.rev && fileInfo.get('storage') !== 'file') { // already latest in cache: use it logger.info('Open file from cache because it is latest'); this.openFileFromCache(params, callback, fileInfo); @@ -355,28 +355,21 @@ var AppModel = Backbone.Model.extend({ file.set('syncDate', fileInfo.get('syncDate')); } var cacheId = fileInfo && fileInfo.id || IdGenerator.uuid(); + file.set('cacheId', cacheId); if (updateCacheOnSuccess && params.storage !== 'file') { logger.info('Save loaded file to cache'); - Storage.cache.save(cacheId, params.fileData, function(err) { - if (err && !params.storage) { - return; - } - that.addToLastOpenFiles(file, cacheId, params.rev); - }); + Storage.cache.save(cacheId, params.fileData); } - if (params.storage === 'file') { - that.addToLastOpenFiles(file, cacheId, params.rev); - } - file.set('cacheId', cacheId); + that.addToLastOpenFiles(file, params.rev); that.addFile(file); }); }, - addToLastOpenFiles: function(file, id, rev) { - this.appLogger.debug('Add last open file', id, file.get('name'), file.get('storage'), file.get('path')); + addToLastOpenFiles: function(file, rev) { + this.appLogger.debug('Add last open file', file.get('cacheId'), file.get('name'), file.get('storage'), file.get('path')); var dt = new Date(); var fileInfo = new FileInfoModel({ - id: id, + id: file.get('cacheId'), name: file.get('name'), storage: file.get('storage'), path: file.get('path'), @@ -386,7 +379,7 @@ var AppModel = Backbone.Model.extend({ syncDate: file.get('syncDate') || dt, openDate: dt }); - this.fileInfos.remove(id); + this.fileInfos.remove(file.get('cacheId')); this.fileInfos.unshift(fileInfo); this.fileInfos.save(); }, @@ -548,7 +541,7 @@ var AppModel = Backbone.Model.extend({ logger.info('Saved to cache'); loadFromStorageAndMerge(); } else if (storage === 'file') { - if (file.get('modified')) { + if (file.get('modified') || file.get('path') !== path) { logger.info('Save modified file to storage'); saveToCacheAndStorage(); } else { diff --git a/app/scripts/models/entry-model.js b/app/scripts/models/entry-model.js index e3b37f8e..91621e7e 100644 --- a/app/scripts/models/entry-model.js +++ b/app/scripts/models/entry-model.js @@ -28,7 +28,7 @@ var EntryModel = Backbone.Model.extend({ _fillByEntry: function() { var entry = this.entry; this.set({id: entry.uuid.id}, {silent: true}); - this.fileName = this.file.db.meta.name; + this.fileName = this.file.get('name'); this.title = entry.fields.Title || ''; this.password = entry.fields.Password || kdbxweb.ProtectedValue.fromString(''); this.notes = entry.fields.Notes || ''; diff --git a/app/scripts/models/file-model.js b/app/scripts/models/file-model.js index 1d255625..a9b22ce6 100644 --- a/app/scripts/models/file-model.js +++ b/app/scripts/models/file-model.js @@ -347,6 +347,7 @@ var FileModel = Backbone.Model.extend({ this.set('name', name); this.get('groups').first().setName(name); this.setModified(); + this.reload(); }, setDefaultUser: function(defaultUser) { diff --git a/app/scripts/storage/storage-file-cache.js b/app/scripts/storage/storage-file-cache.js index 185f0a2d..51f3b0dd 100644 --- a/app/scripts/storage/storage-file-cache.js +++ b/app/scripts/storage/storage-file-cache.js @@ -26,6 +26,7 @@ var StorageFileCache = { fs.mkdirSync(path); } this.path = path; + callback(); } catch (e) { logger.error('Error opening local offline storage', e); if (callback) { callback(e); } diff --git a/app/scripts/views/settings/settings-file-view.js b/app/scripts/views/settings/settings-file-view.js index 7ecb6c86..50cfb231 100644 --- a/app/scripts/views/settings/settings-file-view.js +++ b/app/scripts/views/settings/settings-file-view.js @@ -37,7 +37,7 @@ var SettingsAboutView = Backbone.View.extend({ appModel: null, initialize: function() { - this.listenTo(this.model, 'change', this.render); + this.listenTo(this.model, 'change:syncing change:syncError change:syncDate', this.render); }, render: function() { @@ -96,7 +96,6 @@ var SettingsAboutView = Backbone.View.extend({ header: 'Empty password', body: 'Saving database with empty password makes it completely unprotected. Do you really want to do it?', success: function() { - that.model.setPassword(kdbxweb.ProtectedValue.fromString('')); continueCallback(); }, cancel: function() {