fix displaying teletext page number
[enigma2.git] / lib / python / Screens / EventView.py
index 31e97fa6290e9b5b11788eecb271a3fc4f277412..8a684ead9522e41b114d9b14127e2b82d2ee970a 100644 (file)
@@ -3,22 +3,33 @@ from Components.ActionMap import ActionMap
 from Components.Button import Button
 from Components.Label import Label
 from Components.ScrollLabel import ScrollLabel
 from Components.Button import Button
 from Components.Label import Label
 from Components.ScrollLabel import ScrollLabel
-from enigma import eServiceEventPtr
+from enigma import eServiceEventPtr, eEPGCache, eTimer
 from ServiceReference import ServiceReference
 from RecordTimer import RecordTimerEntry, parseEvent
 from TimerEntry import TimerEntry
 from ServiceReference import ServiceReference
 from RecordTimer import RecordTimerEntry, parseEvent
 from TimerEntry import TimerEntry
+from time import localtime, asctime
 
 class EventViewBase:
 
 class EventViewBase:
-       def __init__(self, Event, Ref, callback=None):
+       def __init__(self, Event, Ref, callback=None, similarEPGCB=None):
+               self.similarEPGCB = similarEPGCB
                self.cbFunc = callback
                self.currentService=Ref
                self.cbFunc = callback
                self.currentService=Ref
+               self.isRecording = len(Ref.ref.getPath())
                self.event = Event
                self["epg_description"] = ScrollLabel()
                self["datetime"] = Label()
                self["channel"] = Label()
                self["duration"] = Label()
                self["key_red"] = Button("")
                self.event = Event
                self["epg_description"] = ScrollLabel()
                self["datetime"] = Label()
                self["channel"] = Label()
                self["duration"] = Label()
                self["key_red"] = Button("")
-               self["key_green"] = Button(_("Add Timer"))
+               if similarEPGCB is not None:
+                       self.SimilarBroadcastTimer = eTimer()
+                       self.SimilarBroadcastTimer.timeout.get().append(self.getSimilarEvents)
+               else:
+                       self.SimilarBroadcastTimer = None
+               if self.isRecording:
+                       self["key_green"] = Button("")
+               else:
+                       self["key_green"] = Button(_("Add timer"))
                self["key_yellow"] = Button("")
                self["key_blue"] = Button("")
                self["actions"] = ActionMap(["OkCancelActions", "EventViewActions"],
                self["key_yellow"] = Button("")
                self["key_blue"] = Button("")
                self["actions"] = ActionMap(["OkCancelActions", "EventViewActions"],
@@ -29,13 +40,14 @@ class EventViewBase:
                                "pageDown": self.pageDown,
                                "prevEvent": self.prevEvent,
                                "nextEvent": self.nextEvent,
                                "pageDown": self.pageDown,
                                "prevEvent": self.prevEvent,
                                "nextEvent": self.nextEvent,
-                               "timerAdd": self.timerAdd
+                               "timerAdd": self.timerAdd,
+                               "openSimilarList": self.openSimilarList
                        })
                self.onShown.append(self.onCreate)
 
        def onCreate(self):
                        })
                self.onShown.append(self.onCreate)
 
        def onCreate(self):
-               self.setEvent(self.event)
                self.setService(self.currentService)
                self.setService(self.currentService)
+               self.setEvent(self.event)
 
        def prevEvent(self):
                if self.cbFunc is not None:
 
        def prevEvent(self):
                if self.cbFunc is not None:
@@ -46,8 +58,9 @@ class EventViewBase:
                        self.cbFunc(self.setEvent, self.setService, +1)
 
        def timerAdd(self):
                        self.cbFunc(self.setEvent, self.setService, +1)
 
        def timerAdd(self):
-               newEntry = RecordTimerEntry(self.currentService, *parseEvent(self.event))
-               self.session.openWithCallback(self.timerEditFinished, TimerEntry, newEntry)
+               if not self.isRecording:
+                       newEntry = RecordTimerEntry(self.currentService, checkOldTimers = True, *parseEvent(self.event))
+                       self.session.openWithCallback(self.timerEditFinished, TimerEntry, newEntry)
 
        def timerEditFinished(self, answer):
                if (answer[0]):
 
        def timerEditFinished(self, answer):
                if (answer[0]):
@@ -57,14 +70,27 @@ class EventViewBase:
 
        def setService(self, service):
                self.currentService=service
 
        def setService(self, service):
                self.currentService=service
-               name = self.currentService.getServiceName()
-               if name is not None:
-                       self["channel"].setText(name)
+               if self.isRecording:
+                       self["channel"].setText(_("Recording"))
                else:
                else:
-                       self["channel"].setText(_("unknown service"))
+                       name = self.currentService.getServiceName()
+                       if name is not None:
+                               self["channel"].setText(name)
+                       else:
+                               self["channel"].setText(_("unknown service"))
+
+       def sort_func(self,x,y):
+               if x[1] < y[1]:
+                       return -1
+               elif x[1] == y[1]:
+                       return 0
+               else:
+                       return 1
 
        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()
@@ -74,10 +100,14 @@ class EventViewBase:
                        if len(text) > 0:
                                text = text + '\n\n'
                        text = text + ext
                        if len(text) > 0:
                                text = text + '\n\n'
                        text = text + ext
-               self.session.currentDialog.instance.setTitle(event.getEventName())
+
+               self.setTitle(event.getEventName())
                self["epg_description"].setText(text)
                self["datetime"].setText(event.getBeginTimeString())
                self["duration"].setText(_("%d min")%(event.getDuration()/60))
                self["epg_description"].setText(text)
                self["datetime"].setText(event.getBeginTimeString())
                self["duration"].setText(_("%d min")%(event.getDuration()/60))
+               self["key_red"].setText("")
+               if self.SimilarBroadcastTimer is not None:
+                       self.SimilarBroadcastTimer.start(400,True)
 
        def pageUp(self):
                self["epg_description"].pageUp()
 
        def pageUp(self):
                self["epg_description"].pageUp()
@@ -85,21 +115,45 @@ class EventViewBase:
        def pageDown(self):
                self["epg_description"].pageDown()
 
        def pageDown(self):
                self["epg_description"].pageDown()
 
+       def getSimilarEvents(self):
+        # search similar broadcastings
+               refstr = str(self.currentService)
+               id = self.event.getEventId()
+               epgcache = eEPGCache.getInstance()
+               ret = epgcache.search(('NB', 100, eEPGCache.SIMILAR_BROADCASTINGS_SEARCH, refstr, id))
+               if ret is not None:
+                       descr = self["epg_description"]
+                       text = descr.getText()
+                       text += '\n\n' + _('Similar broadcasts:')
+                       ret.sort(self.sort_func)
+                       for x in ret:
+                               t = localtime(x[1])
+                               text += '\n%d.%d.%d, %02d:%02d  -  %s'%(t[2], t[1], t[0], t[3], t[4], x[0])
+                       descr.setText(text)
+                       self["key_red"].setText(_("Similar"))
+
+       def openSimilarList(self):
+               if self.similarEPGCB is not None and len(self["key_red"].getText()):
+                       id = self.event and self.event.getEventId()
+                       refstr = str(self.currentService)
+                       if id is not None:
+                               self.similarEPGCB(id, refstr)
+
 class EventViewSimple(Screen, EventViewBase):
 class EventViewSimple(Screen, EventViewBase):
-       def __init__(self, session, Event, Ref, callback=None):
+       def __init__(self, session, Event, Ref, callback=None, similarEPGCB=None):
                Screen.__init__(self, session)
                self.skinName = "EventView"
                Screen.__init__(self, session)
                self.skinName = "EventView"
-               EventViewBase.__init__(self, Event, Ref, callback)
+               EventViewBase.__init__(self, Event, Ref, callback, similarEPGCB)
 
 class EventViewEPGSelect(Screen, EventViewBase):
 
 class EventViewEPGSelect(Screen, EventViewBase):
-       def __init__(self, session, Event, Ref, callback=None, singleEPGCB=None, multiEPGCB=None):
+       def __init__(self, session, Event, Ref, callback=None, singleEPGCB=None, multiEPGCB=None, similarEPGCB=None):
                Screen.__init__(self, session)
                self.skinName = "EventView"
                Screen.__init__(self, session)
                self.skinName = "EventView"
-               EventViewBase.__init__(self, Event, Ref, callback)
+               EventViewBase.__init__(self, Event, Ref, callback, similarEPGCB)
                self["key_yellow"].setText(_("Single EPG"))
                self["key_blue"].setText(_("Multi EPG"))
                self["epgactions"] = ActionMap(["EventViewEPGActions"],
                        {
                                "openSingleServiceEPG": singleEPGCB,
                self["key_yellow"].setText(_("Single EPG"))
                self["key_blue"].setText(_("Multi EPG"))
                self["epgactions"] = ActionMap(["EventViewEPGActions"],
                        {
                                "openSingleServiceEPG": singleEPGCB,
-                               "openMultiServiceEPG": multiEPGCB
+                               "openMultiServiceEPG": multiEPGCB,
                        })
                        })