import xml.dom.minidom
class BouquetSelector(Screen):
- def __init__(self, session, bouquets, selectedFunc):
+ def __init__(self, session, bouquets, selectedFunc, enableWrapAround=False):
Screen.__init__(self, session)
self.selectedFunc=selectedFunc
entrys = [ ]
for x in bouquets:
entrys.append((x[0], x[1]))
- self["menu"] = MenuList(entrys)
+ self["menu"] = MenuList(entrys, enableWrapAround)
+
+ def getCurrent(self):
+ cur = self["menu"].getCurrent()
+ return cur and cur[1]
def okbuttonClick(self):
- self.selectedFunc(self["menu"].getCurrent()[1])
+ self.selectedFunc(self.getCurrent())
+
+ def up(self):
+ self["menu"].up()
+
+ def down(self):
+ self["menu"].down()
def cancelClick(self):
self.close(False)
def __init__(self, session, csel):
Screen.__init__(self, session)
self.csel = csel
+ self.bsel = None
self["actions"] = ActionMap(["OkCancelActions"],
{
})
menu = [ ]
- inBouquetRootList = csel.getRoot().getPath().find('FROM BOUQUET "bouquets.') != -1 #FIXME HACK
+ current_root = csel.getRoot()
+ inBouquetRootList = current_root and current_root.getPath().find('FROM BOUQUET "bouquets.') != -1 #FIXME HACK
inBouquet = csel.getMutableList() is not None
haveBouquets = csel.bouquet_root.getPath().find('FROM BOUQUET "bouquets.') != -1
menu.append((_("add service to favourites"), self.addServiceToBouquetSelected))
elif haveBouquets:
if not inBouquet and csel.getCurrentSelection().getPath().find("PROVIDERS") == -1:
- menu.append((_("copy to favourites"), csel.copyCurrentToBouquetList))
+ menu.append((_("copy to favourites"), self.copyCurrentToBouquetList))
if inBouquet:
menu.append((_("remove service"), self.removeCurrentService))
elif haveBouquets:
- menu.append((_("remove bouquet"), csel.removeBouquet))
+ menu.append((_("remove bouquet"), self.removeBouquet))
if inBouquet: # current list is editable?
if not csel.bouquet_mark_edit:
else:
cnt = len(bouquets)
if cnt > 1: # show bouquet list
- self.session.openWithCallback(self.bouquetSelClosed, BouquetSelector, bouquets, self.addCurrentServiceToBouquet)
+ self.bsel = self.session.openWithCallback(self.bouquetSelClosed, BouquetSelector, bouquets, self.addCurrentServiceToBouquet)
elif cnt == 1: # add to only one existing bouquet
self.addCurrentServiceToBouquet(bouquets[0][1])
else: #no bouquets in root.. so assume only one favourite list is used
self.addCurrentServiceToBouquet(self.csel.bouquet_root)
def bouquetSelClosed(self, recursive):
+ self.bsel = None
if recursive:
self.close(False)
def addCurrentServiceToBouquet(self, dest):
self.csel.addCurrentServiceToBouquet(dest)
- self.close(True) # close bouquet selection
+ if self.bsel is not None:
+ self.bsel.close(True)
+ else:
+ self.close(True) # close bouquet selection
def removeCurrentService(self):
self.csel.removeCurrentService()
def __init__(self, csel, contexts = [ ], actions = { }, prio=0):
ActionMap.__init__(self, contexts, actions, prio)
self.csel = csel
+
def action(self, contexts, action):
if action == "cancel":
self.csel.handleEditCancel()
+ return 0 # fall-trough
elif action == "ok":
- pass # avoid typo warning...
+ return 0 # fall-trough
else:
- ActionMap.action(self, contexts, action)
+ return ActionMap.action(self, contexts, action)
+
self["ChannelSelectEditActions"] = ChannelSelectionEditActionMap(self, ["ChannelSelectEditActions", "OkCancelActions"],
{
"contextMenu": self.doContext,
serviceHandler = eServiceCenter.getInstance()
if not root.valid():
root=self.getRoot()
- list = serviceHandler.list(root)
+ list = root and serviceHandler.list(root)
if list is not None:
return list.startEdit()
return None
mutableBouquet = serviceHandler.list(new_bouquet_ref).startEdit()
if mutableBouquet:
mutableBouquet.setListName(providerName)
- list = [ ]
services = serviceHandler.list(provider.ref)
if not services is None:
- if not services.getContent(list, True):
- for service in list:
- if mutableBouquet.addService(service):
- print "add", service.toString(), "to new bouquet failed"
- mutableBouquet.flushChanges()
- else:
- print "getContent failed"
+ list = services.getContent('R', True)
+ for service in list:
+ if mutableBouquet.addService(service):
+ print "add", service.toString(), "to new bouquet failed"
+ mutableBouquet.flushChanges()
else:
print "list provider", providerName, "failed"
else:
if pos != -1:
filename = '/etc/enigma2/' + refstr[:pos] # FIXMEEE !!! HARDCODED /etc/enigma2
self.removeCurrentService()
- remove(filename)
+ try:
+ remove(filename)
+ except OSError:
+ print "error during remove of", filename
eDVBDB.getInstance().reloadBouquets()
# multiple marked entry stuff ( edit mode, later multiepg selection )
self.mutableList = None
self.setTitle(self.saved_title)
self.saved_title = None
- self.servicePath = self.savedPath[:]
+ # self.servicePath is just a reference to servicePathTv or Radio...
+ # so we never ever do use the asignment operator in self.servicePath
+ del self.servicePath[:] # remove all elements
+ self.servicePath += self.savedPath # add saved elements
del self.savedPath
self.setRoot(self.servicePath[len(self.servicePath)-1])
if not mutableList.addService(self.servicelist.getCurrent()):
self.bouquetNumOffsetCache = { }
mutableList.flushChanges()
- self.close()
def toggleMoveMode(self):
if self.movemode:
Screen.__init__(self, session)
# this makes it much simple to implement a selectable radio or tv mode :)
- self.service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17)'
+ self.service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195)'
self.service_types_radio = '1:7:2:0:0:0:0:0:0:0:(type == 2)'
self["key_red"] = Button(_("All"))
self.servicePathTV = [ ]
self.servicePathRadio = [ ]
- self.servicePath = None
+ self.servicePath = [ ]
+
+ self.mode = MODE_TV
self.pathChangedDisabled = False
"7": self.keyNumberGlobal,
"8": self.keyNumberGlobal,
"9": self.keyNumberGlobal,
- "0": self.keyNumberGlobal
+ "0": self.keyNumber0
})
def appendDVBTypes(self, ref):
service = servicelist.getNext()
if not service.valid(): #check if end of list
break
- orbpos = service.getData(4) >> 16
+ orbpos = service.getUnsignedData(4) >> 16
if service.getPath().find("FROM PROVIDER") != -1:
service_name = _("Providers")
else:
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")
+ if orbpos == 0xFFFF: #Cable
+ n = ("%s (%s)") % (service_name, _("Cable"))
+ elif orbpos == 0xEEEE: #Terrestrial
+ n = ("%s (%s)") % (service_name, _("Terrestrial"))
else:
- h = _("E")
- n = ("%s (%d.%d" + h + ")") % (service_name, orbpos / 10, orbpos % 10)
+ 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()
return bouquets
return None
+ def keyNumber0(self, num):
+ if len(self.servicePath) > 1:
+ self.keyGoUp()
+ else:
+ self.keyNumberGlobal(num)
+
+ def keyGoUp(self):
+ if len(self.servicePath) > 1:
+ if self.isBasePathEqual(self.bouquet_root):
+ self.showFavourites()
+ else:
+ ref = eServiceReference('%s FROM SATELLITES ORDER BY satellitePosition'%(self.service_types))
+ if self.isBasePathEqual(ref):
+ self.showSatellites()
+ else:
+ ref = eServiceReference('%s FROM PROVIDERS ORDER BY name'%(self.service_types))
+ if self.isBasePathEqual(ref):
+ self.showProviders()
+ else:
+ self.showAllServices()
+
HISTORYSIZE = 20
class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG):
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]
- hlen -= 1
- self.history_pos = hlen-1
+ if self.servicePath is not None:
+ 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]
+ hlen -= 1
+ self.history_pos = hlen-1
def historyBack(self):
hlen = len(self.history)
def setHistoryPath(self):
path = self.history[self.history_pos][:]
ref = path.pop()
- self.servicePath = path
+ del self.servicePath[:]
+ self.servicePath += path
self.saveRoot()
plen = len(path)
root = path[plen-1]