X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d8db49b1ebcfd2a886be1536bbbc12d214e185a5..13e74ce7d8fcccc12bed3ce65c4f35987f206799:/lib/python/Screens/ChannelSelection.py diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index 476348f7..db279451 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -12,6 +12,8 @@ from Components.NimManager import nimmanager from Components.ServiceName import ServiceName from Components.Clock import Clock from Components.EventInfo import EventInfo +from Components.Input import Input +from Screens.InputBox import InputBox from ServiceReference import ServiceReference from re import * from os import remove @@ -75,6 +77,7 @@ class ChannelContextMenu(Screen): if not csel.bouquet_mark_edit: if not csel.movemode: menu.append((_("enable move mode"), self.toggleMoveMode)) + menu.append((_("add bouquet"), self.showBouquetInputBox)) if not inBouquetRootList: if haveBouquets: menu.append((_("enable bouquet edit"), self.bouquetMarkStart)) @@ -98,6 +101,13 @@ class ChannelContextMenu(Screen): def cancelClick(self): self.close(False) + + def showBouquetInputBox(self): + self.session.openWithCallback(self.bouquetInputCallback, InputBox, title=_("Please enter a name for the new bouquet"), text="bouquetname", maxSize=False, type=Input.TEXT) + + def bouquetInputCallback(self, bouquet): + if bouquet is not None: + self.csel.addBouquet(bouquet) def addServiceToBouquetSelected(self): bouquets = self.csel.getBouquetList() @@ -209,6 +219,32 @@ class ChannelSelectionEdit: else: name += '_' return name + + def addBouquet(self, providerName): + serviceHandler = eServiceCenter.getInstance() + mutableBouquetList = serviceHandler.list(self.bouquet_root).startEdit() + if mutableBouquetList: + if self.mode == MODE_TV: + providerName += " (TV)" + str = '1:7:1:0:0:0:0:0:0:0:(type == 1) FROM BOUQUET \"userbouquet.%s.tv\" ORDER BY bouquet'%(self.buildBouquetID(providerName)) + else: + providerName += " (Radio)" + str = '1:7:2:0:0:0:0:0:0:0:(type == 2) FROM BOUQUET \"userbouquet.%s.radio\" ORDER BY bouquet'%(self.buildBouquetID(providerName)) + new_bouquet_ref = eServiceReference(str) + if not mutableBouquetList.addService(new_bouquet_ref): + self.bouquetNumOffsetCache = { } + mutableBouquetList.flushChanges() + eDVBDB.getInstance().reloadBouquets() + mutableBouquet = serviceHandler.list(new_bouquet_ref).startEdit() + if mutableBouquet: + mutableBouquet.setListName(providerName) + mutableBouquet.flushChanges() + else: + print "get mutable list for new created bouquet failed" + else: + print "add", str, "to bouquets failed" + else: + print "bouquetlist is not editable" def copyCurrentToBouquetList(self): provider = ServiceReference(self.getCurrentSelection()) @@ -272,7 +308,7 @@ class ChannelSelectionEdit: new_title += ' ' + _("[bouquet edit]") else: new_title += ' ' + _("[favourite edit]") - self.instance.setTitle(new_title) + self.setTitle(new_title) self.bouquet_mark_edit = True self.__marked = self.servicelist.getRootServices() for x in self.__marked: @@ -300,7 +336,7 @@ class ChannelSelectionEdit: self.clearMarks() self.bouquet_mark_edit = False self.mutableList = None - self.instance.setTitle(self.saved_title) + self.setTitle(self.saved_title) self.saved_title = None self.servicePath = self.savedPath[:] del self.savedPath @@ -346,7 +382,7 @@ class ChannelSelectionEdit: self.pathChangedDisabled = False # re-enable path change self.mutableList.flushChanges() # FIXME add check if changes was made self.mutableList = None - self.instance.setTitle(self.saved_title) + self.setTitle(self.saved_title) self.saved_title = None if self.getRoot() == self.bouquet_root: self.bouquetNumOffsetCache = { } @@ -358,7 +394,7 @@ class ChannelSelectionEdit: new_title = self.saved_title pos = self.saved_title.find(')') new_title = self.saved_title[:pos+1] + ' ' + _("[move mode]") + self.saved_title[pos+1:] - self.instance.setTitle(new_title); + self.setTitle(new_title); def handleEditCancel(self): if self.movemode: #movemode active? @@ -487,7 +523,7 @@ class ChannelSelectionBase(Screen): if pos != -1: title = title[:pos] title += " (TV)" - self.instance.setTitle(title) + self.setTitle(title) def setRadioMode(self): self.mode = MODE_RADIO @@ -498,7 +534,7 @@ class ChannelSelectionBase(Screen): if pos != -1: title = title[:pos] title += " (Radio)" - self.instance.setTitle(title) + self.setTitle(title) def setRoot(self, root, justSet=False): path = root.getPath() @@ -559,7 +595,7 @@ class ChannelSelectionBase(Screen): titleStr += '/' nameStr = self.getServiceName(end_ref) titleStr += nameStr - self.instance.setTitle(titleStr) + self.setTitle(titleStr) def moveUp(self): self.servicelist.moveUp() @@ -644,9 +680,12 @@ class ChannelSelectionBase(Screen): 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)) + orbpos = 3600 - orbpos + h = _("W") else: - service.setName("%s (%3.1f" + _("E") + ")" % (str, orbpos / 10.0)) + 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: @@ -821,6 +860,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect hlen = len(self.history) if hlen > HISTORYSIZE: del self.history[0] + hlen -= 1 self.history_pos = hlen-1 def historyBack(self): @@ -881,7 +921,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect if pathstr is not None and pathstr.find(refstr) == 0: self.restoreRoot() lastservice=eServiceReference(config.tv.lastservice.value) - if lastservice is not None: + if lastservice.valid(): self.setCurrentSelection(lastservice) return True return False @@ -985,7 +1025,7 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS if pathstr is not None and pathstr.find(refstr) == 0: self.restoreRoot() lastservice=eServiceReference(config.radio.lastservice.value) - if lastservice is not None: + if lastservice.valid(): self.setCurrentSelection(lastservice) return True return False @@ -1039,7 +1079,7 @@ class SimpleChannelSelection(ChannelSelectionBase): }) def __onExecCallback(self): - self.session.currentDialog.instance.setTitle(self.title) + self.setTitle(self.title) self.setModeTv() def channelSelected(self): # just return selected service