- start on 'favourites' visual design. service listbox now configurable (in complex...
[enigma2.git] / lib / python / Components / ServicePosition.py
1 from PerServiceDisplay import *
2 from enigma import eTimer
3
4
5 from enigma import pNavigation, iSeekableServicePtr
6
7 class ServicePosition(PerServiceDisplay):
8         TYPE_LENGTH = 0,
9         TYPE_POSITION = 1,
10         TYPE_REMAINING = 2
11         
12         def __init__(self, navcore, type):
13                 self.updateTimer = eTimer()
14                 self.updateTimer.timeout.get().append(self.update)
15                 PerServiceDisplay.__init__(self, navcore,
16                         {
17                                 pNavigation.evNewService: self.newService,
18                                 pNavigation.evStopService: self.stopEvent
19                         })
20                 self.type = type
21 #               self.setType(type)
22
23         def newService(self):
24                 self.setType(self.type)
25         
26         def setType(self, type):
27                 self.type = type
28                 
29                 seek = iSeekableServicePtr()
30                 service = self.navcore.getCurrentService()
31                 
32                 self.updateTimer.stop()
33                 self.available = 0
34                 
35                 if service != None:
36                         if not service.seek(seek):
37                                 if self.type != self.TYPE_LENGTH:
38                                         self.updateTimer.start(500)
39                                 
40                                 self.length = self.get(self.TYPE_LENGTH)
41                                 self.available = 1
42
43                 self.update()
44         
45         def get(self, what):
46                 seek = iSeekableServicePtr()
47                 service = self.navcore.getCurrentService()
48                 
49                 if service != None:
50                         if not service.seek(seek):
51                                 if what == self.TYPE_LENGTH:
52                                         r = seek.getLength()
53                                 elif what == self.TYPE_POSITION:
54                                         r = seek.getPlayPosition()
55                                 if not r[0]:
56                                         return r[1] / 90000
57                 
58                 return -1
59         
60         def update(self):
61                 if self.available:
62                         if self.type == self.TYPE_LENGTH:
63                                 l = self.length
64                         elif self.type == self.TYPE_POSITION:
65                                 l = self.get(self.TYPE_POSITION)
66                         elif self.type == self.TYPE_REMAINING:
67                                 l = self.length - self.get(self.TYPE_POSITION)
68                         
69                         self.setText("%d:%02d" % (l/60, l%60))
70                 else:
71                         self.setText("-:--")
72         
73         def stopEvent(self):
74                 self.updateTimer.stop()
75                 self.setText("");