diff --git a/src/renderer/lib/migrations.js b/src/renderer/lib/migrations.js index ece7125d..74a3f651 100644 --- a/src/renderer/lib/migrations.js +++ b/src/renderer/lib/migrations.js @@ -28,6 +28,7 @@ function run (state) { if (semver.lt(version, '0.14.0')) migrate_0_14_0(saved) if (semver.lt(version, '0.17.0')) migrate_0_17_0(saved) if (semver.lt(version, '0.17.2')) migrate_0_17_2(saved) + if (semver.lt(version, '0.21.0')) migrate_0_21_0(saved) // Config is now on the new version state.saved.version = config.APP_VERSION @@ -206,3 +207,10 @@ function migrate_0_17_2 (saved) { } catch (err) {} } } + +function migrate_0_21_0 (saved) { + if (saved.prefs.soundNotifications == null) { + // The app used to always have sound notifications enabled + saved.prefs.soundNotifications = true + } +} diff --git a/src/renderer/lib/sound.js b/src/renderer/lib/sound.js index a31aa2ce..0bcfe077 100644 --- a/src/renderer/lib/sound.js +++ b/src/renderer/lib/sound.js @@ -1,4 +1,5 @@ module.exports = { + init, play } @@ -8,6 +9,9 @@ const path = require('path') const VOLUME = 0.25 +// App state to access the soundNotifications preference +let state + /* Cache of Audio elements, for instant playback */ const cache = {} @@ -46,7 +50,15 @@ const sounds = { } } +function init (appState) { + state = appState +} + function play (name) { + if (!state.saved.prefs.soundNotifications) { + return + } + let audio = cache[name] if (!audio) { const sound = sounds[name] diff --git a/src/renderer/lib/state.js b/src/renderer/lib/state.js index 0a554772..4ac7f34a 100644 --- a/src/renderer/lib/state.js +++ b/src/renderer/lib/state.js @@ -121,6 +121,7 @@ function setupStateSaved (cb) { openExternalPlayer: false, externalPlayerPath: null, startup: false, + soundNotifications: true, autoAddTorrents: false, torrentsFolderPath: '', highestPlaybackPriority: true diff --git a/src/renderer/main.js b/src/renderer/main.js index b5415d57..498cc23c 100644 --- a/src/renderer/main.js +++ b/src/renderer/main.js @@ -74,6 +74,7 @@ function onState (err, _state) { window.dispatch = dispatch telemetry.init(state) + sound.init(state) // Log uncaught JS errors window.addEventListener( diff --git a/src/renderer/pages/preferences-page.js b/src/renderer/pages/preferences-page.js index 687af900..70ce49a0 100644 --- a/src/renderer/pages/preferences-page.js +++ b/src/renderer/pages/preferences-page.js @@ -26,6 +26,9 @@ class PreferencesPage extends React.Component { this.handleStartupChange = this.handleStartupChange.bind(this) + + this.handlesoundNotificationsChange = + this.handlesoundNotificationsChange.bind(this) } downloadPathSelector () { @@ -186,25 +189,39 @@ class PreferencesPage extends React.Component { dispatch('updatePreferences', 'startup', isChecked) } - setStartupSection () { + setStartupCheckbox () { if (config.IS_PORTABLE) { return } return ( - - - - - + + + ) } + soundNotificationsCheckbox () { + return ( + + + + ) + } + + handlesoundNotificationsChange (e, isChecked) { + dispatch('updatePreferences', 'soundNotifications', isChecked) + } + handleSetDefaultApp () { dispatch('updatePreferences', 'isFileHandler', true) } @@ -230,7 +247,10 @@ class PreferencesPage extends React.Component { {this.setDefaultAppButton()} - {this.setStartupSection()} + + {this.setStartupCheckbox()} + {this.soundNotificationsCheckbox()} + ) }