gconf-settings/skel/.local/share/gnome-shell/extensions/donotdisturb@kylecorry31.gi.../dndExtension.js

85 lines
1.7 KiB
JavaScript

class Extension {
constructor(dnd, toggle, indicator, remote, audio){
this.dnd = dnd;
this.toggle = toggle;
this.indicator = indicator;
this.remote = remote;
this.audio = audio;
this.enabled = false;
this.toggle.setToggleState(this.dnd.isEnabled());
this.toggle.show();
this.toggle.onToggleStateChanged(() => {
if (this.toggle.getToggleState()){
this.enable();
} else {
this.disable();
}
});
// this.dndID = this.dnd.addStatusListener((dndEnabled) => this._setDND(dndEnabled));
this.remoteID = this.remote.addRemoteListener((dndEnabled) => this._setDND(dndEnabled));
this._setDND(this.remote.getRemote());
}
_setDND(enabled){
if (enabled){
this.enable();
} else {
this.disable();
}
}
/**
* Enable do not disturb mode
*/
enable(){
if (this.enabled){
return;
}
this.enabled = true;
this.dnd.enable();
this.toggle.setToggleState(true);
this.indicator.show();
this.remote.setRemote(true);
this.audio.mute();
}
/**
* Disable do not disturb mode
*/
disable(){
if (!this.enabled){
return;
}
this.enabled = false;
this.dnd.disable();
this.toggle.setToggleState(false);
this.indicator.hide();
this.remote.setRemote(false);
this.audio.unmute();
}
/**
* @return {Boolean} true if it is enabled, otherwise false
*/
isEnabled(){
return this.enabled;
}
/**
* Destroy the extension and its components
*/
destroy(){
this.enabled = false;
// this.dnd.removeStatusListener(this.dndID);
this.remote.removeRemoteListener(this.remoteID);
this.toggle.destroy();
this.indicator.destroy();
this.dnd.disable();
}
}