public
Description: A desktop widget that display informations about CPU speed, temperature and so on through OSD
Homepage:
Clone URL: git://github.com/kratorius/osdwidget.git
osdwidget / widget.py
100644 130 lines (97 sloc) 3.319 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import re
 
from base import BaseWidget
from settings import *
 
class BatteryWidget(BaseWidget):
    present_re = re.compile("^present:[ ]+no$")
    full_capacity_re = re.compile("^last full capacity:[ ]+(?P<capacity>[\d]+) mWh$")
    remaining_capacity_re = re.compile("^remaining capacity:[ ]+(?P<remaining>[\d]+) mWh$")
 
    def __init__(self):
        super(BatteryWidget, self).__init__()
        self.set_horizontal_offset(230)
 
    def get_msg(self):
        level = self.get_battery_level()
        
        if not level:
            return ("Battery Not Found", "red")
 
        if level > 50:
            color = "green"
        elif level > 20:
            color = "yellow"
        else:
            color = "red"
 
        return ("Battery level: %d%%" % level, color)
 
    def get_battery_level(self):
        """
Returns the % of the battery level or None if the battery
is not present
"""
        batt_inserted = True
    
        batt_capacity = 0
        f = open(BAT_INFO, "r")
        for line in f.readlines():
            if self.present_re.match(line.strip()):
                batt_inserted = False
                break
            else:
                mo = self.full_capacity_re.match(line.strip())
                if not mo:
                    continue
    
                batt_capacity = mo.group("capacity")
        f.close()
    
        if not batt_inserted:
            return None
    
        batt_remaining = 0
        f = open(BAT_STATE, "r")
        for line in f.readlines():
            mo = self.remaining_capacity_re.match(line.strip())
            if not mo:
                continue
    
            batt_remaining = mo.group("remaining")
        f.close()
    
        return (int(batt_remaining) * 100) / int(batt_capacity)
 
 
class TemperatureWidget(BaseWidget):
    temp_re = re.compile("^temperature:[ ]+(?P<temperature>[\d]+) C$")
 
    def __init__(self):
        super(TemperatureWidget, self).__init__()
        self.set_horizontal_offset(120)
 
    def get_msg(self):
        temp = self.get_temperature_level()
 
        if temp > 60:
            color = "red"
        elif temp > 50:
            color = "yellow"
        else:
            color = "green"
 
        return ("Temperature %d C" % temp, color)
 
    def get_temperature_level(self):
        """
Returns the current temperature in Celsius
"""
        temp = 0
 
        f = open(TEMPERATURE, "r")
        line = f.readline().strip()
        f.close()
 
        mo = self.temp_re.match(line)
 
        if mo:
            temp = int(mo.group("temperature"))
    
        return temp
    
 
class CPUWidget(BaseWidget):
    cpu_re = re.compile("^cpu MHz[\t ]+: (?P<cpu_speed>[\d]+)[.\d]*$")
 
    def __init__(self):
        super(CPUWidget, self).__init__()
        self.set_horizontal_offset(5)
 
    def get_msg(self):
        level = self.get_cpu_level()
        return ("CPU Speed: %dMHz" % level, "yellow")
 
    def get_cpu_level(self):
        """
Returns the CPU actual speed
"""
    
        speed = 0
        f = open(CPUSPEED, "r")
        for line in f.readlines():
            mo = self.cpu_re.match(line.strip())
            if mo:
                speed = mo.group("cpu_speed")
                break
        f.close()
    
        return int(speed)