diff --git a/app/scripts/const/default-app-settings.js b/app/scripts/const/default-app-settings.js index 720679e0..eb8f760b 100644 --- a/app/scripts/const/default-app-settings.js +++ b/app/scripts/const/default-app-settings.js @@ -9,7 +9,7 @@ const DefaultAppSettings = { autoUpdate: 'install', // auto-update options: "install", "check", "" clipboardSeconds: 0, // number of seconds after which the clipboard will be cleared autoSave: true, // auto-save open files - autoSaveInterval: 0, // interval between performing automatic sync, minutes + autoSaveInterval: 0, // interval between performing automatic sync, minutes, -1: on every change rememberKeyFiles: 'path', // remember keyfiles selected on the Open screen idleMinutes: 15, // app lock timeout after inactivity, minutes minimizeOnClose: false, // minimise the app instead of closing diff --git a/app/scripts/locales/base.json b/app/scripts/locales/base.json index 26cb4521..9a9bba18 100644 --- a/app/scripts/locales/base.json +++ b/app/scripts/locales/base.json @@ -437,6 +437,7 @@ "setGenAutoSyncOnClose": "Automatically save and sync on close", "setGenAutoSyncTimer": "Automatically save and sync periodically", "setGenAutoSyncTimerOff": "Disabled", + "setGenAutoSyncTimerOnChange": "On every change", "setGenAutoSyncTimerInterval": "Every {} minute(s)", "setGenRememberKeyFiles": "Remember key files", "setGenNoRememberKeyFiles": "Don't remember", diff --git a/app/scripts/models/app-model.js b/app/scripts/models/app-model.js index ff7b2c01..28745794 100644 --- a/app/scripts/models/app-model.js +++ b/app/scripts/models/app-model.js @@ -180,8 +180,15 @@ class AppModel { this.refresh(); file.on('reload', this.reloadFile.bind(this)); - file.on('change', () => Events.emit('file-changed', file)); + file.on('change', () => { + Events.emit('file-changed', file); + }); file.on('ejected', () => this.closeFile(file)); + file.on('change:dirty', (file, dirty) => { + if (dirty && this.settings.autoSaveInterval === -1) { + this.syncFile(file); + } + }); Events.emit('file-opened'); diff --git a/app/scripts/models/file-model.js b/app/scripts/models/file-model.js index 66fe5f30..a3ca3445 100644 --- a/app/scripts/models/file-model.js +++ b/app/scripts/models/file-model.js @@ -414,7 +414,6 @@ class FileModel extends Model { setModified() { if (!this.demo) { this.set({ modified: true, dirty: true }); - Events.emit('file-modified'); } } diff --git a/app/scripts/views/app-view.js b/app/scripts/views/app-view.js index 95bce3a2..b60fe1a3 100644 --- a/app/scripts/views/app-view.js +++ b/app/scripts/views/app-view.js @@ -652,7 +652,7 @@ class AppView extends View { if (this.autoSaveTimer) { clearInterval(this.autoSaveTimer); } - if (this.model.settings.autoSaveInterval) { + if (this.model.settings.autoSaveInterval > 0) { this.autoSaveTimer = setInterval( this.saveAll.bind(this), this.model.settings.autoSaveInterval * 1000 * 60 diff --git a/app/scripts/views/settings/settings-general-view.js b/app/scripts/views/settings/settings-general-view.js index e1e18c29..db8d6cd7 100644 --- a/app/scripts/views/settings/settings-general-view.js +++ b/app/scripts/views/settings/settings-general-view.js @@ -331,7 +331,7 @@ class SettingsGeneralView extends View { } changeAutoSaveInterval(e) { - const autoSaveInterval = Number(e.target.value) || 0; + const autoSaveInterval = e.target.value | 0; AppSettingsModel.autoSaveInterval = autoSaveInterval; } diff --git a/app/templates/settings/settings-general.hbs b/app/templates/settings/settings-general.hbs index 457e45fc..6a997ad5 100644 --- a/app/templates/settings/settings-general.hbs +++ b/app/templates/settings/settings-general.hbs @@ -114,10 +114,11 @@ {{/if}}