optimized the flow

This commit is contained in:
Dipesh Acharya
2011-12-03 14:03:48 +05:45
parent 788c1e399d
commit 6508cee0e1

View File

@@ -18,93 +18,110 @@ CpuTemperature.prototype = {
_init: function(){ _init: function(){
PanelMenu.SystemStatusButton.prototype._init.call(this, 'temperature'); PanelMenu.SystemStatusButton.prototype._init.call(this, 'temperature');
this.statusLabel = new St.Label({ text: '-' });
this.statusLabel = new St.Label({ text: "--", style_class: "temperature-label" });
// destroy all previously created children, and add our statusLabel // destroy all previously created children, and add our statusLabel
this.actor.get_children().forEach(function(c) { c.destroy() }); this.actor.get_children().forEach(function(c) { c.destroy() });
this.actor.add_actor(this.statusLabel); this.actor.add_actor(this.statusLabel);
this._update_temp(); this.sensorsPath = this._detectSensors();
debug(this.sensorsPath);
if(this.sensorsPath){
this.title='Error';
this.content='Run sensors-detect as root. If it doesn\'t help, click here to report!';
this.command=["xdg-open", "http://github.com/xtranophilist/gnome-shell-extension-cpu-temperature/issues/"];
}
else{
this.title='Warning';
this.content='Please install lm_sensors. If it doesn\'t help, click here to report!';
this.command=["xdg-open", "http://github.com/xtranophilist/gnome-shell-extension-cpu-temperature/issues/"];
}
this._update_temp();
//update every 15 seconds //update every 15 seconds
GLib.timeout_add(0, 15000, Lang.bind(this, function () { GLib.timeout_add(0, 15000, Lang.bind(this, function () {
this._update_temp(); this._update_temp();
return true; return true;
})); }));
}, },
_detectSensors: function(){
//detect if sensors is installed
let ret = GLib.spawn_command_line_sync("which --skip-alias sensors");
if ( (ret[0]) && (ret[3] == 0) ) {//if yes
return ret[1].toString().split("\n", 1)[0];//find the path of the sensors
}
return null;
},
_update_temp: function() { _update_temp: function() {
let title='Error'; debug("Into update_temp");
let content='Click here to report!';
let command=["firefox", "http://github.com/xtranophilist/gnome-shell-extension-cpu-temperature/issues/"]; let temp=null;
let foundTemperature=false; if (this.sensorsPath){
let cpuTemperatureInfo = ['/sys/devices/platform/coretemp.0/temp1_input', let sensors_output = GLib.spawn_command_line_sync(this.sensorsPath);//get the output of the sensors command
'/sys/bus/acpi/devices/LNXTHERM\:00/thermal_zone/temp', if(sensors_output[0]) temp = this._findTemperatureFromSensorsOutput(sensors_output[1].toString());//get temperature from sensors
'/sys/devices/virtual/thermal/thermal_zone0/temp', }
//old kernels with proc fs
'/proc/acpi/thermal_zone/THM0/temperature', //if we don't have the temperature yet
'/proc/acpi/thermal_zone/THRM/temperature', if(!temp)
'/proc/acpi/thermal_zone/THR0/temperature', temp = this._findTemperatureFromFiles();
'/proc/acpi/thermal_zone/TZ0/temperature',
'/sys/bus/acpi/drivers/ATK0110/ATK0110:00/hwmon/hwmon0/temp1_input', if (temp){
//hwmon for new 2.6.39, 3.0 linux kernels this.title=this._getTitle(temp);
'/sys/class/hwmon/hwmon0/temp1_input', this.content=this._getContent(temp);
//Debian Sid/Experimental on AMD-64 this.command=["echo"];
'/sys/class/hwmon/hwmon0/device/temp1_input']; }
for (let i=0;i<cpuTemperatureInfo.length;i++){
if(GLib.file_test(cpuTemperatureInfo[i],1<<4)){
let temperature = GLib.file_get_contents(cpuTemperatureInfo[i]);
if(temperature[0]) {
let c = parseInt(temperature[1])/1000;
title=this._getTitle(c);
content=this._getContent(c);
command=["echo"];
foundTemperature = true;
}
if(foundTemperature) break;
}
}
if (!foundTemperature) {
let foundSensor = 0;
let sensorInfo = ['/usr/bin/sensors',
'/bin/sensors'];
for (let i=0;i<sensorInfo.length;i++){
if(GLib.file_test(sensorInfo[i],1<<4)) foundSensor=sensorInfo[i];
if (foundSensor) break;
}
if(foundSensor) {
let sensors = GLib.spawn_command_line_sync(foundSensor);
if(sensors[0]){
let temp=this._findTemperatureFromSensorsOutput(sensors[1]);
title=this._getTitle(temp);
content=this._getContent(temp);
command=["echo"];
}
}
else {
title="Warning";
content="Please install lm-sensors";
command=["echo"];
}
}
this.statusLabel.set_text(title); this.statusLabel.set_text(this.title);
this.menu.box.get_children().forEach(function(c) { c.destroy() }); this.menu.box.get_children().forEach(function(c) { c.destroy() });
let section = new PopupMenu.PopupMenuSection("Temperature"); let section = new PopupMenu.PopupMenuSection("Temperature");
let item = new PopupMenu.PopupMenuItem(""); let item = new PopupMenu.PopupMenuItem("");
item.addActor(new St.Label({ text:content, style_class: "sm-label"})); item.addActor(new St.Label({ text:this.content, style_class: "sm-label"}));
item.connect('activate', function() { let command=this.command;
item.connect('activate',function() {
Util.spawn(command); Util.spawn(command);
}); });
section.addMenuItem(item); section.addMenuItem(item);
this.menu.addMenuItem(section); this.menu.addMenuItem(section);
}, },
_findTemperatureFromSensorsOutput: function(text){ _findTemperatureFromFiles: function(){
let senses_lines=text.split("\n"); debug("Into findTemperatureFromFiles");
let cpuTemperatureInfo = ['/sys/devices/platform/coretemp.0/temp1_inputa',
'/sys/bus/acpi/devices/LNXTHERM\:00/thermal_zone/tempa',
'/sys/devices/virtual/thermal/thermal_zone0/tempa',
//old kernels with proc fs
'/proc/acpi/thermal_zone/THM0/temperaturea',
'/proc/acpi/thermal_zone/THRM/temperaturea',
'/proc/acpi/thermal_zone/THR0/temperaturea',
'/proc/acpi/thermal_zone/TZ0/temperaturea',
'/sys/bus/acpi/drivers/ATK0110/ATK0110:00/hwmon/hwmon0/temp1_inputa',
//hwmon for new 2.6.39, 3.0 linux kernels
'/sys/class/hwmon/hwmon0/temp1_inputa',
//Debian Sid/Experimental on AMD-64
'/sys/class/hwmon/hwmon0/device/temp1_inputa'];
for (let i=0;i<cpuTemperatureInfo.length;i++){
if(GLib.file_test(cpuTemperatureInfo[i],1<<4)){
let temperature = GLib.file_get_contents(cpuTemperatureInfo[i]);
if(temperature[0]) {
return parseInt(temperature[1])/1000;
}
}
}
return false;
},
_findTemperatureFromSensorsOutput: function(txt){
debug("Into findTemperatureFromSensors");
let senses_lines=txt.split("\n");
let line = ''; let line = '';
let s=0; let s=0;
let n=0; let n=0;
@@ -196,7 +213,8 @@ CpuTemperature.prototype = {
//for debugging //for debugging
function debug(a){ function debug(a){
Util.spawn(['echo',a]); global.log(a);
// Util.spawn(['echo',a]);
} }
function init(extensionMeta) { function init(extensionMeta) {