update ov debian/overrides
[grml-etc.git] / etc / skel / .wmi / szs2.1 / battery.py
1 import szstoolbox
2
3 ready = False
4 def init():
5         """ globalizes and initializes the variables """
6         global ready
7         ready = False
8
9         global batanimload, batstateF
10         global lpart1, lpart2, l
11         global msg, xtra, cfg
12         global lastfull, acc, lvar, tvar, batlabel,state
13         state = ''
14         
15         msg = szstoolbox.MSG()
16         xtra = szstoolbox.XTRA()
17         cfg = szstoolbox.CFG('battery')
18         cfgG = szstoolbox.CFG('global')
19
20         batstateF = cfg.read('batstate').strip()
21         batinfoF = cfg.read('batinfo').strip()
22         batanimload = int(cfg.read('animbatload').strip())
23         batlabel = cfg.read('label').strip()
24         lvar = int(cfg.read('lvar').strip())
25         tvar = int(cfg.read('tvar').strip())
26         acc = int(cfgG.read('accuracy').strip())
27         batstateF = open(batstateF,'r')
28         batinfoF = open(batinfoF,'r')
29         state = None
30
31         infoLn = batinfoF.readlines()
32         for line in infoLn:
33                 line = line.split(':')
34                 part1 = line[0].strip()
35                 part2 = line[1].strip()
36                 if part1 == 'last full capacity':
37                         lastfull = part2[:part2.find(' ')]
38
39         ready = True
40
41
42
43 def main():
44         """ main function... returns a list with a string like
45             "/65\" or "\BAT LOW/" and an integer like 65 that
46             shows procentual state of your battery """
47
48         global state
49
50         if not ready:
51                 init()
52                 return ['init','']
53
54         if batanimload > 0:
55                 z = xtra.countadd(5)
56                 if z >= 95:
57                         z = 0
58         else:
59                 z = 0
60
61         stateLn = batstateF.readlines()
62         batstateF.seek(0)
63         remain = '0'
64
65         for line in stateLn:
66                 line = line.split(':')
67                 part1 = line[0].strip()
68                 part2 = line[1].strip()
69                 if part1 == 'present' and part2 == 'no':
70                         msg.debug('Battery not present',2)
71                         state = None
72                         return ['']
73                 elif part1 == 'charging state' and part2 == 'discharging':
74                         if state <> '-':
75                                 msg.debug('Battery is discharging',3)
76                                 state = '-'
77                 elif part1 == 'charging state' and part2 == 'charging':
78                         if state <> '+':
79                                 msg.debug('Battery is charging',3)
80                                 state = '+'
81                 elif part1 == 'charging state' and part2 == 'unknown':
82                         if state <> '#':
83                                 msg.debug('Battery seems full (charging state is unknown)',3)
84                                 state = '#'
85                 elif part1 == 'remaining capacity':
86                         remainold = part2
87                         remain = part2[:part2.find(' ')]
88                         remain = float(remain)*100/float(lastfull)
89                         remain = str(round(remain,acc))
90                         remain = remain[:remain.find('.')+3]+'%'
91         
92         if lvar in (1,2,3):
93                 if state == '#':
94                         ls = ' (full)'
95                 else:
96                         if lvar == 2:
97                                 ls = ' ('+remainold+str(state)+')'
98                         if lvar == 3:
99                                 ls = ' ('+remainold+'/'+remain+')'
100                         else:
101                                 ls = ' ('+remain+str(state)+')'
102         else:
103                 ls = ''
104                 
105         if tvar in (1,2,3):
106                 if state == '#':
107                         ts = ''
108                 else:
109                         if tvar == 2:
110                                 ts = remainold
111                         if tvar == 3:
112                                 ts = remainold+'|'+remain
113                         else:
114                                 ts = remain
115         else:
116                 ts = ''
117                 
118         if batanimload > 0:
119                 bar = '!'+remain+'%'+batlabel+ls
120         else:
121                 bar = '!'+z+'%'+batlabel+ls
122         
123         if state == '+' and tvar >= 0:
124                 return ['/'+ts+'\\',bar]
125         elif state == '-' and tvar >= 0:
126                 return ['\\'+ts+'/',bar]
127         elif state == '#' or tvar < 0:
128                 return ['',bar]
129         elif state == None:
130                 return ['']
131         else:
132                 print 'Undefined state: "'+str(state)+'"'
133                 return ['???','???']
134         
135
136
137 if __name__ == '__main__':
138         """ helps to debug the script """
139
140         from sys import argv
141         from time import sleep
142
143
144         if 'loop' in argv:
145                 while '' == '':
146                         x = main()
147                         print x
148                         print '----------------------'
149                         print 'Length:\t'+str(len(x))
150                         print 'Text:\t"'+x[0]+'"'
151                         if len(x) > 1:
152                                 print 'Bars:\t"'+x[1]+'"'
153                         print '----------------------'
154                         sleep(1)
155         else:           
156                 x = main()      
157                 print '----------------------' 
158                 print 'Length:\t'+str(len(x))
159                 print 'Text:\t"'+x[0]+'"'
160                 print 'Bars:\t"'+x[1]+'"'
161                 print '----------------------'