use physical device from framebuffer instead of hardcoded value, blit after compositing
[enigma2.git] / lib / python / Screens / ChannelSelection.py
index c122e62e3b65deadf8c69fa13615de335d57d414..0ff4042bf0562b20706835ab0ce7ae84567bf95b 100644 (file)
@@ -1,28 +1,36 @@
+from Tools.Profile import profile
+
 from Screen import Screen
 from Components.Button import Button
 from Components.ServiceList import ServiceList
 from Components.ActionMap import NumberActionMap, ActionMap, HelpableActionMap
 from Components.MenuList import MenuList
 from Screen import Screen
 from Components.Button import Button
 from Components.ServiceList import ServiceList
 from Components.ActionMap import NumberActionMap, ActionMap, HelpableActionMap
 from Components.MenuList import MenuList
-from Components.ServiceEventTracker import ServiceEventTracker
+from Components.ServiceEventTracker import ServiceEventTracker, InfoBarBase
+profile("ChannelSelection.py 1")
 from EpgSelection import EPGSelection
 from EpgSelection import EPGSelection
-from enigma import eServiceReference, eEPGCache, eServiceCenter, eTimer, eDVBDB, iPlayableService, iServiceInformation
+from enigma import eServiceReference, eEPGCache, eServiceCenter, eRCInput, eTimer, eDVBDB, iPlayableService, iServiceInformation, getPrevAsciiCode
 from Components.config import config, ConfigSubsection, ConfigText
 from Tools.NumericalTextInput import NumericalTextInput
 from Components.config import config, ConfigSubsection, ConfigText
 from Tools.NumericalTextInput import NumericalTextInput
+profile("ChannelSelection.py 2")
 from Components.NimManager import nimmanager
 from Components.NimManager import nimmanager
-from Components.Sources.Source import ObsoleteSource
+profile("ChannelSelection.py 2.1")
 from Components.Sources.RdsDecoder import RdsDecoder
 from Components.Sources.RdsDecoder import RdsDecoder
+profile("ChannelSelection.py 2.2")
 from Components.Sources.ServiceEvent import ServiceEvent
 from Components.Sources.ServiceEvent import ServiceEvent
+profile("ChannelSelection.py 2.3")
 from Components.Input import Input
 from Components.Input import Input
+profile("ChannelSelection.py 3")
 from Components.ParentalControl import parentalControl
 from Components.ParentalControl import parentalControl
-from Components.Pixmap import Pixmap
 from Screens.InputBox import InputBox, PinInput
 from Screens.MessageBox import MessageBox
 from Screens.ServiceInfo import ServiceInfo
 from Screens.InputBox import InputBox, PinInput
 from Screens.MessageBox import MessageBox
 from Screens.ServiceInfo import ServiceInfo
+profile("ChannelSelection.py 4")
 from Screens.RdsDisplay import RassInteractive
 from ServiceReference import ServiceReference
 from Tools.BoundFunction import boundFunction
 from re import compile
 from os import remove
 from Screens.RdsDisplay import RassInteractive
 from ServiceReference import ServiceReference
 from Tools.BoundFunction import boundFunction
 from re import compile
 from os import remove
+profile("ChannelSelection.py after imports")
 
 FLAG_SERVICE_NEW_FOUND = 64 #define in lib/dvb/idvb.h as dxNewFound = 64
 
 
 FLAG_SERVICE_NEW_FOUND = 64 #define in lib/dvb/idvb.h as dxNewFound = 64
 
@@ -68,7 +76,7 @@ def append_when_current_valid(current, menu, args, level = 0):
 class ChannelContextMenu(Screen):
        def __init__(self, session, csel):
                Screen.__init__(self, session)
 class ChannelContextMenu(Screen):
        def __init__(self, session, csel):
                Screen.__init__(self, session)
-               #raise "we need a better summary screen here"
+               #raise Exception("we need a better summary screen here")
                self.csel = csel
                self.bsel = None
 
                self.csel = csel
                self.bsel = None
 
@@ -87,7 +95,7 @@ class ChannelContextMenu(Screen):
                inBouquet = csel.getMutableList() is not None
                haveBouquets = config.usage.multibouquet.value
 
                inBouquet = csel.getMutableList() is not None
                haveBouquets = config.usage.multibouquet.value
 
