1 from Screen import Screen
2 import ChannelSelection
3 from ServiceReference import ServiceReference
4 from Components.config import ConfigSelection, ConfigText, ConfigSubList, ConfigSubsection, ConfigDateTime, ConfigClock, ConfigYesNo, getConfigListEntry
5 from Components.ActionMap import ActionMap, NumberActionMap
6 from Components.ConfigList import ConfigList, ConfigListScreen
7 from Components.MenuList import MenuList
8 from Components.Button import Button
9 from Components.NimManager import nimmanager
10 from Components.Label import Label
11 from Components.Pixmap import Pixmap
12 from Screens.MessageBox import MessageBox
13 from Screens.ChoiceBox import ChoiceBox
14 from RecordTimer import AFTEREVENT
15 from enigma import eEPGCache
19 class TimerEntry(Screen, ConfigListScreen):
20 def __init__(self, session, timer):
21 Screen.__init__(self, session)
24 self.entryStartDate = None
25 self.entryEndDate = None
26 self.entryService = None
28 self["oktext"] = Label(_("OK"))
29 self["canceltext"] = Label(_("Cancel"))
31 self["cancel"] = Pixmap()
35 self["actions"] = NumberActionMap(["SetupActions"],
39 "cancel": self.keyCancel,
43 ConfigListScreen.__init__(self, self.list, session = session)
44 self.createSetup("config")
46 def createConfig(self):
47 justplay = self.timer.justplay
49 afterevent = { AFTEREVENT.NONE: "nothing", AFTEREVENT.DEEPSTANDBY: "deepstandby", AFTEREVENT.STANDBY: "standby"}[self.timer.afterEvent]
51 weekday_table = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
53 # calculate default values
58 if self.timer.repeated: # repeated
60 if (self.timer.repeated == 31): # Mon-Fri
62 elif (self.timer.repeated == 127): # daily
65 flags = self.timer.repeated
69 if flags == 1: # weekly
70 print "Set to weekday " + str(x)
72 if flags & 1 == 1: # set user defined flags
83 weekday = (int(time.strftime("%w", time.localtime(self.timer.begin))) - 1) % 7
86 self.timerentry_justplay = ConfigSelection(choices = [("zap", _("zap")), ("record", _("record"))], default = {0: "record", 1: "zap"}[justplay])
87 self.timerentry_afterevent = ConfigSelection(choices = [("nothing", _("do nothing")), ("standby", _("go to standby")), ("deepstandby", _("go to deep standby"))], default = afterevent)
88 self.timerentry_type = ConfigSelection(choices = [("once",_("once")), ("repeated", _("repeated"))], default = type)
89 self.timerentry_name = ConfigText(default = self.timer.name, fixed_size = False)
90 self.timerentry_description = ConfigText(default = self.timer.description, fixed_size = False)
92 self.timerentry_repeated = ConfigSelection(default = repeated, choices = [("daily", _("daily")), ("weekly", _("weekly")), ("weekdays", _("Mon-Fri")), ("user", _("user defined"))])
94 self.timerentry_startdate = ConfigDateTime(default = self.timer.begin, formatstring = _("%d.%B %Y"), increment = 86400)
95 self.timerentry_starttime = ConfigClock(default = self.timer.begin)
97 self.timerentry_enddate = ConfigDateTime(default = self.timer.end, formatstring = _("%d.%B %Y"), increment = 86400)
98 self.timerentry_endtime = ConfigClock(default = self.timer.end)
100 self.timerentry_repeatedbegindate = ConfigDateTime(default = self.timer.repeatedbegindate, formatstring = _("%d.%B %Y"), increment = 86400)
102 self.timerentry_weekday = ConfigSelection(default = weekday_table[weekday], choices = [("mon",_("Monday")), ("tue", _("Tuesday")), ("wed",_("Wednesday")), ("thu", _("Thursday")), ("fri", _("Friday")), ("sat", _("Saturday")), ("sun", _("Sunday"))])
104 self.timerentry_day = ConfigSubList()
106 self.timerentry_day.append(ConfigYesNo(default = day[x]))
108 # FIXME some service-chooser needed here
110 try: # no current service available?
111 servicename = str(self.timer.service_ref.getServiceName())
114 self.timerentry_service = ConfigSelection([servicename])
116 self.timerentry_startdate.addNotifier(self.checkDate)
117 self.timerentry_enddate.addNotifier(self.checkDate)
119 def checkDate(self, configElement):
120 if configElement is self.timerentry_startdate:
121 if self.timerentry_enddate.value < self.timerentry_startdate.value:
122 self.timerentry_enddate.value = self.timerentry_startdate.value
123 self["config"].invalidate(self.entryEndDate)
124 if configElement is self.timerentry_enddate:
125 if (self.timerentry_enddate.value < self.timerentry_startdate.value):
126 self.timerentry_startdate.value = self.timerentry_enddate.value
127 self["config"].invalidate(self.entryStartDate)
129 def createSetup(self, widget):
131 self.list.append(getConfigListEntry(_("Name"), self.timerentry_name))
132 self.list.append(getConfigListEntry(_("Description"), self.timerentry_description))
133 self.timerJustplayEntry = getConfigListEntry(_("Timer Type"), self.timerentry_justplay)
134 self.list.append(self.timerJustplayEntry)
135 self.timerTypeEntry = getConfigListEntry(_("Repeat Type"), self.timerentry_type)
136 self.list.append(self.timerTypeEntry)
138 if self.timerentry_type.value == "once":
139 self.frequencyEntry = None
141 self.frequencyEntry = getConfigListEntry(_("Frequency"), self.timerentry_repeated)
142 self.list.append(self.frequencyEntry)
143 self.repeatedbegindateEntry = getConfigListEntry(_("Starting on"), self.timerentry_repeatedbegindate)
144 self.list.append(self.repeatedbegindateEntry)
145 if self.timerentry_repeated.value == "daily":
147 if self.timerentry_repeated.value == "weekdays":
149 if self.timerentry_repeated.value == "weekly":
150 self.list.append(getConfigListEntry(_("Weekday"), self.timerentry_weekday))
152 if self.timerentry_repeated.value == "user":
153 self.list.append(getConfigListEntry(_("Monday"), self.timerentry_day[0]))
154 self.list.append(getConfigListEntry(_("Tuesday"), self.timerentry_day[1]))
155 self.list.append(getConfigListEntry(_("Wednesday"), self.timerentry_day[2]))
156 self.list.append(getConfigListEntry(_("Thursday"), self.timerentry_day[3]))
157 self.list.append(getConfigListEntry(_("Friday"), self.timerentry_day[4]))
158 self.list.append(getConfigListEntry(_("Saturday"), self.timerentry_day[5]))
159 self.list.append(getConfigListEntry(_("Sunday"), self.timerentry_day[6]))
161 #self.list.append(getConfigListEntry("StartDate", self.timerentry_startdate))
162 # self.list.append(getConfigListEntry("Weekday", self.timerentry_weekday))
164 self.entryStartDate = getConfigListEntry(_("Start"), self.timerentry_startdate)
165 if self.timerentry_type.value == "once":
166 self.list.append(self.entryStartDate)
167 self.list.append(getConfigListEntry(" ", self.timerentry_starttime))
169 self.list.append(getConfigListEntry(_("StartTime"), self.timerentry_starttime))
171 self.entryEndDate = getConfigListEntry(_("End"), self.timerentry_enddate)
172 if self.timerentry_type.value == "once":
173 if self.timerentry_justplay.value != "zap":
174 self.list.append(self.entryEndDate)
175 self.list.append(getConfigListEntry(" ", self.timerentry_endtime))
177 if self.timerentry_justplay.value != "zap":
178 self.list.append(getConfigListEntry(_("EndTime"), self.timerentry_endtime))
180 if self.timerentry_justplay.value != "zap":
181 self.list.append(getConfigListEntry(_("After event"), self.timerentry_afterevent))
183 self.channelEntry = getConfigListEntry(_("Channel"), self.timerentry_service)
184 self.list.append(self.channelEntry)
186 self[widget].list = self.list
187 self[widget].l.setList(self.list)
190 print "newConfig", self["config"].getCurrent()
191 if self["config"].getCurrent() == self.timerTypeEntry:
192 self.createSetup("config")
193 if self["config"].getCurrent() == self.timerJustplayEntry:
194 self.createSetup("config")
195 if self["config"].getCurrent() == self.frequencyEntry:
196 self.createSetup("config")
199 if self["config"].getCurrent() is self.channelEntry:
202 ConfigListScreen.keyLeft(self)
206 if self["config"].getCurrent() is self.channelEntry:
209 ConfigListScreen.keyRight(self)
213 if self["config"].getCurrent() == self.channelEntry:
214 self.session.openWithCallback(self.finishedChannelSelection, ChannelSelection.SimpleChannelSelection, _("Select channel to record from"))
218 def finishedChannelSelection(self, *args):
220 self.timer.service_ref = ServiceReference(args[0])
221 self.timerentry_service.setCurrentText(self.timer.service_ref.getServiceName())
222 self["config"].invalidate(self.channelEntry)
224 def getTimestamp(self, date, mytime):
225 d = time.localtime(date)
226 dt = datetime.datetime(d.tm_year, d.tm_mon, d.tm_mday, mytime[0], mytime[1])
227 return int(time.mktime(dt.timetuple()))
229 def getBeginEnd(self):
230 enddate = self.timerentry_enddate.value
231 endtime = self.timerentry_endtime.value
233 startdate = self.timerentry_startdate.value
234 starttime = self.timerentry_starttime.value
236 begin = self.getTimestamp(startdate, starttime)
237 end = self.getTimestamp(enddate, endtime)
239 # because of the dateChecks, startdate can't be < enddate.
240 # however, the endtime can be less than the starttime.
241 # in this case, add 1 day.
247 self.timer.name = self.timerentry_name.value
248 self.timer.description = self.timerentry_description.value
249 self.timer.justplay = self.timerentry_justplay.value == "zap"
250 self.timer.resetRepeated()
251 self.timer.afterEvent = {"nothing": AFTEREVENT.NONE, "deepstandby": AFTEREVENT.DEEPSTANDBY, "standby": AFTEREVENT.STANDBY}[self.timerentry_afterevent.value]
253 if self.timerentry_type.value == "once":
254 self.timer.begin, self.timer.end = self.getBeginEnd()
255 if self.timerentry_type.value == "repeated":
256 self.timer.repeatedbegindate = self.timerentry_repeatedbegindate.value
257 if self.timerentry_repeated.value == "daily":
259 self.timer.setRepeated(x)
261 if self.timerentry_repeated.value == "weekly":
262 self.timer.setRepeated(self.timerentry_weekday.index)
264 if self.timerentry_repeated.value == "weekdays":
266 self.timer.setRepeated(x)
268 if self.timerentry_repeated.value == "user":
270 if self.timerentry_day[x].value:
271 self.timer.setRepeated(x)
273 self.timer.begin = self.getTimestamp(time.time(), self.timerentry_starttime.value)
274 self.timer.end = self.getTimestamp(time.time(), self.timerentry_endtime.value)
276 # when a timer end is set before the start, add 1 day
277 if self.timer.end < self.timer.begin:
278 self.timer.end += 86400
280 if self.timer.eit is not None:
281 event = eEPGCache.getInstance().lookupEventId(self.timer.service_ref.ref, self.timer.eit)
282 if event is not None:
283 n = event.getNumOfLinkageServices()
286 ref = self.session.nav.getCurrentlyPlayingServiceReference()
287 parent = self.timer.service_ref.ref
290 i = event.getLinkageService(parent, x)
291 if i.toString() == ref.toString():
293 tlist.append((i.getName(), i))
294 self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice to record..."), list = tlist, selection = selection)
296 self.close((True, self.timer))
298 def subserviceSelected(self, service):
299 if not service is None:
300 self.timer.service_ref = ServiceReference(service[1])
301 self.close((True, self.timer))
306 class TimerLog(Screen):
307 def __init__(self, session, timer):
308 Screen.__init__(self, session)
310 self.log_entries = self.timer.log_entries[:]
314 self["loglist"] = MenuList(self.list)
315 self["logentry"] = Label()
317 self["key_red"] = Button(_("Delete entry"))
318 self["key_green"] = Button()
319 self["key_yellow"] = Button("")
320 self["key_blue"] = Button(_("Clear log"))
322 self.onShown.append(self.updateText)
324 self["actions"] = NumberActionMap(["OkCancelActions", "DirectionActions", "ColorActions"],
327 "cancel": self.keyClose,
332 "red": self.deleteEntry,
333 "blue": self.clearLog
336 def deleteEntry(self):
337 self.log_entries.remove(self["loglist"].getCurrent()[1])
339 self["loglist"].l.setList(self.list)
342 def fillLogList(self):
344 for x in self.log_entries:
345 self.list.append((str(time.strftime("%Y-%m-%d %H-%M", time.localtime(x[0])) + " - " + x[2]), x))
348 self.log_entries = []
350 self["loglist"].l.setList(self.list)
354 if self.timer.log_entries != self.log_entries:
355 self.timer.log_entries = self.log_entries
356 self.close((True, self.timer))
361 self["loglist"].instance.moveSelection(self["loglist"].instance.moveUp)
365 self["loglist"].instance.moveSelection(self["loglist"].instance.moveDown)
369 self["loglist"].instance.moveSelection(self["loglist"].instance.pageUp)
373 self["loglist"].instance.moveSelection(self["loglist"].instance.pageDown)
376 def updateText(self):
377 if len(self.list) > 0:
378 self["logentry"].setText(str(self["loglist"].getCurrent()[1][2]))
380 self["logentry"].setText("")