mirror of
https://github.com/xsghetti/HyprCrux.git
synced 2025-07-04 06:10:40 -04:00
59 lines
No EOL
1.7 KiB
JavaScript
59 lines
No EOL
1.7 KiB
JavaScript
import Service from 'resource:///com/github/Aylur/ags/service.js';
|
|
import * as Utils from 'resource:///com/github/Aylur/ags/utils.js';
|
|
const { exec, execAsync } = Utils;
|
|
|
|
import { clamp } from '../modules/.miscutils/mathfuncs.js';
|
|
|
|
class BrightnessService extends Service {
|
|
static {
|
|
Service.register(
|
|
this,
|
|
{ 'screen-changed': ['float'], },
|
|
{ 'screen-value': ['float', 'rw'], },
|
|
);
|
|
}
|
|
|
|
_screenValue = 0;
|
|
|
|
// the getter has to be in snake_case
|
|
get screen_value() { return this._screenValue; }
|
|
|
|
// the setter has to be in snake_case too
|
|
set screen_value(percent) {
|
|
percent = clamp(percent, 0, 1);
|
|
this._screenValue = percent;
|
|
|
|
Utils.execAsync(`brightnessctl s ${percent * 100}% -q`)
|
|
.then(() => {
|
|
// signals has to be explicity emitted
|
|
this.emit('screen-changed', percent);
|
|
this.notify('screen-value');
|
|
|
|
// or use Service.changed(propName: string) which does the above two
|
|
// this.changed('screen');
|
|
})
|
|
.catch(print);
|
|
}
|
|
|
|
constructor() {
|
|
super();
|
|
const current = Number(exec('brightnessctl g'));
|
|
const max = Number(exec('brightnessctl m'));
|
|
this._screenValue = current / max;
|
|
}
|
|
|
|
// overwriting connectWidget method, lets you
|
|
// change the default event that widgets connect to
|
|
connectWidget(widget, callback, event = 'screen-changed') {
|
|
super.connectWidget(widget, callback, event);
|
|
}
|
|
}
|
|
|
|
// the singleton instance
|
|
const service = new BrightnessService();
|
|
|
|
// make it global for easy use with cli
|
|
globalThis.brightness = service;
|
|
|
|
// export to use in other modules
|
|
export default service; |