set platform profile and check application version.
[vuplus_dvbapp] / lib / python / Screens / InfoBarGenerics.py
index d55e661..3ef0880 100755 (executable)
@@ -555,11 +555,35 @@ class InfoBarEPG:
 
        def openMultiServiceEPG(self, withCallback=True):
                bouquets = self.servicelist.getBouquetList()
-               root = self.servicelist.getRoot()
                if bouquets is None:
                        cnt = 0
                else:
                        cnt = len(bouquets)
+               if config.usage.multiepg_ask_bouquet.value:
+                       self.openMultiServiceEPGAskBouquet(bouquets, cnt, withCallback)
+               else:
+                       self.openMultiServiceEPGSilent(bouquets, cnt, withCallback)
+
+       def openMultiServiceEPGAskBouquet(self, bouquets, cnt, withCallback):
+               if cnt > 1: # show bouquet list
+                       if withCallback:
+                               self.bouquetSel = self.session.openWithCallback(self.closed, BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
+                               self.dlg_stack.append(self.bouquetSel)
+                       else:
+                               self.bouquetSel = self.session.open(BouquetSelector, bouquets, self.openBouquetEPG, enableWrapAround=True)
+               elif cnt == 1:
+                       self.openBouquetEPG(bouquets[0][1], withCallback)
+
+       def openMultiServiceEPGSilent(self, bouquets, cnt, withCallback):
+               root = self.servicelist.getRoot()
+               rootstr = root.toCompareString()
+               current = 0
+               for bouquet in bouquets:
+                       if bouquet[1].toCompareString() == rootstr:
+                               break
+                       current += 1
+               if current >= cnt:
+                       current = 0
                if cnt > 1: # create bouquet list for bouq+/-
                        self.bouquetSel = SilentBouquetSelector(bouquets, True, self.servicelist.getBouquetNumOffset(root))
                if cnt >= 1:
@@ -1804,6 +1828,66 @@ class InfoBarSubserviceSelection:
                else:
                        del self.selectedSubservice
 
+from Components.Sources.HbbtvApplication import HbbtvApplication
+class InfoBarRedButton:
+       def __init__(self):
+               if not (config.misc.rcused.value == 1):
+                       self["RedButtonActions"] = HelpableActionMap(self, "InfobarRedButtonActions",
+                               {
+                                       "activateRedButton": (self.activateRedButton, _("Red button...")),
+                               })
+                       self["HbbtvApplication"] = HbbtvApplication()
+               else:
+                       self["HbbtvApplication"] = Boolean(fixed=0)
+                       self["HbbtvApplication"].name = "" #is this a hack?
+                       
+               self.onHBBTVActivation = [ ]
+               self.onRedButtonActivation = [ ]
+               self.onReadyForAIT = [ ]
+               self.__et = ServiceEventTracker(screen=self, eventmap=
+                       {
+                               iPlayableService.evHBBTVInfo: self.detectedHbbtvApplication,
+                               iPlayableService.evUpdatedInfo: self.updateInfomation
+                       })
+
+       def updateAIT(self, orgId=0):
+               for x in self.onReadyForAIT:
+                       try:
+                               x(orgId)
+                       except Exception, ErrMsg: 
+                               print ErrMsg
+                               #self.onReadyForAIT.remove(x)
+
+       def updateInfomation(self):
+               try:
+                       self["HbbtvApplication"].setApplicationName("")
+                       self.updateAIT()
+               except Exception, ErrMsg:
+                       pass
+               
+       def detectedHbbtvApplication(self):
+               service = self.session.nav.getCurrentService()
+               info = service and service.info()
+               try:
+                       for x in info.getInfoObject(iServiceInformation.sHBBTVUrl):
+                               print x
+                               if x[0] in (-1, 1):
+                                       self.updateAIT(x[3])
+                                       self["HbbtvApplication"].setApplicationName(x[1])
+                                       break
+               except Exception, ErrMsg:
+                       pass
+
+       def activateRedButton(self):
+               service = self.session.nav.getCurrentService()
+               info = service and service.info()
+               if info and info.getInfoString(iServiceInformation.sHBBTVUrl) != "":
+                       for x in self.onHBBTVActivation:
+                               x()
+               elif False: # TODO: other red button services
+                       for x in self.onRedButtonActivation:
+                               x()
+
 class InfoBarAdditionalInfo:
        def __init__(self):