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
|
import time
import codecs
from timer import *
import xml.dom.minidom
import NavigationInstance
from Tools.XMLTools import elementsWithTag
from ServiceReference import ServiceReference
class RecordTimerEntry(TimerEntry):
def __init__(self, begin, end, serviceref, epg):
TimerEntry.__init__(self, int(begin), int(end))
assert isinstance(serviceref, ServiceReference)
self.service_ref = serviceref
print self.service_ref.getServiceName()
self.epg_data = epg
self.timer = None
self.record_service = None
# build filename from epg
# pff das geht noch nicht...
# if epg == None:
# self.Filename = "recording.ts"
# else:
# self.Filename = "record_" + str(epg.m_event_name) + ".ts"
#
# print "------------ record filename: %s" % (self.Filename)
def activate(self, event):
if event == self.EventPrepare:
self.record_service = NavigationInstance.instance.recordService(self.service_ref)
if self.record_service == None:
print "timer record failed."
else:
self.record_service.prepare()
elif self.record_service == None:
if event != self.EventAbort:
print "timer record start failed, can't finish recording."
elif event == self.EventStart:
self.record_service.start()
print "timer started!"
elif event == self.EventEnd or event == self.EventAbort:
self.record_service.stop()
self.record_service = None
print "Timer successfully ended"
def createTimer(xml):
begin = int(xml.getAttribute("begin"))
end = int(xml.getAttribute("end"))
serviceref = ServiceReference(str(xml.getAttribute("serviceref")))
epgdata = xml.getAttribute("epgdata")
#filename = xml.getAttribute("filename")
return RecordTimerEntry(begin, end, serviceref, epgdata)
class RecordTimer(Timer):
def __init__(self):
Timer.__init__(self)
self.Filename = "timers.xml"
# try:
self.loadTimer()
# except:
# print "unable to load timers from file!"
def loadTimer(self):
# TODO: PATH!
doc = xml.dom.minidom.parse(self.Filename)
root = doc.childNodes[0]
for timer in elementsWithTag(root.childNodes, "timer"):
self.record(createTimer(timer))
def saveTimer(self):
doc = xml.dom.minidom.Document()
root_element = doc.createElement('timers')
doc.appendChild(root_element)
root_element.appendChild(doc.createTextNode("\n"))
for timer in self.timer_list + self.processed_timers:
t = doc.createTextNode("\t")
root_element.appendChild(t)
t = doc.createElement('timer')
t.setAttribute("begin", str(timer.begin))
t.setAttribute("end", str(timer.end))
t.setAttribute("serviceref", str(timer.service_ref))
#t.setAttribute("epgdata", timer.)
root_element.appendChild(t)
t = doc.createTextNode("\n")
root_element.appendChild(t)
file = open(self.Filename, "w")
doc.writexml(codecs.getwriter('UTF-8')(file))
file.close()
def record(self, entry):
entry.Timer = self
self.addTimerEntry(entry)
def removeEntry(self, entry):
if entry.state == TimerEntry.StateRunning:
entry.End = time.time()
print "aborting timer"
elif entry.state != TimerEntry.StateEnded:
entry.activate(TimerEntry.EventAbort)
self.timer_list.remove(entry)
print "timer did not yet start - removing"
else:
print "timer did already end - doing nothing."
self.calcNextActivation()
def shutdown(self):
self.saveTimer()
|