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()}
+
)
}