Use a queue to prevent concurrent async writeFile calls

This commit is contained in:
Max Brunsfeld
2018-01-26 11:15:35 -08:00
parent 1d20b8ee1d
commit 8f5cecbacd
4 changed files with 42 additions and 18 deletions

View File

@@ -5,6 +5,10 @@ const getWindowLoadSettings = require('./get-window-load-settings')
module.exports =
class ApplicationDelegate {
constructor () {
this.pendingSettingsUpdateCount = 0
}
getWindowLoadSettings () { return getWindowLoadSettings() }
open (params) {
@@ -175,13 +179,20 @@ class ApplicationDelegate {
return remote.systemPreferences.getUserDefault(key, type)
}
setUserSettings (config) {
return ipcHelpers.call('set-user-settings', config)
async setUserSettings (config) {
this.pendingSettingsUpdateCount++
try {
await ipcHelpers.call('set-user-settings', config)
} finally {
this.pendingSettingsUpdateCount--
}
}
onDidChangeUserSettings (callback) {
const outerCallback = (event, message, detail) => {
if (message === 'did-change-user-settings') callback(detail)
if (message === 'did-change-user-settings') {
if (this.pendingSettingsUpdateCount === 0) callback(detail)
}
}
ipcRenderer.on('message', outerCallback)
return new Disposable(() => ipcRenderer.removeListener('message', outerCallback))