feat(ags razer): add more props to monitor
All checks were successful
Discord / discord commits (push) Has been skipped
All checks were successful
Discord / discord commits (push) Has been skipped
This commit is contained in:
parent
235563aa0a
commit
eeea68789c
1 changed files with 69 additions and 37 deletions
|
@ -1,63 +1,90 @@
|
|||
import { execAsync, interval } from 'resource:///com/github/Aylur/ags/utils.js';
|
||||
|
||||
const { Box, Icon, Label } = Widget;
|
||||
|
||||
const RAZER_POLL = 30000;
|
||||
const RAZER_POLL = 10000;
|
||||
const LOW_BATT = 20;
|
||||
|
||||
|
||||
// TODO: add charging indicator
|
||||
const RazerBat = Variable(-1, {
|
||||
poll: [
|
||||
RAZER_POLL,
|
||||
[
|
||||
'bash',
|
||||
'-c',
|
||||
"polychromatic-cli -n 'Razer Naga Pro (Wired)' -k" +
|
||||
' || ' +
|
||||
"polychromatic-cli -n 'Razer Naga Pro (Wireless)' -k",
|
||||
],
|
||||
(out) => {
|
||||
const batteryMatches = out.split('\n')
|
||||
.filter((i) => i.includes('Battery'))[0]
|
||||
.match(/[0-9]+/);
|
||||
|
||||
let battery = batteryMatches !== null ?
|
||||
parseInt(batteryMatches[0]) :
|
||||
-1;
|
||||
|
||||
// Don't set to zero when in sleep mode
|
||||
if (battery === 0 && RazerBat.value > 10) {
|
||||
battery = RazerBat.value;
|
||||
}
|
||||
|
||||
return battery;
|
||||
},
|
||||
],
|
||||
const RazerBat = Variable({
|
||||
battery: 0,
|
||||
charging: false,
|
||||
sleeping: false,
|
||||
disconnected: true,
|
||||
});
|
||||
|
||||
|
||||
const fetchInfo = () => {
|
||||
execAsync([
|
||||
'bash',
|
||||
'-c',
|
||||
"polychromatic-cli -n 'Razer Naga Pro (Wired)' -k" +
|
||||
' || ' +
|
||||
"polychromatic-cli -n 'Razer Naga Pro (Wireless)' -k",
|
||||
|
||||
]).then((out) => {
|
||||
const batteryMatches = out.split('\n')
|
||||
.filter((i) => i.includes('Battery'))[0]
|
||||
.match(/[0-9]+/);
|
||||
|
||||
let sleeping = false;
|
||||
let battery = batteryMatches !== null ?
|
||||
parseInt(batteryMatches[0]) :
|
||||
0;
|
||||
|
||||
// Don't set to zero when in sleep mode
|
||||
if (battery === 0 && RazerBat.value.battery > 10) {
|
||||
battery = RazerBat.value.battery;
|
||||
sleeping = true;
|
||||
}
|
||||
|
||||
// If 'Wireless' isn't in the logs it means the cmd found 'Wired'
|
||||
const charging = !out.includes('Wireless');
|
||||
|
||||
RazerBat.value = {
|
||||
battery,
|
||||
charging,
|
||||
sleeping,
|
||||
disconnected: false,
|
||||
};
|
||||
}).catch(() => {
|
||||
RazerBat.value.disconnected = true;
|
||||
});
|
||||
};
|
||||
|
||||
interval(RAZER_POLL, fetchInfo);
|
||||
|
||||
// TODO: add charging indicator
|
||||
export default () => Box({
|
||||
class_name: 'razer',
|
||||
children: [
|
||||
Icon({
|
||||
hpack: 'start',
|
||||
icon: RazerBat.bind().transform((v) => {
|
||||
return v > -1 ?
|
||||
'mouse-razer-symbolic' :
|
||||
'content-loading-symbolic';
|
||||
return v.disconnected ?
|
||||
'content-loading-symbolic' :
|
||||
'mouse-razer-symbolic';
|
||||
}),
|
||||
setup: (self) => {
|
||||
self.hook(RazerBat, () => {
|
||||
const v = RazerBat.value;
|
||||
|
||||
self.setCss(
|
||||
v.disconnected ?
|
||||
'margin-right: -5px;' :
|
||||
'',
|
||||
);
|
||||
|
||||
self.toggleClassName(
|
||||
'high',
|
||||
RazerBat.value > 66,
|
||||
v.battery > 66,
|
||||
);
|
||||
self.toggleClassName(
|
||||
'medium',
|
||||
RazerBat.value > LOW_BATT && RazerBat.value <= 66,
|
||||
v.battery > LOW_BATT && v.battery <= 66,
|
||||
);
|
||||
self.toggleClassName(
|
||||
'low',
|
||||
RazerBat.value <= LOW_BATT,
|
||||
v.battery <= LOW_BATT,
|
||||
);
|
||||
});
|
||||
},
|
||||
|
@ -66,7 +93,12 @@ export default () => Box({
|
|||
Label({
|
||||
vpack: 'center',
|
||||
label: RazerBat.bind().transform((v) => {
|
||||
return v !== -1 ? `${v}%` : '';
|
||||
if (!v.disconnected) {
|
||||
// TODO: find better way to indicate charging
|
||||
return v.battery + (v.charging ? '' : '%');
|
||||
}
|
||||
|
||||
return '';
|
||||
}),
|
||||
}),
|
||||
],
|
||||
|
|
Loading…
Reference in a new issue