-               if not (len(current_sel_path) or current_sel_flags & (eServiceReference.isDirectory|eServiceReference.isMarker)):
+               if not (current_sel_path or current_sel_flags & (eServiceReference.isDirectory|eServiceReference.isMarker)):
                        append_when_current_valid(current, menu, (_("show transponder info"), self.showServiceInformations), level = 2)
                if csel.bouquet_mark_edit == OFF and not csel.movemode:
                        if not inBouquetRootList:
                        append_when_current_valid(current, menu, (_("show transponder info"), self.showServiceInformations), level = 2)
                if csel.bouquet_mark_edit == OFF and not csel.movemode:
                        if not inBouquetRootList:
@@ -103,6 +111,8 @@ class ChannelContextMenu(Screen):
                                        else:
                                                append_when_current_valid(current, menu, (_("add service to favourites"), self.addServiceToBouquetSelected), level = 0)
                                else:
                                        else:
                                                append_when_current_valid(current, menu, (_("add service to favourites"), self.addServiceToBouquetSelected), level = 0)
                                else:
+                                       if current_root.getPath().find('FROM SATELLITES') != -1:
+                                               append_when_current_valid(current, menu, (_("remove selected satellite"), self.removeSatelliteServices), level = 0)
                                        if haveBouquets:
                                                if not inBouquet and current_sel_path.find("PROVIDERS") == -1:
                                                        append_when_current_valid(current, menu, (_("copy to bouquets"), self.copyCurrentToBouquetList), level = 0)
                                        if haveBouquets:
                                                if not inBouquet and current_sel_path.find("PROVIDERS") == -1:
                                                        append_when_current_valid(current, menu, (_("copy to bouquets"), self.copyCurrentToBouquetList), level = 0)
@@ -196,6 +206,17 @@ class ChannelContextMenu(Screen):
                if recursive:
                        self.close(False)
 
                if recursive:
                        self.close(False)
 
+       def removeSatelliteServices(self):
+               curpath = self.csel.getCurrentSelection().getPath()
+               idx = curpath.find("satellitePosition == ")
+               if idx != -1:
+                       tmp = curpath[idx+21:]
+                       idx = tmp.find(')')
+                       if idx != -1:
+                               satpos = int(tmp[:idx])
+                               eDVBDB.getInstance().removeServices(-1, -1, -1, satpos)
+               self.close()
+
        def copyCurrentToBouquetList(self):
                self.csel.copyCurrentToBouquetList()
                self.close()
        def copyCurrentToBouquetList(self):
                self.csel.copyCurrentToBouquetList()
                self.close()
@@ -276,7 +297,7 @@ class SelectionEventInfo:
                self["ServiceEvent"] = ServiceEvent()
                self.servicelist.connectSelChanged(self.__selectionChanged)
                self.timer = eTimer()
                self["ServiceEvent"] = ServiceEvent()
                self.servicelist.connectSelChanged(self.__selectionChanged)
                self.timer = eTimer()
-               self.timer.timeout.get().append(self.updateEventInfo)
+               self.timer.callback.append(self.updateEventInfo)
                self.onShown.append(self.__selectionChanged)
 
        def __selectionChanged(self):
                self.onShown.append(self.__selectionChanged)
 
        def __selectionChanged(self):
@@ -296,11 +317,24 @@ class ChannelSelectionEPG:
 
        def showEPGList(self):
                ref=self.getCurrentSelection()
 
        def showEPGList(self):
                ref=self.getCurrentSelection()
-               ptr=eEPGCache.getInstance()
-               if ptr.startTimeQuery(ref) != -1:
-                       self.session.open(EPGSelection, ref)
-               else:
-                       print 'no epg for service', ref.toString()
+               if ref:
+                       self.savedService = ref
+                       self.session.openWithCallback(self.SingleServiceEPGClosed, EPGSelection, ref, serviceChangeCB=self.changeServiceCB)
+
+       def SingleServiceEPGClosed(self, ret=False):
+               self.setCurrentSelection(self.savedService)
+
+       def changeServiceCB(self, direction, epg):
+               beg = self.getCurrentSelection()
+               while True:
+                       if direction > 0:
+                               self.moveDown()
+                       else:
+                               self.moveUp()
+                       cur = self.getCurrentSelection()
+                       if cur == beg or not (cur.flags & eServiceReference.isMarker):
+                               break
+               epg.setService(ServiceReference(self.getCurrentSelection()))
 
 class ChannelSelectionEdit:
        def __init__(self):
 
 class ChannelSelectionEdit:
        def __init__(self):
