+ 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):
+ self.mode = MODE_TV
+ self.servicePath = self.servicePathTV
+ self.recallBouquetMode()
+ title = self.instance.getTitle()
+ pos = title.find(" (")
+ if pos != -1:
+ title = title[:pos]
+ title += " (TV)"
+ self.setTitle(title)
+
+ def setRadioMode(self):
+ self.mode = MODE_RADIO
+ self.servicePath = self.servicePathRadio
+ self.recallBouquetMode()
+ title = self.instance.getTitle()
+ pos = title.find(" (")
+ if pos != -1:
+ title = title[:pos]
+ title += " (Radio)"
+ self.setTitle(title)
+
+ def setRoot(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)
+ self.buildTitleString()
+
+ def removeModeStr(self, str):
+ if self.mode == MODE_TV:
+ pos = str.find(' (TV)')
+ else:
+ pos = str.find(' (Radio)')
+ if pos != -1:
+ return str[:pos]
+ return str
+
+ def getServiceName(self, ref):
+ str = self.removeModeStr(ServiceReference(ref).getServiceName())
+ if not len(str):
+ pathstr = ref.getPath()
+ if pathstr.find('FROM PROVIDERS') != -1:
+ return _("Provider")
+ if pathstr.find('FROM SATELLITES') != -1:
+ return _("Satellites")
+ if pathstr.find(') ORDER BY name') != -1:
+ return _("All")
+ return str
+
+ def buildTitleString(self):
+ titleStr = self.instance.getTitle()
+ pos = titleStr.find(']')
+ if pos == -1:
+ pos = titleStr.find(')')
+ if pos != -1:
+ titleStr = titleStr[:pos+1]
+ Len = len(self.servicePath)
+ if Len > 0:
+ base_ref = self.servicePath[0]
+ if Len > 1:
+ end_ref = self.servicePath[Len-1]
+ else:
+ end_ref = None
+ nameStr = self.getServiceName(base_ref)
+ titleStr += ' ' + nameStr
+ if end_ref is not None:
+ if Len > 2:
+ titleStr += '/../'
+ else:
+ titleStr += '/'
+ nameStr = self.getServiceName(end_ref)
+ titleStr += nameStr
+ self.setTitle(titleStr)
+
+ def moveUp(self):
+ self.servicelist.moveUp()
+
+ def moveDown(self):
+ self.servicelist.moveDown()
+
+ def clearPath(self):
+ del self.servicePath[:]
+
+ def enterPath(self, ref, justSet=False):
+ self.servicePath.append(ref)
+ self.setRoot(ref, justSet)
+
+ def pathUp(self, justSet=False):
+ prev = self.servicePath.pop()
+ length = len(self.servicePath)
+ if length:
+ current = self.servicePath[length-1]
+ self.setRoot(current, justSet)
+ if not justSet:
+ self.setCurrentSelection(prev)
+ return prev
+
+ def isBasePathEqual(self, ref):
+ if len(self.servicePath) > 1 and self.servicePath[0] == ref:
+ return True
+ return False
+
+ def isPrevPathEqual(self, ref):
+ length = len(self.servicePath)
+ if length > 1 and self.servicePath[length-2] == ref:
+ return True
+ return False
+
+ def preEnterPath(self, refstr):
+ return False
+
+ def showAllServices(self):
+ if not self.pathChangedDisabled:
+ 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):
+ if not self.pathChangedDisabled:
+ 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
+ orbpos = 3600 - orbpos
+ h = _("W")
+ else:
+ h = _("E")
+ n = ("%s (%d.%d" + h + ")") % (service_name, orbpos / 10, orbpos % 10)
+ service.setName(n)
+ self.servicelist.addService(service)
+ self.servicelist.finishFill()
+ if prev is not None:
+ self.setCurrentSelection(prev)
+
+ def showProviders(self):
+ if not self.pathChangedDisabled:
+ 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 changeBouquet(self, direction):
+ if not self.pathChangedDisabled:
+ if self.isBasePathEqual(self.bouquet_root):
+ self.pathUp()
+ if direction < 0:
+ self.moveUp()
+ else:
+ self.moveDown()
+ ref = self.getCurrentSelection()
+ self.enterPath(ref)
+
+ def inBouquet(self):
+ return self.isBasePathEqual(self.bouquet_root)
+
+ def atBegin(self):
+ return self.servicelist.atBegin()
+
+ def atEnd(self):
+ return self.servicelist.atEnd()
+
+ def nextBouquet(self):
+ self.changeBouquet(+1)
+
+ def prevBouquet(self):
+ self.changeBouquet(-1)
+
+ def showFavourites(self):
+ if not self.pathChangedDisabled:
+ 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)
+ self.servicelist.moveToChar(char)
+
+ 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:
+ if self.mode == MODE_TV:
+ servicepath = '(type == 1)' + servicepath[pos:]
+ else:
+ servicepath = '(type == 2)' + servicepath[pos:]
+ service.setPath(servicepath)
+ self.servicelist.setCurrent(service)
+
+ 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))
+ else:
+ serviceCount += 1
+ if len(bouquets) == 0 and serviceCount > 0:
+ info = serviceHandler.info(self.bouquet_root)
+ if not info is None:
+ bouquets.append((info.getName(self.bouquet_root), self.bouquet_root))
+ return bouquets
+ return None
+
+HISTORYSIZE = 20
+
+class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG):
+ def __init__(self, session):
+ ChannelSelectionBase.__init__(self,session)
+ ChannelSelectionEdit.__init__(self)
+ ChannelSelectionEPG.__init__(self)
+
+ #config for lastservice
+ config.tv = ConfigSubsection();
+ config.tv.lastservice = configElement("config.tv.lastservice", configText, "", 0);
+ config.tv.lastroot = configElement("config.tv.lastroot", configText, "", 0);
+
+ self["actions"] = ActionMap(["OkCancelActions"],
+ {
+ "cancel": self.cancel,
+ "ok": self.channelSelected,
+ })
+ self.onShown.append(self.__onShown)
+
+ self.lastChannelRootTimer = eTimer()
+ self.lastChannelRootTimer.timeout.get().append(self.__onCreate)
+ self.lastChannelRootTimer.start(100,True)
+
+ self.history = [ ]
+ self.history_pos = 0
+
+ def __onCreate(self):
+ self.setTvMode()
+ self.restoreRoot()
+ lastservice=eServiceReference(config.tv.lastservice.value)
+ if lastservice.valid():
+ self.setCurrentSelection(lastservice)
+ self.zap()
+
+ def __onShown(self):
+ self.recallBouquetMode()
+ ref = self.session.nav.getCurrentlyPlayingServiceReference()
+ if ref is not None and ref.valid() and ref.getPath() == "":
+ self.servicelist.setPlayableIgnoreService(ref)
+ else:
+ self.servicelist.setPlayableIgnoreService(eServiceReference())
+
+ def channelSelected(self):
+ ref = self.getCurrentSelection()
+ if self.movemode:
+ self.toggleMoveMarked()