don't crash when removing a marker from bouquet list
[enigma2.git] / lib / python / Screens / ChannelSelection.py
index 31e86967a898783236983f82911b24b7e242c468..c376d4fa26e7a414ea73969743b597dbd3d2fe70 100644 (file)
@@ -73,7 +73,7 @@ class ChannelContextMenu(Screen):
                current_sel_flags = csel.getCurrentSelection().flags
                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
+               haveBouquets = config.usage.multibouquet.value
 
                if not csel.bouquet_mark_edit and not csel.movemode:
                        if not inBouquetRootList:
@@ -90,7 +90,7 @@ class ChannelContextMenu(Screen):
                                else:
                                        if haveBouquets:
                                                if not inBouquet and current_sel_path.find("PROVIDERS") == -1:
-                                                       menu.append((_("copy to favourites"), self.copyCurrentToBouquetList))
+                                                       menu.append((_("copy to bouquets"), self.copyCurrentToBouquetList))
                                        if current_sel_path.find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1:
                                                menu.append((_("remove all new found flags"), self.removeAllNewFoundFlags))
                                if inBouquet:
@@ -151,7 +151,6 @@ class ChannelContextMenu(Screen):
                        self.close()
                else:
                        self.session.openWithCallback(self.close, MessageBox, _("The pin code you entered is wrong."), MessageBox.TYPE_ERROR)
-               
 
        def addServiceToBouquetSelected(self):
                bouquets = self.csel.getBouquetList()
@@ -163,8 +162,6 @@ class ChannelContextMenu(Screen):
                        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
@@ -341,6 +338,13 @@ class ChannelSelectionEdit:
                                        mutableBouquet.flushChanges()
                                else:
                                        print "get mutable list for new created bouquet failed"
+                               # do some voodoo to check if current_root is equal to bouquet_root
+                               cur_root = self.getRoot();
+                               str1 = cur_root.toString()
+                               pos1 = str1.find("FROM BOUQUET")
+                               pos2 = self.bouquet_rootstr.find("FROM BOUQUET")
+                               if pos1 != -1 and pos2 != -1 and str1[pos1:] == self.bouquet_rootstr[pos2:]:
+                                       self.setMode() #reload
                        else:
                                print "add", str, "to bouquets failed"
                else:
@@ -357,6 +361,7 @@ class ChannelSelectionEdit:
                refstr = self.getCurrentSelection().toString()
                self.bouquetNumOffsetCache = { }
                pos = refstr.find('FROM BOUQUET "')
+               filename = None
                if pos != -1:
                        refstr = refstr[pos+14:]
                        pos = refstr.find('"')
@@ -364,7 +369,8 @@ class ChannelSelectionEdit:
                                filename = '/etc/enigma2/' + refstr[:pos] # FIXMEEE !!! HARDCODED /etc/enigma2
                self.removeCurrentService()
                try:
-                       remove(filename)
+                       if filename is not None:
+                               remove(filename)
                except OSError:
                        print "error during remove of", filename
 
@@ -376,7 +382,7 @@ class ChannelSelectionEdit:
                self.saved_title = self.instance.getTitle()
                pos = self.saved_title.find(')')
                new_title = self.saved_title[:pos+1]
-               if self.bouquet_root.getPath().find('FROM BOUQUET "bouquets.') != -1:
+               if config.usage.multibouquet.value:
                        new_title += ' ' + _("[bouquet edit]")
                else:
                        new_title += ' ' + _("[favourite edit]")
@@ -546,7 +552,7 @@ class ChannelSelectionBase(Screen):
                return ref
 
        def getBouquetNumOffset(self, bouquet):
-               if self.bouquet_root.getPath().find('FROM BOUQUET "bouquets.') == -1: #FIXME HACK
+               if config.usage.multibouquet.value:
                        return 0
                bouquet = self.appendDVBTypes(bouquet)
                try:
@@ -847,25 +853,24 @@ class ChannelSelectionBase(Screen):
                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))
+               if config.usage.multibouquet.value:
+                       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))
+                               return bouquets
+               else:
+                       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