@@ -409,10 +443,10 @@ class ChannelSelectionEdit:
                if mutableBouquetList:
                        if self.mode == MODE_TV:
                                bName += " (TV)"
                if mutableBouquetList:
                        if self.mode == MODE_TV:
                                bName += " (TV)"
-                               str = '1:7:1:0:0:0:0:0:0:0:(type == 1) FROM BOUQUET \"userbouquet.%s.tv\" ORDER BY bouquet'%(self.buildBouquetID(bName))
+                               str = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.%s.tv\" ORDER BY bouquet'%(self.buildBouquetID(bName))
                        else:
                                bName += " (Radio)"
                        else:
                                bName += " (Radio)"
-                               str = '1:7:2:0:0:0:0:0:0:0:(type == 2) FROM BOUQUET \"userbouquet.%s.radio\" ORDER BY bouquet'%(self.buildBouquetID(bName))
+                               str = '1:7:2:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.%s.radio\" ORDER BY bouquet'%(self.buildBouquetID(bName))
                        new_bouquet_ref = eServiceReference(str)
                        if not mutableBouquetList.addService(new_bouquet_ref):
                                mutableBouquetList.flushChanges()
                        new_bouquet_ref = eServiceReference(str)
                        if not mutableBouquetList.addService(new_bouquet_ref):
                                mutableBouquetList.flushChanges()
@@ -537,7 +571,7 @@ class ChannelSelectionEdit:
                del self.servicePath[:] # remove all elements
                self.servicePath += self.savedPath # add saved elements
                del self.savedPath
                del self.servicePath[:] # remove all elements
                self.servicePath += self.savedPath # add saved elements
                del self.savedPath
-               self.setRoot(self.servicePath[len(self.servicePath)-1])
+               self.setRoot(self.servicePath[-1])
 
        def clearMarks(self):
                self.servicelist.clearMarks()
 
        def clearMarks(self):
                self.servicelist.clearMarks()
@@ -620,7 +654,7 @@ MODE_TV = 0
 MODE_RADIO = 1
 
 # this makes it much simple to implement a selectable radio or tv mode :)
 MODE_RADIO = 1
 
 # this makes it much simple to implement a selectable radio or tv mode :)
-service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)'
+service_types_tv = '1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25) || (type == 134)'
 service_types_radio = '1:7:2:0:0:0:0:0:0:0:(type == 2)'
 
 class ChannelSelectionBase(Screen):
 service_types_radio = '1:7:2:0:0:0:0:0:0:0:(type == 2)'
 
 class ChannelSelectionBase(Screen):
@@ -648,7 +682,7 @@ class ChannelSelectionBase(Screen):
 
                self.bouquetNumOffsetCache = { }
 
 
                self.bouquetNumOffsetCache = { }
 
