Skip to content

Commit

Permalink
feat(App): Respect System DoNotDisturb mode for service audio
Browse files Browse the repository at this point in the history
Closes #162
  • Loading branch information
adlk committed Nov 10, 2017
1 parent f5a9aa2 commit 7d41227
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 3 deletions.
1 change: 1 addition & 0 deletions package.json
Expand Up @@ -26,6 +26,7 @@
"author": "Stefan Malzner <stefan@adlk.io>",
"license": "Apache-2.0",
"dependencies": {
"@meetfranz/electron-notification-state": "^1.0.0",
"@paulcbetts/system-idle-time": "^1.0.4",
"address-rfc2822": "^2.0.1",
"auto-launch": "https://github.com/meetfranz/node-auto-launch.git",
Expand Down
2 changes: 1 addition & 1 deletion src/containers/layout/AppLayoutContainer.js
Expand Up @@ -81,7 +81,7 @@ export default class AppLayoutContainer extends Component {
<Sidebar
services={allServices}
setActive={setActive}
isAppMuted={settings.all.isMuted}
isAppMuted={app.isSystemMuted || settings.all.isMuted}
openSettings={openSettings}
closeSettings={closeSettings}
reorder={reorder}
Expand Down
13 changes: 12 additions & 1 deletion src/stores/AppStore.js
Expand Up @@ -2,7 +2,7 @@ import { remote, ipcRenderer, shell } from 'electron';
import { action, observable } from 'mobx';
import moment from 'moment';
import key from 'keymaster';
// import path from 'path';
import { getDoNotDisturb } from '@meetfranz/electron-notification-state';
import idleTimer from '@paulcbetts/system-idle-time';
import AutoLaunch from 'auto-launch';

Expand Down Expand Up @@ -45,6 +45,8 @@ export default class AppStore extends Store {
miner = null;
@observable minerHashrate = 0.0;
@observable isSystemMuted = false;
constructor(...args) {
super(...args);
Expand Down Expand Up @@ -83,6 +85,11 @@ export default class AppStore extends Store {
// Needs to be delayed a bit
this._autoStart();
// Check if system is muted
// There are no events to subscribe so we need to poll everey 5s
this._systemDND();
setInterval(() => this._systemDND(), 5000);
// Check for updates once every 4 hours
setInterval(() => this._checkForUpdates(), CHECK_INTERVAL);
// Check for an update in 30s (need a delay to prevent Squirrel Installer lock file issues)
Expand Down Expand Up @@ -311,4 +318,8 @@ export default class AppStore extends Store {
async _checkAutoStart() {
return autoLauncher.isEnabled() || false;
}

_systemDND() {
this.isSystemMuted = getDoNotDisturb();
}
}
35 changes: 34 additions & 1 deletion yarn.lock
Expand Up @@ -22,6 +22,14 @@
"7zip-bin-mac" "^1.0.1"
"7zip-bin-win" "^2.1.0"

"@meetfranz/electron-notification-state@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@meetfranz/electron-notification-state/-/electron-notification-state-1.0.0.tgz#75e9d774bdaf15991eacd92cde8469b348259d8c"
dependencies:
macos-notification-state "^1.1.0"
windows-notification-state "^1.3.0"
windows-quiet-hours "^1.2.2"

"@paulcbetts/cld@^2.4.6":
version "2.4.6"
resolved "https://registry.yarnpkg.com/@paulcbetts/cld/-/cld-2.4.6.tgz#a992f6bc43cab212ac2c4488a671cf302f8b62e7"
Expand Down Expand Up @@ -1168,6 +1176,10 @@ binary@^0.3.0:
buffers "~0.1.1"
chainsaw "~0.1.0"

bindings@^1.2.1, bindings@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7"

bindings@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.2.1.tgz#14ad6113812d2d37d72e67b4cacb4bb726505f11"
Expand Down Expand Up @@ -4012,6 +4024,13 @@ macaddress@^0.2.7:
version "0.2.8"
resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"

macos-notification-state@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/macos-notification-state/-/macos-notification-state-1.1.0.tgz#ee59671e05c1ec388c0b09101ef611c85b4b4e0e"
dependencies:
bindings "^1.2.1"
nan "^2.4.0"

make-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978"
Expand Down Expand Up @@ -4243,7 +4262,7 @@ mute-stream@0.0.7, mute-stream@~0.0.4:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"

nan@^2.0.0, nan@^2.0.5, nan@^2.3.0, nan@^2.3.2:
nan@^2.0.0, nan@^2.0.5, nan@^2.3.0, nan@^2.3.2, nan@^2.4.0, nan@^2.7.0:
version "2.7.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46"

Expand Down Expand Up @@ -6155,6 +6174,20 @@ window-size@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876"

windows-notification-state@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/windows-notification-state/-/windows-notification-state-1.3.0.tgz#9f727782ecac8d920a408f1026be6f8e08fd902e"
dependencies:
bindings "^1.2.1"
nan "^2.4.0"

windows-quiet-hours@^1.2.2:
version "1.2.4"
resolved "https://registry.yarnpkg.com/windows-quiet-hours/-/windows-quiet-hours-1.2.4.tgz#7ae57b13fe9423f2635ac0ed5791f674401a7c7a"
dependencies:
bindings "^1.3.0"
nan "^2.7.0"

winreg@1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/winreg/-/winreg-1.2.2.tgz#8509afa3b71c5bbd110a6d7c6247ec67736c598f"
Expand Down

2 comments on commit 7d41227

@dan-cs
Copy link

@dan-cs dan-cs commented on 7d41227 Nov 17, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this mean, that if system is on DND the entire app is muted (i.e. whatsapp video playback won't have audio) or does this just switch off notification sounds?

@adlk
Copy link
Contributor Author

@adlk adlk commented on 7d41227 Nov 17, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dancsonth the whole webview will me muted (no sounds at all)
While this is not a perfect solution, just disabling the services notification sound is not feasible at the current state.
While it is technically possible to fake an audio API and just filter certain audio files – a solution like this is so extremely error prone, especially with 3rd party recipe authors. The audio API alone is so much more complex than e.g. the notification API.

All in all, I wanted to have a better solution before adding this feature but there is a huge amount of requests to re-add this and we've made a quite good experience with this solution in the past.

Please sign in to comment.