much more flexible method to get a servicelist in python..
[enigma2.git] / lib / python / Screens / ChannelSelection.py
index 7db3a1c896533befc2b1613c75bf7a4929de553d..6bc04c80f864f4ea3dd86ecd83712830d04f1bed 100644 (file)
@@ -21,7 +21,7 @@ from os import remove
 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
@@ -34,10 +34,20 @@ class BouquetSelector(Screen):
                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)
@@ -46,6 +56,7 @@ class ChannelContextMenu(Screen):
        def __init__(self, session, csel):
                Screen.__init__(self, session)
                self.csel = csel
+               self.bsel = None
 
                self["actions"] = ActionMap(["OkCancelActions"],
                        {
@@ -117,13 +128,14 @@ class ChannelContextMenu(Screen):
                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)
 
@@ -137,7 +149,10 @@ class ChannelContextMenu(Screen):
 
        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()
@@ -209,7 +224,7 @@ class ChannelSelectionEdit:
                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
@@ -269,16 +284,13 @@ class ChannelSelectionEdit:
                                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:
@@ -427,7 +439,7 @@ class ChannelSelectionBase(Screen):
                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"))
@@ -677,7 +689,7 @@ class ChannelSelectionBase(Screen):
                                                        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:
@@ -686,12 +698,17 @@ class ChannelSelectionBase(Screen):
                                                                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()