added ability to diable timers (yellow button in the timer list)
[vuplus_dvbapp] / lib / python / Screens / TimerEdit.py
index 41b6a12..263af69 100644 (file)
 from Screen import Screen
 from Screen import Screen
-from Components.TimerList import TimerList, TimerEntry
+from Components.TimerList import TimerList, TimerEntryComponent
 from Components.ActionMap import ActionMap
 from Components.TimeInput import TimeInput
 from Components.Label import Label
 from Components.Button import Button
 from Components.ActionMap import ActionMap
 from Components.TimeInput import TimeInput
 from Components.Label import Label
 from Components.Button import Button
+from Screens.MessageBox import MessageBox
+from TimerEntry import TimerEntry, TimerLog
+from RecordTimer import RecordTimerEntry, parseEvent
+from time import *
+from ServiceReference import ServiceReference
+from Components.config import *
 
 
-class TimerEdit(Screen):
-       def __init__(self, session, entry):
-               Screen.__init__(self, session)
-
-               self["actions"] = ActionMap(["OkCancelActions"], 
-                       {
-                               "ok": self.apply,
-                               "cancel": self.close
-                       })
-               
-               self.entry = entry
-               # begin, end, description, service
-               self["begin"] = TimeInput()
-               self["end"] = TimeInput()
-               
-               self["lbegin"] = Label("Begin")
-               self["lend"] = Label("End")
-               
-               self["description"] = Label("bla")
-# TextInput()
-               self["apply"] = Button("Apply")
-               self["service"] = Button()
-       
-       def apply(self):
-               print "applied!"
-       
 class TimerEditList(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
                
                list = [ ]
 class TimerEditList(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
                
                list = [ ]
-               for timer in session.nav.RecordTimer.timer_list:
-                       list.append(TimerEntry(timer, 0))
-               
-               for timer in session.nav.RecordTimer.processed_timers:
-                       list.append(TimerEntry(timer, 1))
-               
+               self.list = list
+               self.fillTimerList()
+
                self["timerlist"] = TimerList(list)
                self["timerlist"] = TimerList(list)
+               
+               self["key_red"] = Button(_("Delete"))
+               self["key_green"] = Button(_("Add"))
+               self["key_yellow"] = Button("")
+               self["key_blue"] = Button(_("Cleanup"))
 
 
-               self["actions"] = ActionMap(["OkCancelActions"], 
+               self["actions"] = ActionMap(["OkCancelActions", "DirectionActions", "ShortcutActions", "TimerEditActions"], 
                        {
                                "ok": self.openEdit,
                        {
                                "ok": self.openEdit,
-                               "cancel": self.close
-                       })
+                               "cancel": self.leave,
+                               "red": self.removeTimer,
+                               "green": self.addCurrentTimer,
+                               "blue": self.cleanupQuestion,
+                               "yellow": self.toggleDisabledState,
+                               "log": self.showLog,
+                               "left": self.left,
+                               "right": self.right,
+                               "up": self.up,
+                               "down": self.down
+                       }, -1)
+               self.session.nav.RecordTimer.on_state_change.append(self.onStateChange)
+               self.onShown.append(self.updateState)
+
+       def up(self):
+               self["timerlist"].instance.moveSelection(self["timerlist"].instance.moveUp)
+               self.updateState()
+               
+       def down(self):
+               self["timerlist"].instance.moveSelection(self["timerlist"].instance.moveDown)
+               self.updateState()
+
+       def left(self):
+               self["timerlist"].instance.moveSelection(self["timerlist"].instance.pageUp)
+               self.updateState()
+               
+       def right(self):
+               self["timerlist"].instance.moveSelection(self["timerlist"].instance.pageDown)
+               self.updateState()
+               
+       def toggleDisabledState(self):
+               self["timerlist"].getCurrent()[0].disabled = not self["timerlist"].getCurrent()[0].disabled
+               self.updateState()
+               self.refill()
+               
+       def updateState(self):
+               if self["timerlist"].getCurrent()[0].disabled:
+                       self["key_yellow"].setText(_("disable"))
+               else:
+                       self["key_yellow"].setText(_("enable"))
+               self["key_yellow"].instance.invalidate()
+
+       def fillTimerList(self):
+               del self.list[:]
+               
+               for timer in self.session.nav.RecordTimer.timer_list:
+                       self.list.append(TimerEntryComponent(timer, processed=False))
+               
+               for timer in self.session.nav.RecordTimer.processed_timers:
+                       self.list.append(TimerEntryComponent(timer, processed=True))
+
+       def showLog(self):
+               self.session.openWithCallback(self.finishedEdit, TimerLog, self["timerlist"].getCurrent()[0])
 
        def openEdit(self):
 
        def openEdit(self):
-               self.session.open(TimerEdit, self["timerlist"].getCurrent())
+               self.session.openWithCallback(self.finishedEdit, TimerEntry, self["timerlist"].getCurrent()[0])
+               #self.session.open(TimerEdit, self["timerlist"].getCurrent()[0])
+               
+       def cleanupQuestion(self):
+               self.session.openWithCallback(self.cleanupTimer, MessageBox, _("Really delete done timers?"))
+       
+       def cleanupTimer(self, delete):
+               if delete:
+                       self.session.nav.RecordTimer.cleanup()
+                       self.refill()
+               
+       def removeTimer(self):
+               list = self["timerlist"]
+               currentIndex = list.getCurrentIndex()
+               list.moveDown()
+               if list.getCurrentIndex() == currentIndex:
+                       currentIndex -= 1
+                       list.moveToIndex(currentIndex)
+               self.session.nav.RecordTimer.removeEntry(list.getCurrent()[0])
+               self.refill()
+       
+       def refill(self):
+               self.fillTimerList()
+               self["timerlist"].invalidate()
+       
+       def addCurrentTimer(self):
+               event = None
+               service = self.session.nav.getCurrentService()
+               if service is not None:
+                       info = service.info()
+                       if info is not None:
+                               event = info.getEvent(0)
+
+               # FIXME only works if already playing a service
+               serviceref = ServiceReference(self.session.nav.getCurrentlyPlayingServiceReference())
+               
+               if event is None:       
+                       data = (int(time()), int(time() + 60), "unknown event", "", None)
+               else:
+                       data = parseEvent(event)
+
+               self.addTimer(RecordTimerEntry(serviceref, *data))
+               
+       def addTimer(self, timer):
+               self.session.openWithCallback(self.finishedAdd, TimerEntry, timer)
+               
+       def finishedEdit(self, answer):
+               print "finished edit"
+               if answer[0]:
+                       print "Edited timer"
+                       self.session.nav.RecordTimer.timeChanged(answer[1])
+                       self.fillTimerList()
+               else:
+                       print "Timeredit aborted"
+
+       def finishedAdd(self, answer):
+               print "finished add"
+               if answer[0]:
+                       entry = answer[1]
+                       self.session.nav.RecordTimer.record(entry)
+                       self.fillTimerList()
+               else:
+                       print "Timeredit aborted"               
+
+       def leave(self):
+               self.session.nav.RecordTimer.saveTimer()
+               self.session.nav.RecordTimer.on_state_change.remove(self.onStateChange)
+               self.close()
+
+       def onStateChange(self, entry):
+               self.refill()