Merge commit 'origin/bug_448_fix_wlanscan' into experimental
[enigma2.git] / lib / python / Screens / EventView.py
index 56a9e02ce694b870b048bb9d0fc5bfc153102dd5..cced3ceba1fa60f1535a289aabdb4c319f51372a 100644 (file)
@@ -1,20 +1,27 @@
 from Screen import Screen
 from Screen import Screen
+from Screens.TimerEdit import TimerSanityConflict
+from Screens.MessageBox import MessageBox
 from Components.ActionMap import ActionMap
 from Components.Button import Button
 from Components.Label import Label
 from Components.ScrollLabel import ScrollLabel
 from Components.ActionMap import ActionMap
 from Components.Button import Button
 from Components.Label import Label
 from Components.ScrollLabel import ScrollLabel
-from enigma import eServiceEventPtr, eEPGCachePtr, eEPGCache, eTimer
-from ServiceReference import ServiceReference
-from RecordTimer import RecordTimerEntry, parseEvent
+from Components.TimerList import TimerList
+from Components.UsageConfig import preferredTimerPath
+from enigma import eEPGCache, eTimer, eServiceReference
+from RecordTimer import RecordTimerEntry, parseEvent, AFTEREVENT
 from TimerEntry import TimerEntry
 from TimerEntry import TimerEntry
-from time import localtime, asctime
+from time import localtime
+from Components.config import config
 
 class EventViewBase:
 
 class EventViewBase:
+       ADD_TIMER = 0
+       REMOVE_TIMER = 1
+       
        def __init__(self, Event, Ref, callback=None, similarEPGCB=None):
                self.similarEPGCB = similarEPGCB
                self.cbFunc = callback
                self.currentService=Ref
        def __init__(self, Event, Ref, callback=None, similarEPGCB=None):
                self.similarEPGCB = similarEPGCB
                self.cbFunc = callback
                self.currentService=Ref
-               self.isRecording = len(Ref.ref.getPath())
+               self.isRecording = (not Ref.ref.flags & eServiceReference.isGroup) and Ref.ref.getPath()
                self.event = Event
                self["epg_description"] = ScrollLabel()
                self["datetime"] = Label()
                self.event = Event
                self["epg_description"] = ScrollLabel()
                self["datetime"] = Label()
@@ -23,9 +30,10 @@ class EventViewBase:
                self["key_red"] = Button("")
                if similarEPGCB is not None:
                        self.SimilarBroadcastTimer = eTimer()
                self["key_red"] = Button("")
                if similarEPGCB is not None:
                        self.SimilarBroadcastTimer = eTimer()
-                       self.SimilarBroadcastTimer.timeout.get().append(self.getSimilarEvents)
+                       self.SimilarBroadcastTimer.callback.append(self.getSimilarEvents)
                else:
                        self.SimilarBroadcastTimer = None
                else:
                        self.SimilarBroadcastTimer = None
+               self.key_green_choice = self.ADD_TIMER
                if self.isRecording:
                        self["key_green"] = Button("")
                else:
                if self.isRecording:
                        self["key_green"] = Button("")
                else:
@@ -57,16 +65,51 @@ class EventViewBase:
                if self.cbFunc is not None:
                        self.cbFunc(self.setEvent, self.setService, +1)
 
                if self.cbFunc is not None:
                        self.cbFunc(self.setEvent, self.setService, +1)
 
+       def removeTimer(self, timer):
+               timer.afterEvent = AFTEREVENT.NONE
+               self.session.nav.RecordTimer.removeEntry(timer)
+               self["key_green"].setText(_("Add timer"))
+               self.key_green_choice = self.ADD_TIMER
+       
        def timerAdd(self):
        def timerAdd(self):
