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

77 lines
1.6 KiB
JavaScript

const BUSY = 2;
const AVAILABLE = 0;
/**
* A class which can enable do not disturb mode
*/
class DoNotDisturb {
/**
* Constructor
* @param {Presence} presence the interface to the Gnome Presence API
*/
constructor(presence){
this.presence = presence;
this.listeners = [];
this.presenceListernerID = -1;
}
/**
* Enable do not disturb mode
*/
enable(){
this.presence.status = BUSY;
}
/**
* Disable do not disturb mode
*/
disable(){
this.presence.status = AVAILABLE;
}
/**
* @return {Boolean} true if do not disturb mode is on, otherwise false
*/
isEnabled(){
return this.presence.status == BUSY;
}
/**
* Add a status listener for when the do not disturb mode is toggled
* @param {[Boolean => ()]} listener the listener to add
* @return {Integer} the ID of the listener
*/
addStatusListener(listener){
if (listener == null){
return -1;
}
if (this.listeners.length == 0){
this.presenceListernerID = this.presence.addStatusListener((status) => {
this.listeners.forEach((fn) => {
fn(status == BUSY);
});
});
}
listener(this.isEnabled());
return this.listeners.push(listener) - 1;
}
/**
* Remove the status listener with the ID
* @param {Integer} id the ID of the status listener
*/
removeStatusListener(id){
if (id < 0 || id >= this.listeners.length){
return;
}
this.listeners.splice(id, 1);
if (this.listeners.length == 0) {
this.presence.removeStatusListener(this.presenceListernerID);
}
}
}