+ if not self.csel.enterBouquet(action):
+ NumberActionMap.action(self, contexts, action)
+ self["ChannelSelectBaseActions"] = ChannelBaseActionMap(self, ["ChannelSelectBaseActions"],
+ {
+ "showFavourites": self.showFavourites,
+ "showAllServices": self.showAllServices,
+ "showProviders": self.showProviders,
+ "showSatellites": self.showSatellites,
+ "1": self.keyNumberGlobal,
+ "2": self.keyNumberGlobal,
+ "3": self.keyNumberGlobal,
+ "4": self.keyNumberGlobal,
+ "5": self.keyNumberGlobal,
+ "6": self.keyNumberGlobal,
+ "7": self.keyNumberGlobal,
+ "8": self.keyNumberGlobal,
+ "9": self.keyNumberGlobal,
+ "0": self.keyNumberGlobal
+ })
+
+ def appendDVBTypes(self, ref):
+ path = ref.getPath()
+ pos = path.find(' FROM BOUQUET')
+ if pos != -1:
+ return eServiceReference(self.service_types + path[pos:])
+ return ref
+
+ def getBouquetNumOffset(self, bouquet):
+ bouquet = self.appendDVBTypes(bouquet)
+ if self.bouquet_root.getPath().find('FROM BOUQUET "bouquets.') == -1: #FIXME HACK
+ return 0
+ offsetCount = 0
+ serviceHandler = eServiceCenter.getInstance()
+ bouquetlist = serviceHandler.list(self.bouquet_root)
+ if not bouquetlist is None:
+ while True:
+ bouquetIterator = self.appendDVBTypes(bouquetlist.getNext())
+ if not bouquetIterator.valid() or bouquetIterator == bouquet: #end of list or bouquet found
+ break
+ if ((bouquetIterator.flags & eServiceReference.flagDirectory) != eServiceReference.flagDirectory):
+ continue
+ servicelist = serviceHandler.list(bouquetIterator)
+ if not servicelist is None:
+ while True:
+ serviceIterator = servicelist.getNext()
+ if not serviceIterator.valid(): #check if end of list
+ break
+ if serviceIterator.flags: #playable services have no flags
+ continue
+ offsetCount += 1
+ return offsetCount
+
+ def recallBouquetMode(self):
+ if self.mode == MODE_TV:
+ self.service_types = self.service_types_tv
+ if currentConfigSelectionElement(config.usage.multibouquet) == "yes":
+ self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:(type == 1) FROM BOUQUET "bouquets.tv" ORDER BY bouquet'
+ else:
+ self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet'%(self.service_types)
+ else:
+ self.service_types = self.service_types_radio
+ if currentConfigSelectionElement(config.usage.multibouquet) == "yes":
+ self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:(type == 1) FROM BOUQUET "bouquets.radio" ORDER BY bouquet'
+ else:
+ self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.radio" ORDER BY bouquet'%(self.service_types)
+ self.bouquet_root = eServiceReference(self.bouquet_rootstr)
+
+ def setTvMode(self):
+ title = self.instance.getTitle()
+ pos = title.find(" (")
+ if pos != -1:
+ title = title[:pos]
+ title += " (TV)"
+ self.instance.setTitle(title)
+ self.mode = MODE_TV
+ self.recallBouquetMode()
+
+ def setRadioMode(self):
+ title = self.instance.getTitle()
+ pos = title.find(" (")
+ if pos != -1:
+ title = title[:pos]
+ title += " (Radio)"
+ self.instance.setTitle(title)
+ self.mode = MODE_RADIO
+ self.recallBouquetMode()
+
+ def setRootBase(self, root, justSet=False):
+ path = root.getPath()
+ inBouquetRootList = path.find('FROM BOUQUET "bouquets.') != -1 #FIXME HACK
+ pos = path.find(' FROM BOUQUET')
+ isBouquet = pos != -1
+ if not inBouquetRootList and isBouquet:
+ self.servicelist.setMode(ServiceList.MODE_FAVOURITES)
+ self.servicelist.setNumberOffset(self.getBouquetNumOffset(root))
+ refstr = self.service_types + path[pos:]
+ root = eServiceReference(refstr)
+ else:
+ self.servicelist.setMode(ServiceList.MODE_NORMAL)
+ self.servicelist.setRoot(root, justSet)
+
+ def moveUp(self):
+ self.servicelist.moveUp()
+
+ def moveDown(self):
+ self.servicelist.moveDown()
+
+ def clearPath(self):
+ if self.mode == MODE_RADIO:
+ self.servicePathRadio = [ ]
+ else:
+ self.servicePathTV = [ ]
+
+ def enterPath(self, ref, justSet=False):
+ if self.mode == MODE_RADIO:
+ self.servicePathRadio.append(ref)
+ else:
+ self.servicePathTV.append(ref)
+ self.setRoot(ref, justSet)
+
+ def pathUp(self, justSet=False):
+ if self.mode == MODE_TV:
+ prev = self.servicePathTV.pop()
+ length = len(self.servicePathTV)
+ if length:
+ current = self.servicePathTV[length-1]
+ else:
+ prev = self.servicePathRadio.pop()
+ length = len(self.servicePathRadio)
+ if length:
+ current = self.servicePathRadio[length-1]
+ self.setRoot(current, justSet)
+ if not justSet:
+ self.setCurrentSelection(prev)
+ return prev
+
+ def isBasePathEqual(self, ref):
+ if self.mode == MODE_RADIO and len(self.servicePathRadio) > 1 and self.servicePathRadio[0] == ref:
+ return True
+ elif self.mode == MODE_TV and len(self.servicePathTV) > 1 and self.servicePathTV[0] == ref:
+ return True
+ return False
+
+ def isPrevPathEqual(self, ref):
+ path = self.servicePathRadio
+ if self.mode == MODE_TV:
+ path = self.servicePathTV
+ length = len(path)
+ if length > 1 and path[length-2] == ref:
+ return True
+ return False
+
+ def preEnterPath(self, refstr):
+ return False
+
+ def showAllServices(self):
+ refstr = '%s ORDER BY name'%(self.service_types)
+ if not self.preEnterPath(refstr):
+ ref = eServiceReference(refstr)
+ currentRoot = self.getRoot()
+ if currentRoot is None or currentRoot != ref:
+ self.clearPath()
+ self.enterPath(ref)
+
+ def showSatellites(self):
+ refstr = '%s FROM SATELLITES ORDER BY satellitePosition'%(self.service_types)
+ if not self.preEnterPath(refstr):
+ ref = eServiceReference(refstr)
+ justSet=False
+ prev = None
+
+ if self.isBasePathEqual(ref):
+ if self.isPrevPathEqual(ref):
+ justSet=True
+ prev = self.pathUp(justSet)
+ else:
+ currentRoot = self.getRoot()
+ if currentRoot is None or currentRoot != ref:
+ justSet=True
+ self.clearPath()
+ self.enterPath(ref, True)
+ if justSet:
+ serviceHandler = eServiceCenter.getInstance()
+ servicelist = serviceHandler.list(ref)
+ if not servicelist is None:
+ while True:
+ service = servicelist.getNext()
+ if not service.valid(): #check if end of list
+ break
+ orbpos = service.getData(4) >> 16
+ if service.getPath().find("FROM PROVIDER") != -1:
+ service_name = _("Providers")
+ else:
+ service_name = _("Services")
+ try:
+ service_name += str(' - %s'%(nimmanager.getSatDescription(orbpos)))
+ service.setName(service_name) # why we need this cast?
+ except:
+ if orbpos > 1800: # west
+ service.setName("%s (%3.1f" + _("W") + ")" %(str, (0 - (orbpos - 3600)) / 10.0))
+ else:
+ service.setName("%s (%3.1f" + _("E") + ")" % (str, orbpos / 10.0))
+ # print service.toString()
+ self.servicelist.addService(service)
+ self.servicelist.finishFill()
+ if prev is not None:
+ # print "-->", prev.toString()
+ self.setCurrentSelection(prev)
+
+ def showProviders(self):
+ refstr = '%s FROM PROVIDERS ORDER BY name'%(self.service_types)
+ if not self.preEnterPath(refstr):
+ ref = eServiceReference(refstr)
+ if self.isBasePathEqual(ref):
+ self.pathUp()
+ else:
+ currentRoot = self.getRoot()
+ if currentRoot is None or currentRoot != ref:
+ self.clearPath()
+ self.enterPath(ref)
+
+ def showFavourites(self):
+ if not self.preEnterPath(self.bouquet_rootstr):
+ if self.isBasePathEqual(self.bouquet_root):
+ self.pathUp()
+ else:
+ currentRoot = self.getRoot()
+ if currentRoot is None or currentRoot != self.bouquet_root:
+ self.clearPath()
+ self.enterPath(self.bouquet_root)
+
+ def keyNumberGlobal(self, number):
+ char = self.numericalTextInput.getKey(number)
+ print "You pressed number " + str(number)
+ print "You would go to character " + str(char)
+ self.servicelist.moveToChar(char)
+
+ def enterBouquet(self, action):
+ if action[:7] == "bouquet":
+ if action.find("FROM BOUQUET") != -1:
+ self.setRoot(eServiceReference("1:7:1:0:0:0:0:0:0:0:" + action[8:]))
+ else:
+ self.setRoot(eServiceReference("1:0:1:0:0:0:0:0:0:0:" + action[8:]))
+ return True
+ return False
+
+ def getRoot(self):
+ return self.servicelist.getRoot()
+
+ def getCurrentSelection(self):
+ return self.servicelist.getCurrent()
+
+ def setCurrentSelection(self, service):
+ servicepath = service.getPath()
+ pos = servicepath.find(" FROM BOUQUET")
+ if pos != -1:
+ servicepath = '(type == 1)' + servicepath[pos:]
+ service.setPath(servicepath)
+ self.servicelist.setCurrent(service)
+
+ def cancel(self):
+ self.close(None)
+
+ def getBouquetList(self):
+ serviceCount=0
+ bouquets = [ ]
+ serviceHandler = eServiceCenter.getInstance()
+ list = serviceHandler.list(self.bouquet_root)
+ if not list is None:
+ while True:
+ s = list.getNext()
+ if not s.valid():
+ break
+ if ((s.flags & eServiceReference.flagDirectory) == eServiceReference.flagDirectory):
+ info = serviceHandler.info(s)
+ if not info is None:
+ bouquets.append((info.getName(s), s))