-               if not self.isRecording:
-                       newEntry = RecordTimerEntry(self.currentService, *parseEvent(self.event))
-                       self.session.openWithCallback(self.timerEditFinished, TimerEntry, newEntry)
-
-       def timerEditFinished(self, answer):
-               if (answer[0]):
-                       self.session.nav.RecordTimer.record(answer[1])
+               if self.isRecording:
+                       return
+               event = self.event
+               serviceref = self.currentService
+               if event is None:
+                       return
+               eventid = event.getEventId()
+               refstr = serviceref.ref.toString()
+               for timer in self.session.nav.RecordTimer.timer_list:
+                       if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+                               cb_func = lambda ret : not ret or self.removeTimer(timer)
+                               self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName())
+                               break
+               else:
+                       newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(self.event))
+                       self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
+
+       def finishedAdd(self, answer):
+               print "finished add"
+               if answer[0]:
+                       entry = answer[1]
+                       simulTimerList = self.session.nav.RecordTimer.record(entry)
+                       if simulTimerList is not None:
+                               for x in simulTimerList:
+                                       if x.setAutoincreaseEnd(entry):
+                                               self.session.nav.RecordTimer.timeChanged(x)
+                               simulTimerList = self.session.nav.RecordTimer.record(entry)
+                               if simulTimerList is not None:
+                                       self.session.openWithCallback(self.finishSanityCorrection, TimerSanityConflict, simulTimerList)
+                       self["key_green"].setText(_("Remove timer"))
+                       self.key_green_choice = self.REMOVE_TIMER
                else:
                else:
-                       print "Timeredit aborted"
+                       self["key_green"].setText(_("Add timer"))
+                       self.key_green_choice = self.ADD_TIMER
+                       print "Timeredit aborted"               
+
+       def finishSanityCorrection(self, answer):
+               self.finishedAdd(answer)
 
        def setService(self, service):
                self.currentService=service
 
        def setService(self, service):
                self.currentService=service
@@ -89,15 +132,17 @@ class EventViewBase:
 
        def setEvent(self, event):
                self.event = event
 
        def setEvent(self, event):
                self.event = event
+               if event is None:
+                       return
                text = event.getEventName()
                short = event.getShortDescription()
                ext = event.getExtendedDescription()
                text = event.getEventName()
                short = event.getShortDescription()
                ext = event.getExtendedDescription()
-               if len(short) > 0 and short != text:
-                       text = text + '\n\n' + short
-               if len(ext) > 0:
-                       if len(text) > 0:
-                               text = text + '\n\n'
-                       text = text + ext
+               if short and short != text:
+                       text += '\n\n' + short
+               if ext:
+                       if text:
+                               text += '\n\n'
+                       text += ext
 
                self.setTitle(event.getEventName())
                self["epg_description"].setText(text)
 
                self.setTitle(event.getEventName())
                self["epg_description"].setText(text)
@@ -107,6 +152,22 @@ class EventViewBase:
                if self.SimilarBroadcastTimer is not None:
                        self.SimilarBroadcastTimer.start(400,True)
 
                if self.SimilarBroadcastTimer is not None:
                        self.SimilarBroadcastTimer.start(400,True)
 
+               serviceref = self.currentService
+               eventid = self.event.getEventId()
+               refstr = serviceref.ref.toString()
+               isRecordEvent = False
+               for timer in self.session.nav.RecordTimer.timer_list:
+                       if timer.eit == eventid and timer.service_ref.ref.toString() == refstr:
+                               isRecordEvent = True
+                               break
+               if isRecordEvent and self.key_green_choice != self.REMOVE_TIMER:
+                       self["key_green"].setText(_("Remove timer"))
+                       self.key_green_choice = self.REMOVE_TIMER
+               elif not isRecordEvent and self.key_green_choice != self.ADD_TIMER:
+                       self["key_green"].setText(_("Add timer"))
+                       self.key_green_choice = self.ADD_TIMER
+
+
        def pageUp(self):
                self["epg_description"].pageUp()
 
        def pageUp(self):
                self["epg_description"].pageUp()
 
@@ -131,7 +192,7 @@ class EventViewBase:
                        self["key_red"].setText(_("Similar"))
 
        def openSimilarList(self):
                        self["key_red"].setText(_("Similar"))
 
        def openSimilarList(self):
-               if self.similarEPGCB is not None:
+               if self.similarEPGCB is not None and self["key_red"].getText():
                        id = self.event and self.event.getEventId()
                        refstr = str(self.currentService)
                        if id is not None:
                        id = self.event and self.event.getEventId()
                        refstr = str(self.currentService)
                        if id is not None: