Files
gnome-shell-extension-freon/freon@UshakovVasilii_Github.yahoo.com/liquidctlUtil.js
Manuel Selinger 4465c14786 Migrate Plugin to Gnome 45 Shell (#267)
* Migrate Plugin to Gnome 45 Shell

* Use TextDecoder instead of ByteArray or toString()

* use the Glib timeout functions

* remove unused imports
2023-10-10 15:06:04 +03:00

90 lines
2.8 KiB
JavaScript

// Provide sensor data from liquidctl.
import GLib from 'gi://GLib';
import CommandLineUtil from './commandLineUtil.js';
export default class LiquidctlUtil extends CommandLineUtil {
constructor() {
super();
const path = GLib.find_program_in_path('liquidctl');
this._argv = path ? [path, 'status', '--json'] : null;
}
// Avoid processing the data more than once.
execute(callback) {
super.execute(() => {
try {
const output = this._output.join('');
if (output == '')
throw 'no data (liquidctl probably exited with an error)';
let temp = [];
let rpm = [];
let volt = [];
let dest = null;
let type = null;
for (const device of JSON.parse(output)) {
// use a shorter device name to reduce visual noise:
// - omit manufacturer name
// - omit details in parenthesis
const shortDevice = device.description.replace(/(^.+? )|( \(.+)/g, '');
for (const item of device.status) {
switch (item.unit) {
case '°C':
dest = temp;
type = 'temp';
break;
case 'rpm':
dest = rpm;
type = 'rpm';
break;
case 'V':
dest = volt;
type = 'volt';
break;
default:
continue;
}
// use a shorter sensor name to reduce visual noise:
// - omit temperature|speed|voltage suffix
const shortKey = item.key.replace(/ (temperature|speed|voltage)/, '');
const feature = {
label: shortDevice + ' ' + shortKey,
[type]: item.value,
};
dest.push(feature);
}
}
this._temp = temp;
this._rpm = rpm;
this._volt = volt;
callback();
} catch (e) {
this._temp = null;
this._rpm = null;
this._volt = null;
global.log('failed to process data from liquidctl: ' + e.toString());
}
});
}
get temp() {
return this._temp || [];
}
get rpm() {
return this._rpm || [];
}
get volt() {
return this._volt || [];
}
};