ugly workaround a bluescreen happening when a record timer fires that zaps away
[enigma2.git] / lib / python / Screens / InfoBarGenerics.py
index d621d12e667231831f16e2af51c112b1db8dc658..2624209cbe336ef712ad7ded8fd23b2983c2c744 100644 (file)
@@ -13,7 +13,7 @@ from Components.PluginComponent import plugins
 from Components.ProgressBar import *
 from Components.ServiceEventTracker import ServiceEventTracker
 from Components.ServiceName import ServiceName
-from Components.config import config, configElement, ConfigSubsection, configSequence, configElementBoolean
+from Components.config import config, configElement, ConfigSubsection, configSequence, configElementBoolean, configSelection, configElement_nonSave, getConfigListEntry
 from Components.config import configfile, configsequencearg
 from Components.TimerList import TimerEntryComponent
 from Components.TunerInfo import TunerInfo
@@ -448,7 +448,8 @@ class InfoBarEPG:
                if self.is_now_next and len(self.dlg_stack) == 1:
                        self.getNowNext()
                        assert self.eventView
-                       self.eventView.setEvent(self.epglist[0])
+                       if len(self.epglist):
+                               self.eventView.setEvent(self.epglist[0])
 
        def openEventView(self):
                ref = self.session.nav.getCurrentlyPlayingServiceReference()
@@ -1019,6 +1020,7 @@ class InfoBarExtensions:
        PIPON = 0
        PIPOFF = 1
        MOVEPIP = 2
+       PIPSWAP = 3
 
        def extensions(self):
                list = []
@@ -1027,29 +1029,30 @@ class InfoBarExtensions:
                elif self.pipshown == True:
                        list.append((_("Disable Picture in Picture"), self.PIPOFF))
                        list.append((_("Move Picture in Picture"), self.MOVEPIP))
+                       list.append((_("Swap services"), self.PIPSWAP))
                self.session.openWithCallback(self.extensionCallback, ChoiceBox, title=_("Please choose an extension..."), list = list)
 
        def extensionCallback(self, answer):
                if answer is not None:
                        if answer[1] == self.PIPON:
-#                              self.session.nav.stopService()
                                self.pip = self.session.instantiateDialog(PictureInPicture)
-                               #self.pip.show()
                                
                                newservice = self.session.nav.getCurrentlyPlayingServiceReference()
-                               self.pipservice = eServiceCenter.getInstance().play(newservice)
-                               if self.pipservice and not self.pipservice.setTarget(1):
-                                       self.pipservice.start()
+                               
+                               if self.pip.playService(newservice):
                                        self.pipshown = True
                                else:
-                                       self.pipservice = None
+                                       self.pipshown = False
                                        del self.pip
                                self.session.nav.playService(newservice)
                        elif answer[1] == self.PIPOFF:
-                               #self.pip.hide()
-                               self.pipservice = None
                                del self.pip
                                self.pipshown = False
+                       elif answer[1] == self.PIPSWAP:
+                               swapservice = self.pip.getCurrentService()
+                               self.pip.playService(self.session.nav.getCurrentlyPlayingServiceReference())
+                               self.session.nav.playService(swapservice)
+                               
                        elif answer[1] == self.MOVEPIP:
                                self.session.open(PiPSetup, pip = self.pip)
 
@@ -1191,9 +1194,11 @@ class InfoBarAudioSelection:
        def audioSelection(self):
                service = self.session.nav.getCurrentService()
                audio = service.audioTracks()
-               self.audio = audio
+               self.audioTracks = audio
                n = audio.getNumberOfTracks()
                if n > 0:
+#                      self.audioChannel = service.audioChannel()
+#                      config.audio.audiochannel = configElement_nonSave("config.audio.audiochannel", configSelection, self.audioChannel.getCurrentChannel(), (("left", _("Left  >")), ("stereo", _("<  Stereo  >")), ("right", _("<  Right"))))
                        tlist = []
                        for x in range(n):
                                i = audio.getTrackInfo(x)
@@ -1213,6 +1218,9 @@ class InfoBarAudioSelection:
                        
                        selectedAudio = tlist[0][1]
                        tlist.sort(lambda x,y : cmp(x[0], y[0]))
+
+#                      tlist.insert(0, getConfigListEntry(_("Audio Channel"), config.audio.audiochannel))
+
                        selection = 0
                        for x in tlist:
                                if x[1] != selectedAudio:
@@ -1221,11 +1229,15 @@ class InfoBarAudioSelection:
                                        break
                        
                        self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = tlist, selection = selection)
+               else:
+                       del self.audioTracks
 
        def audioSelected(self, audio):
                if audio is not None:
-                       self.audio.selectTrack(audio[1])
-               del self.audio
+                       self.audioTracks.selectTrack(audio[1])
+               del self.audioTracks
+#              del self.audioChannel
+#              del config.audio.audiochannel
 
 class InfoBarSubserviceSelection:
        def __init__(self):
@@ -1241,14 +1253,13 @@ class InfoBarSubserviceSelection:
                        }, -1)
                self["SubserviceQuickzapAction"].setEnabled(False)
 
-               self.session.nav.event.append(self.checkParentAvail) # we like to get service events
+               self.session.nav.event.append(self.checkSubservicesAvail) # we like to get service events
 
-       def checkParentAvail(self, ev):
-               ref=self.session.nav.getCurrentlyPlayingServiceReference()
+       def checkSubservicesAvail(self, ev):
                if ev == iPlayableService.evUpdatedEventInfo:
-                       if ref.getData(5):
-                               self["SubserviceQuickzapAction"].setEnabled(True)
-                       else:
+                       service = self.session.nav.getCurrentService()
+                       subservices = service.subServices()
+                       if subservices.getNumberOfSubservices() == 0:
                                self["SubserviceQuickzapAction"].setEnabled(False)
 
        def nextSubservice(self):
@@ -1275,6 +1286,8 @@ class InfoBarSubserviceSelection:
                                        selection=n-1
                                newservice = subservices.getSubservice(selection)
                                if newservice.valid():
+                                       del subservices
+                                       del service
                                        self.session.nav.playService(newservice)
 
        def subserviceSelection(self):
@@ -1296,6 +1309,7 @@ class InfoBarSubserviceSelection:
 
        def subserviceSelected(self, service):
                if not service is None:
+                       self["SubserviceQuickzapAction"].setEnabled(True)
                        self.session.nav.playService(service[1])
 
 class InfoBarAdditionalInfo:
@@ -1398,8 +1412,11 @@ class InfoBarNotifications:
                Notifications.notificationAdded.append(self.checkNotificationsIfExecing)
        
        def checkNotificationsIfExecing(self):
-               if self.execing:
-                       self.checkNotifications()
+               try:
+                       if self.execing:
+                               self.checkNotifications()
+               except:
+                       print "******************************* A SEVERE ERROR HAPPENED... Someone who understands the code... please fix :) *******"
 
        def checkNotifications(self):
                if len(Notifications.notifications):