From 12d05b96a08c79a155eaa3f080bfd0e53e5d7668 Mon Sep 17 00:00:00 2001 From: Dan Flettre Date: Thu, 13 Oct 2016 23:23:27 -0500 Subject: [PATCH] save preferences immediately when changed --- src/renderer/controllers/prefs-controller.js | 33 +++----------------- src/renderer/pages/preferences-page.js | 12 +++---- 2 files changed, 11 insertions(+), 34 deletions(-) diff --git a/src/renderer/controllers/prefs-controller.js b/src/renderer/controllers/prefs-controller.js index 8d8241c3..e6545e7d 100644 --- a/src/renderer/controllers/prefs-controller.js +++ b/src/renderer/controllers/prefs-controller.js @@ -16,45 +16,22 @@ module.exports = class PrefsController { setup: function (cb) { // initialize preferences state.window.title = 'Preferences' - state.unsaved = Object.assign(state.unsaved || {}, { - prefs: Object.assign({}, state.saved.prefs) - }) ipcRenderer.send('setAllowNav', false) cb() }, destroy: () => { ipcRenderer.send('setAllowNav', true) - this.save() } }) } - // Updates a single property in the UNSAVED prefs - // For example: updatePreferences('foo.bar', 'baz') - // Call save() to save to config.json + // Updates a single property in the saved prefs + // For example: updatePreferences('isFileHandler', true) update (property, value) { - const path = property.split('.') - let obj = this.state.unsaved.prefs - let i - for (i = 0; i < path.length - 1; i++) { - if (typeof obj[path[i]] === 'undefined') { - obj[path[i]] = {} - } - obj = obj[path[i]] - } - obj[path[i]] = value - } + if (property === 'isFileHandler') ipcRenderer.send('setDefaultFileHandler', value) + else if (property === 'startup') ipcRenderer.send('setStartup', value) - // All unsaved prefs take effect atomically, and are saved to config.json - save () { - const state = this.state - if (state.unsaved.prefs.isFileHandler !== state.saved.prefs.isFileHandler) { - ipcRenderer.send('setDefaultFileHandler', state.unsaved.prefs.isFileHandler) - } - if (state.unsaved.prefs.startup !== state.saved.prefs.startup) { - ipcRenderer.send('setStartup', state.unsaved.prefs.startup) - } - state.saved.prefs = Object.assign(state.saved.prefs || {}, state.unsaved.prefs) + this.state.saved.prefs[property] = value dispatch('stateSaveImmediate') dispatch('checkDownloadPath') } diff --git a/src/renderer/pages/preferences-page.js b/src/renderer/pages/preferences-page.js index 9f4006e7..52ebe7ee 100644 --- a/src/renderer/pages/preferences-page.js +++ b/src/renderer/pages/preferences-page.js @@ -37,7 +37,7 @@ class PreferencesPage extends React.Component { }} onChange={this.handleDownloadPathChange} title='Download location' - value={this.props.state.unsaved.prefs.downloadPath} /> + value={this.props.state.saved.prefs.downloadPath} /> ) } @@ -51,7 +51,7 @@ class PreferencesPage extends React.Component { @@ -81,10 +81,10 @@ class PreferencesPage extends React.Component { } externalPlayerPathSelector () { - const playerPath = this.props.state.unsaved.prefs.externalPlayerPath + const playerPath = this.props.state.saved.prefs.externalPlayerPath const playerName = this.props.state.getExternalPlayerName() - const description = this.props.state.unsaved.prefs.openExternalPlayer + const description = this.props.state.saved.prefs.openExternalPlayer ? `Torrent media files will always play in ${playerName}.` : `Torrent media files will play in ${playerName} if WebTorrent cannot play them.` @@ -162,7 +162,7 @@ class PreferencesPage extends React.Component { } setDefaultAppButton () { - const isFileHandler = this.props.state.unsaved.prefs.isFileHandler + const isFileHandler = this.props.state.saved.prefs.isFileHandler if (isFileHandler) { return ( @@ -195,7 +195,7 @@ class PreferencesPage extends React.Component {