-               self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions"],
+               self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions", "InputAsciiActions"],
                        {
                                "showFavourites": self.showFavourites,
                                "showAllServices": self.showAllServices,
                        {
                                "showFavourites": self.showFavourites,
                                "showAllServices": self.showAllServices,
@@ -658,6 +692,7 @@ class ChannelSelectionBase(Screen):
                                "prevBouquet": self.prevBouquet,
                                "nextMarker": self.nextMarker,
                                "prevMarker": self.prevMarker,
                                "prevBouquet": self.prevBouquet,
                                "nextMarker": self.nextMarker,
                                "prevMarker": self.prevMarker,
+                               "gotAsciiCode": self.keyAsciiCode,
                                "1": self.keyNumberGlobal,
                                "2": self.keyNumberGlobal,
                                "3": self.keyNumberGlobal,
                                "1": self.keyNumberGlobal,
                                "2": self.keyNumberGlobal,
                                "3": self.keyNumberGlobal,
@@ -759,13 +794,13 @@ class ChannelSelectionBase(Screen):
 
        def getServiceName(self, ref):
                str = self.removeModeStr(ServiceReference(ref).getServiceName())
 
        def getServiceName(self, ref):
                str = self.removeModeStr(ServiceReference(ref).getServiceName())
-               if not len(str):
+               if not str:
                        pathstr = ref.getPath()
                        pathstr = ref.getPath()
-                       if pathstr.find('FROM PROVIDERS') != -1:
+                       if 'FROM PROVIDERS' in pathstr:
                                return _("Provider")
                                return _("Provider")
-                       if pathstr.find('FROM SATELLITES') != -1:
+                       if 'FROM SATELLITES' in pathstr:
                                return _("Satellites")
                                return _("Satellites")
-                       if pathstr.find(') ORDER BY name') != -1:
+                       if ') ORDER BY name' in pathstr:
                                return _("All")
                return str
 
                                return _("All")
                return str
 
@@ -809,9 +844,8 @@ class ChannelSelectionBase(Screen):
 
        def pathUp(self, justSet=False):
                prev = self.servicePath.pop()
 
        def pathUp(self, justSet=False):
                prev = self.servicePath.pop()
-               length = len(self.servicePath)
-               if length:
-                       current = self.servicePath[length-1]
+               if self.servicePath:
+                       current = self.servicePath[-1]
                        self.setRoot(current, justSet)
                        if not justSet:
                                self.setCurrentSelection(prev)
                        self.setRoot(current, justSet)
                        if not justSet:
                                self.setCurrentSelection(prev)
@@ -939,7 +973,7 @@ class ChannelSelectionBase(Screen):
                                self.enterPath(ref)
 
        def inBouquet(self):
                                self.enterPath(ref)
 
        def inBouquet(self):
-               if len(self.servicePath) > 0 and self.servicePath[0] == self.bouquet_root:
+               if self.servicePath and self.servicePath[0] == self.bouquet_root:
                        return True
                return False
 
                        return True
                return False
 
@@ -972,6 +1006,12 @@ class ChannelSelectionBase(Screen):
                if len(charstr) == 1:
                        self.servicelist.moveToChar(charstr[0])
 
                if len(charstr) == 1:
                        self.servicelist.moveToChar(charstr[0])
 
+       def keyAsciiCode(self):
+               unichar = unichr(getPrevAsciiCode())
+               charstr = unichar.encode("utf-8")
+               if len(charstr) == 1:
+                       self.servicelist.moveToChar(charstr[0])
+
        def getRoot(self):
                return self.servicelist.getRoot()
 
        def getRoot(self):
                return self.servicelist.getRoot()
 
@@ -979,14 +1019,6 @@ class ChannelSelectionBase(Screen):
                return self.servicelist.getCurrent()
 
        def setCurrentSelection(self, service):
                return self.servicelist.getCurrent()
 
        def setCurrentSelection(self, service):
-               servicepath = service.getPath()
-               pos = servicepath.find(" FROM BOUQUET")
-               if pos != -1:
-                       if self.mode == MODE_TV:
-                               servicepath = '(type == 1)' + servicepath[pos:]
-                       else:
-                               servicepath = '(type == 2)' + servicepath[pos:]
-                       service.setPath(servicepath)
                self.servicelist.setCurrent(service)
 
        def getBouquetList(self):
                self.servicelist.setCurrent(service)
 
        def getBouquetList(self):
@@ -1057,8 +1089,6 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                ChannelSelectionEPG.__init__(self)
                SelectionEventInfo.__init__(self)
 
                ChannelSelectionEPG.__init__(self)
                SelectionEventInfo.__init__(self)
 
-               self["CurrentTime"] = ObsoleteSource(new_source = "global.CurrentTime", removal_date = "2008-01")
-
                self["actions"] = ActionMap(["OkCancelActions", "TvRadioActions"],
                        {
                                "cancel": self.cancel,
                self["actions"] = ActionMap(["OkCancelActions", "TvRadioActions"],
                        {
                                "cancel": self.cancel,
@@ -1074,7 +1104,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                        })
 
                self.lastChannelRootTimer = eTimer()
                        })
 
                self.lastChannelRootTimer = eTimer()
-               self.lastChannelRootTimer.timeout.get().append(self.__onCreate)
+               self.lastChannelRootTimer.callback.append(self.__onCreate)
                self.lastChannelRootTimer.start(100,True)
 
                self.history_tv = [ ]
                self.lastChannelRootTimer.start(100,True)
 
                self.history_tv = [ ]
@@ -1087,6 +1117,15 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                self.revertMode = None
                config.usage.multibouquet.addNotifier(self.multibouquet_config_changed)
                self.new_service_played = False
                self.revertMode = None
                config.usage.multibouquet.addNotifier(self.multibouquet_config_changed)
                self.new_service_played = False
+               self.onExecBegin.append(self.asciiOn)
+
+       def asciiOn(self):
+               rcinput = eRCInput.getInstance()
+               rcinput.setKeyboardMode(rcinput.kmAscii)
+
+       def asciiOff(self):
+               rcinput = eRCInput.getInstance()
+               rcinput.setKeyboardMode(rcinput.kmNone)
 
        def multibouquet_config_changed(self, val):
                self.recallBouquetMode()
 
        def multibouquet_config_changed(self, val):
                self.recallBouquetMode()
@@ -1154,6 +1193,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                        root = self.getRoot()
                        if not root or not (root.flags & eServiceReference.isGroup):
                                self.zap()
                        root = self.getRoot()
                        if not root or not (root.flags & eServiceReference.isGroup):
                                self.zap()
+                               self.asciiOff()
                                self.close(ref)
 
        #called from infoBar and channelSelected
                                self.close(ref)
 
        #called from infoBar and channelSelected
@@ -1207,8 +1247,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                del self.servicePath[:]
                self.servicePath += path
                self.saveRoot()
                del self.servicePath[:]
                self.servicePath += path
                self.saveRoot()
-               plen = len(path)
-               root = path[plen-1]
+               root = path[-1]
                cur_root = self.getRoot()
                if cur_root and cur_root != root:
                        self.setRoot(root)
                cur_root = self.getRoot()
                if cur_root and cur_root != root:
                        self.setRoot(root)
@@ -1221,7 +1260,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                for i in self.servicePath:
                        path += i.toString()
                        path += ';'
                for i in self.servicePath:
                        path += i.toString()
                        path += ';'
-               if len(path) and path != self.lastroot.value:
+               if path and path != self.lastroot.value:
                        self.lastroot.value = path
                        self.lastroot.save()
 
                        self.lastroot.value = path
                        self.lastroot.save()
 
@@ -1231,7 +1270,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                tmp = re.findall(self.lastroot.value)
                cnt = 0
                for i in tmp:
                tmp = re.findall(self.lastroot.value)
                cnt = 0
                for i in tmp:
-                       self.servicePath.append(eServiceReference(i[:len(i)-1]))
+                       self.servicePath.append(eServiceReference(i[:-1]))
                        cnt += 1
                if cnt:
                        path = self.servicePath.pop()
                        cnt += 1
                if cnt:
                        path = self.servicePath.pop()
@@ -1241,7 +1280,7 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                        self.saveRoot()
 
        def preEnterPath(self, refstr):
                        self.saveRoot()
 
        def preEnterPath(self, refstr):
-               if len(self.servicePath) and self.servicePath[0] != eServiceReference(refstr):
+               if self.servicePath and self.servicePath[0] != eServiceReference(refstr):
                        pathstr = self.lastroot.value
                        if pathstr is not None and pathstr.find(refstr) == 0:
                                self.restoreRoot()
                        pathstr = self.lastroot.value
                        if pathstr is not None and pathstr.find(refstr) == 0:
                                self.restoreRoot()
@@ -1261,16 +1300,14 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                        self.lastservice.save()
 
        def setCurrentServicePath(self, path):
                        self.lastservice.save()
 
        def setCurrentServicePath(self, path):
-               hlen = len(self.history)
-               if hlen > 0:
+               if self.history:
                        self.history[self.history_pos] = path
                else:
                        self.history.append(path)
                self.setHistoryPath()
 
        def getCurrentServicePath(self):
                        self.history[self.history_pos] = path
                else:
                        self.history.append(path)
                self.setHistoryPath()
 
        def getCurrentServicePath(self):
-               hlen = len(self.history)
-               if hlen > 0:
+               if self.history:
                        return self.history[self.history_pos]
                return None
 
                        return self.history[self.history_pos]
                return None
 
@@ -1298,27 +1335,22 @@ class ChannelSelection(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelect
                elif self.revertMode == MODE_RADIO:
                        self.setModeRadio()
                self.revertMode = None
                elif self.revertMode == MODE_RADIO:
                        self.setModeRadio()
                self.revertMode = None
+               self.asciiOff()
                self.close(None)
 
                self.close(None)
 
-from Screens.InfoBarGenerics import InfoBarEvent, InfoBarServiceName
-
-class RadioInfoBar(Screen, InfoBarEvent, InfoBarServiceName):
+class RadioInfoBar(Screen):
        def __init__(self, session):
                Screen.__init__(self, session)
        def __init__(self, session):
                Screen.__init__(self, session)
-               InfoBarEvent.__init__(self)
-               InfoBarServiceName.__init__(self)
-               self["CurrentTime"] = ObsoleteSource(new_source = "global.CurrentTime", removal_date = "2008-01")
                self["RdsDecoder"] = RdsDecoder(self.session.nav)
                self["RdsDecoder"] = RdsDecoder(self.session.nav)
-               self["BlinkingPoint"] = Pixmap()
-               self["BlinkingPoint"].hide()
 
 
-class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG):
+class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelSelectionEPG, InfoBarBase):
        ALLOW_SUSPEND = True
 
        def __init__(self, session, infobar):
                ChannelSelectionBase.__init__(self, session)
                ChannelSelectionEdit.__init__(self)
                ChannelSelectionEPG.__init__(self)
        ALLOW_SUSPEND = True
 
        def __init__(self, session, infobar):
                ChannelSelectionBase.__init__(self, session)
                ChannelSelectionEdit.__init__(self)
                ChannelSelectionEPG.__init__(self)
+               InfoBarBase.__init__(self)
                self.infobar = infobar
                self.onLayoutFinish.append(self.onCreate)
 
                self.infobar = infobar
                self.onLayoutFinish.append(self.onCreate)
 
@@ -1347,6 +1379,11 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS
                },-1)
                self["RdsActions"].setEnabled(False)
                infobar.rds_display.onRassInteractivePossibilityChanged.append(self.RassInteractivePossibilityChanged)
                },-1)
                self["RdsActions"].setEnabled(False)
                infobar.rds_display.onRassInteractivePossibilityChanged.append(self.RassInteractivePossibilityChanged)
+               self.onClose.append(self.__onClose)
+
+       def __onClose(self):
+               lastservice=eServiceReference(config.tv.lastservice.value)
+               self.session.nav.playService(lastservice)
 
        def startRassInteractive(self):
                self.info.hide();
 
        def startRassInteractive(self):
                self.info.hide();
@@ -1365,8 +1402,6 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS
                self.infobar.rds_display.onRassInteractivePossibilityChanged.remove(self.RassInteractivePossibilityChanged)
                self.info.hide()
                #set previous tv service
                self.infobar.rds_display.onRassInteractivePossibilityChanged.remove(self.RassInteractivePossibilityChanged)
                self.info.hide()
                #set previous tv service
-               lastservice=eServiceReference(config.tv.lastservice.value)
-               self.session.nav.playService(lastservice)
                self.close(None)
 
        def __evServiceStart(self):
                self.close(None)
 
        def __evServiceStart(self):
@@ -1385,7 +1420,7 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS
                for i in self.servicePathRadio:
                        path += i.toString()
                        path += ';'
                for i in self.servicePathRadio:
                        path += i.toString()
                        path += ';'
-               if len(path) and path != config.radio.lastroot.value:
+               if path and path != config.radio.lastroot.value:
                        config.radio.lastroot.value = path
                        config.radio.lastroot.save()
 
                        config.radio.lastroot.value = path
                        config.radio.lastroot.save()
 
