X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/2c69ef06fb8daa7895a42e829219ba8ac62c4acb..d8db49b1ebcfd2a886be1536bbbc12d214e185a5:/lib/python/Screens/ChannelSelection.py diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index 7d93ff10..476348f7 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -264,10 +264,10 @@ class ChannelSelectionEdit: def startMarkedEdit(self): self.mutableList = self.getMutableList() # add all services from the current list to internal marked set in listboxservicecontent - self.bouquetRoot = self.getRoot() self.clearMarks() # this clears the internal marked set in the listboxservicecontent self.saved_title = self.instance.getTitle() - new_title = self.saved_title + pos = self.saved_title.find(')') + new_title = self.saved_title[:pos+1] if self.bouquet_root.getPath().find('FROM BOUQUET "bouquets.') != -1: new_title += ' ' + _("[bouquet edit]") else: @@ -299,13 +299,12 @@ class ChannelSelectionEdit: self.__marked = [] self.clearMarks() self.bouquet_mark_edit = False - self.bouquetRoot = None self.mutableList = None self.instance.setTitle(self.saved_title) self.saved_title = None self.servicePath = self.savedPath[:] del self.savedPath - self.setRoot(self.servicePath[len(self.servicePath-1)]) + self.setRoot(self.servicePath[len(self.servicePath)-1]) def clearMarks(self): self.servicelist.clearMarks() @@ -357,7 +356,8 @@ class ChannelSelectionEdit: self.pathChangedDisabled = True # no path change allowed in movemode self.saved_title = self.instance.getTitle() new_title = self.saved_title - new_title += ' ' + _("[move mode]"); + pos = self.saved_title.find(')') + new_title = self.saved_title[:pos+1] + ' ' + _("[move mode]") + self.saved_title[pos+1:] self.instance.setTitle(new_title); def handleEditCancel(self): @@ -479,26 +479,26 @@ class ChannelSelectionBase(Screen): 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.instance.setTitle(title) - self.mode = MODE_TV - self.servicePath = self.servicePathTV - self.recallBouquetMode() 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.instance.setTitle(title) - self.mode = MODE_RADIO - self.servicePath = self.servicePathRadio - self.recallBouquetMode() def setRoot(self, root, justSet=False): path = root.getPath() @@ -513,6 +513,53 @@ class ChannelSelectionBase(Screen): 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.instance.setTitle(titleStr) def moveUp(self): self.servicelist.moveUp() @@ -699,6 +746,8 @@ class ChannelSelectionBase(Screen): return bouquets return None +HISTORYSIZE = 20 + class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG): def __init__(self, session): ChannelSelectionBase.__init__(self,session) @@ -723,13 +772,16 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect 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.session.nav.playService(lastservice) + self.zap() def __onShown(self): self.recallBouquetMode() @@ -754,9 +806,46 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect #called from infoBar and channelSelected def zap(self): ref = self.session.nav.getCurrentlyPlayingServiceReference() - if ref is None or ref != self.getCurrentSelection(): - self.session.nav.playService(self.getCurrentSelection()) + nref = self.getCurrentSelection() + if ref is None or ref != nref: + self.session.nav.playService(nref) + self.saveRoot() + self.saveChannel() + tmp=self.servicePath[:] + tmp.append(nref) + try: + del self.history[self.history_pos+1:] + except: + pass + self.history.append(tmp) + hlen = len(self.history) + if hlen > HISTORYSIZE: + del self.history[0] + self.history_pos = hlen-1 + + def historyBack(self): + hlen = len(self.history) + if hlen > 1 and self.history_pos > 0: + self.history_pos -= 1 + self.setHistoryPath() + + def historyNext(self): + hlen = len(self.history) + if hlen > 1 and self.history_pos < (hlen-1): + self.history_pos += 1 + self.setHistoryPath() + + def setHistoryPath(self): + path = self.history[self.history_pos][:] + ref = path.pop() + self.servicePath = path self.saveRoot() + plen = len(path) + root = path[plen-1] + if self.getRoot() != root: + self.setRoot(root) + self.session.nav.playService(ref) + self.setCurrentSelection(ref) self.saveChannel() def saveRoot(self):