handle additional arguments
[enigma2.git] / lib / python / Components / Converter / EventTime.py
1 from Converter import Converter
2 from Poll import Poll
3 from time import time
4
5 class EventTime(Poll, Converter, object):
6         STARTTIME = 0
7         ENDTIME = 1
8         REMAINING = 2
9         PROGRESS = 3
10         DURATION = 4
11
12         def __init__(self, type, *args, **kwargs):
13                 Converter.__init__(self)
14                 Poll.__init__(self)
15                 if type == "EndTime":
16                         self.type = self.ENDTIME
17                 elif type == "Remaining":
18                         self.type = self.REMAINING
19                         self.poll_interval = 60*1000
20                         self.poll_enabled = True
21                 elif type == "StartTime":
22                         self.type = self.STARTTIME
23                 elif type == "Duration":
24                         self.type = self.DURATION
25                 elif type == "Progress":
26                         self.type = self.PROGRESS
27                         self.poll_interval = 30*1000
28                         self.poll_enabled = True
29                 else:
30                         raise str("'%s' is not <StartTime|EndTime|Remaining|Duration> for EventTime converter" % type)
31
32         def getTime(self):
33                 assert self.type != self.PROGRESS
34
35                 event = self.source.event
36                 if event is None:
37                         return None
38                         
39                 if self.type == self.STARTTIME:
40                         return event.getBeginTime()
41                 elif self.type == self.ENDTIME:
42                         return event.getBeginTime() + event.getDuration()
43                 elif self.type == self.DURATION:
44                         return event.getDuration()
45                 elif self.type == self.REMAINING:
46                         now = int(time())
47                         start_time = event.getBeginTime()
48                         duration = event.getDuration()
49                         end_time = start_time + duration
50                         if start_time <= now <= end_time:
51                                 return (duration, end_time - now)
52                         else:
53                                 return (duration, None)
54
55         def getValue(self):
56                 assert self.type == self.PROGRESS
57
58                 event = self.source.event
59                 if event is None:
60                         return None
61
62                 now = int(time())
63                 start_time = event.getBeginTime()
64                 duration = event.getDuration()
65                 if start_time <= now <= (start_time + duration) and duration > 0:
66                         return (now - start_time) * 1000 / duration
67                 else:
68                         return None
69
70         time = property(getTime)
71         value = property(getValue)
72         range = 1000