mirror of
https://github.com/morgan9e/gnome-shell-extension-freon
synced 2026-04-14 00:14:14 +09:00
smartctlUtil: do not reference error when not failing, do not return empty data if none (#221)
The `smartctl -j --scan` command may not fail and list drives properly while `smartctl -j --info /dev/sda` may fail because of missing permissions. This error was making the extension on fail entirely when smartctl was selected as a disk temperature sensor provider while the user does not have enogh permission to do so. Also makes sure smartctl can be properly called if path contains a whitespace.
This commit is contained in:
@@ -4,7 +4,7 @@ const Me = imports.misc.extensionUtils.getCurrentExtension();
|
||||
const ByteArray = imports.byteArray;
|
||||
function getSmartData (argv){
|
||||
const smartctl = GLib.find_program_in_path('smartctl')
|
||||
return JSON.parse(ByteArray.toString( GLib.spawn_command_line_sync(`${smartctl} ${argv} -j`)[1] ))
|
||||
return JSON.parse(ByteArray.toString( GLib.spawn_command_line_sync(`'${smartctl}' ${argv} -j`)[1] ))
|
||||
}
|
||||
|
||||
var smartctlUtil = class {
|
||||
@@ -12,10 +12,9 @@ var smartctlUtil = class {
|
||||
this._smartDevices = [];
|
||||
try {
|
||||
this._smartDevices = getSmartData("--scan")["devices"]
|
||||
global.log('[FREON] test devices: ' + e);
|
||||
} catch (e) {
|
||||
global.log('[FREON] Unable to find smart devices: ' + e);
|
||||
}
|
||||
}
|
||||
this._updated = true;
|
||||
}
|
||||
|
||||
@@ -33,11 +32,19 @@ var smartctlUtil = class {
|
||||
|
||||
get temp() {
|
||||
return this._smartDevices.map(device => {
|
||||
const info = getSmartData(`--info ${device["name"]}`);
|
||||
if (info["smartctl"]["exit_status"] != 0)
|
||||
return null;
|
||||
|
||||
const attributes = getSmartData(`--attributes ${device["name"]}`);
|
||||
if (attributes["smartctl"]["exit_status"] != 0)
|
||||
return null;
|
||||
|
||||
return {
|
||||
label: getSmartData(`--info ${device["name"]}`)["model_name"],
|
||||
temp: parseFloat(getSmartData(`--attributes ${device["name"]}`).temperature.current)
|
||||
label: info["model_name"],
|
||||
temp: parseFloat(attributes.temperature.current)
|
||||
}
|
||||
})
|
||||
}).filter(entry => entry != null);
|
||||
}
|
||||
|
||||
destroy(callback) {
|
||||
|
||||
Reference in New Issue
Block a user