@@ -1395,7 +1430,7 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS
                tmp = re.findall(config.radio.lastroot.value)
                cnt = 0
                for i in tmp:
                tmp = re.findall(config.radio.lastroot.value)
                cnt = 0
                for i in tmp:
-                       self.servicePathRadio.append(eServiceReference(i[:len(i)-1]))
+                       self.servicePathRadio.append(eServiceReference(i[:-1]))
                        cnt += 1
                if cnt:
                        path = self.servicePathRadio.pop()
                        cnt += 1
                if cnt:
                        path = self.servicePathRadio.pop()
@@ -1405,7 +1440,7 @@ class ChannelSelectionRadio(ChannelSelectionBase, ChannelSelectionEdit, ChannelS
                        self.saveRoot()
 
        def preEnterPath(self, refstr):
                        self.saveRoot()
 
        def preEnterPath(self, refstr):
-               if len(self.servicePathRadio) and self.servicePathRadio[0] != eServiceReference(refstr):
+               if self.servicePathRadio and self.servicePathRadio[0] != eServiceReference(refstr):
                        pathstr = config.radio.lastroot.value
                        if pathstr is not None and pathstr.find(refstr) == 0:
                                self.restoreRoot()
                        pathstr = config.radio.lastroot.value
                        if pathstr is not None and pathstr.find(refstr) == 0:
                                self.restoreRoot()