fix copy&paste typos
[enigma2.git] / lib / python / Screens / InfoBarGenerics.py
index 633dcfd33c1eb20f3bfafc67273a70d3b7ac4cd8..aab2b6491727aed6385cd3cdf1e71b1db6366f27 100644 (file)
@@ -2,14 +2,11 @@ from ChannelSelection import ChannelSelection, BouquetSelector
 
 from Components.ActionMap import ActionMap, HelpableActionMap
 from Components.ActionMap import NumberActionMap
 
 from Components.ActionMap import ActionMap, HelpableActionMap
 from Components.ActionMap import NumberActionMap
-from Components.BlinkingPixmap import BlinkingPixmapConditional
 from Components.Harddisk import harddiskmanager
 from Components.Input import Input
 from Components.Label import Label
 from Components.Harddisk import harddiskmanager
 from Components.Input import Input
 from Components.Label import Label
-from Components.Pixmap import Pixmap
 from Components.PluginComponent import plugins
 from Components.ServiceEventTracker import ServiceEventTracker
 from Components.PluginComponent import plugins
 from Components.ServiceEventTracker import ServiceEventTracker
-from Components.Sources.Source import ObsoleteSource
 from Components.Sources.Boolean import Boolean
 from Components.config import config, ConfigBoolean, ConfigClock
 from Components.SystemInfo import SystemInfo
 from Components.Sources.Boolean import Boolean
 from Components.config import config, ConfigBoolean, ConfigClock
 from Components.SystemInfo import SystemInfo
@@ -32,15 +29,17 @@ from Screens.TimeDateInput import TimeDateInput
 from ServiceReference import ServiceReference
 
 from Tools import Notifications
 from ServiceReference import ServiceReference
 
 from Tools import Notifications
-from Tools.Directories import SCOPE_HDD, resolveFilename
+from Tools.Directories import SCOPE_HDD, resolveFilename, pathExists
 
 from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \
 
 from enigma import eTimer, eServiceCenter, eDVBServicePMTHandler, iServiceInformation, \
-       iPlayableService, eServiceReference, eDVBResourceManager, iFrontendInformation, eEPGCache
+       iPlayableService, eServiceReference, eEPGCache
 
 from time import time, localtime, strftime
 from os import stat as os_stat
 from bisect import insort
 
 
 from time import time, localtime, strftime
 from os import stat as os_stat
 from bisect import insort
 
+from RecordTimer import RecordTimerEntry, RecordTimer
+
 # hack alert!
 from Menu import MainMenu, mdom
 
 # hack alert!
 from Menu import MainMenu, mdom
 
@@ -539,17 +538,6 @@ class InfoBarEPG:
                        self.epglist[1]=tmp
                        setEvent(self.epglist[0])
 
                        self.epglist[1]=tmp
                        setEvent(self.epglist[0])
 
-class InfoBarTuner:
-       """provides a snr/agc/ber display"""
-       def __init__(self):
-               self["FrontendStatus"] = ObsoleteSource(new_source = "session.FrontendStatus", removal_date = "2008-01")
-
-class InfoBarEvent:
-       """provides a current/next event info display"""
-       def __init__(self):
-               self["Event_Now"] = ObsoleteSource(new_source = "session.Event_Now", removal_date = "2008-01")
-               self["Event_Next"] = ObsoleteSource(new_source = "session.Event_Next", removal_date = "2008-01")
-
 class InfoBarRdsDecoder:
        """provides RDS and Rass support/display"""
        def __init__(self):
 class InfoBarRdsDecoder:
        """provides RDS and Rass support/display"""
        def __init__(self):
@@ -598,10 +586,6 @@ class InfoBarRdsDecoder:
                        self.RassSlidePicChanged()
                self.rds_display.show()
 
                        self.RassSlidePicChanged()
                self.rds_display.show()
 
-class InfoBarServiceName:
-       def __init__(self):
-               self["CurrentService"] = ObsoleteSource(new_source = "session.CurrentService", removal_date = "2008-01")
-
 class InfoBarSeek:
        """handles actions like seeking, pause"""
 
 class InfoBarSeek:
        """handles actions like seeking, pause"""
 
@@ -609,7 +593,7 @@ class InfoBarSeek:
        SEEK_STATE_PAUSE = (1, 0, 0, "||")
        SEEK_STATE_EOF = (1, 0, 0, "END")
 
        SEEK_STATE_PAUSE = (1, 0, 0, "||")
        SEEK_STATE_EOF = (1, 0, 0, "END")
 
-       def __init__(self, actionmap = "InfobarSeekActions"):
+       def __init__(self, actionmap = "InfobarSeekActions", useSeekBackHack=True):
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                        {
                                iPlayableService.evSeekableStatusChanged: self.__seekableStatusChanged,
                self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
                        {
                                iPlayableService.evSeekableStatusChanged: self.__seekableStatusChanged,
@@ -624,7 +608,7 @@ class InfoBarSeek:
                self.eofInhibitTimer = eTimer()
                self.eofInhibitTimer.timeout.get().append(self.inhibitEof)
 
                self.eofInhibitTimer = eTimer()
                self.eofInhibitTimer.timeout.get().append(self.inhibitEof)
 
-               self.minSpeedBackward = 16
+               self.minSpeedBackward = useSeekBackHack and 16 or 0
 
                class InfoBarSeekActionMap(HelpableActionMap):
                        def __init__(self, screen, *args, **kwargs):
 
                class InfoBarSeekActionMap(HelpableActionMap):
                        def __init__(self, screen, *args, **kwargs):
@@ -682,7 +666,7 @@ class InfoBarSeek:
        def makeStateBackward(self, n):
                minspeed = config.seek.stepwise_minspeed.value
                repeat = int(config.seek.stepwise_repeat.value)
        def makeStateBackward(self, n):
                minspeed = config.seek.stepwise_minspeed.value
                repeat = int(config.seek.stepwise_repeat.value)
-               if n < self.minSpeedBackward:
+               if self.minSpeedBackward and n < self.minSpeedBackward:
                        r = (self.minSpeedBackward - 1)/ n + 1
                        if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
                                r = max(r, repeat)
                        r = (self.minSpeedBackward - 1)/ n + 1
                        if minspeed != "Never" and n >= int(minspeed) and repeat > 1:
                                r = max(r, repeat)
@@ -746,14 +730,14 @@ class InfoBarSeek:
                return True
 
        def __seekableStatusChanged(self):
                return True
 
        def __seekableStatusChanged(self):
-               print "seekable status changed!"
+#              print "seekable status changed!"
                if not self.isSeekable():
                        self["SeekActions"].setEnabled(False)
                if not self.isSeekable():
                        self["SeekActions"].setEnabled(False)
-                       print "not seekable, return to play"
+#                      print "not seekable, return to play"
                        self.setSeekState(self.SEEK_STATE_PLAY)
                else:
                        self["SeekActions"].setEnabled(True)
                        self.setSeekState(self.SEEK_STATE_PLAY)
                else:
                        self["SeekActions"].setEnabled(True)
-                       print "seekable"
+#                      print "seekable"
 
        def __serviceStarted(self):
                self.seekstate = self.SEEK_STATE_PLAY
 
        def __serviceStarted(self):
                self.seekstate = self.SEEK_STATE_PLAY
@@ -856,7 +840,7 @@ class InfoBarSeek:
                if self.seekstate == self.SEEK_STATE_PLAY:
                        self.setSeekState(self.makeStateForward(int(config.seek.enter_forward.value)))
                elif self.seekstate == self.SEEK_STATE_PAUSE:
                if self.seekstate == self.SEEK_STATE_PLAY:
                        self.setSeekState(self.makeStateForward(int(config.seek.enter_forward.value)))
                elif self.seekstate == self.SEEK_STATE_PAUSE:
-                       if config.seek.speeds_slowmotion:
+                       if len(config.seek.speeds_slowmotion.value):
                                self.setSeekState(self.makeStateSlowMotion(config.seek.speeds_slowmotion.value[-1]))
                        else:
                                self.setSeekState(self.makeStateForward(int(config.seek.enter_forward.value)))
                                self.setSeekState(self.makeStateSlowMotion(config.seek.speeds_slowmotion.value[-1]))
                        else:
                                self.setSeekState(self.makeStateForward(int(config.seek.enter_forward.value)))
@@ -1030,7 +1014,7 @@ class InfoBarTimeshiftState(InfoBarPVRState):
                InfoBarPVRState.__init__(self, screen=TimeshiftState)
 
        def _mayShow(self):
                InfoBarPVRState.__init__(self, screen=TimeshiftState)
 
        def _mayShow(self):
-               if self.execing and self.timeshift_enabled:
+               if self.execing and self.timeshift_enabled and self.seekstate != self.SEEK_STATE_PLAY:
                        self.pvrStateDialog.show()
 
 class InfoBarShowMovies:
                        self.pvrStateDialog.show()
 
 class InfoBarShowMovies:
@@ -1186,8 +1170,8 @@ class InfoBarTimeshift:
        def __seekableStatusChanged(self):
                enabled = False
 
        def __seekableStatusChanged(self):
                enabled = False
 
-               print "self.isSeekable", self.isSeekable()
-               print "self.timeshift_enabled", self.timeshift_enabled
+#              print "self.isSeekable", self.isSeekable()
+#              print "self.timeshift_enabled", self.timeshift_enabled
 
                # when this service is not seekable, but timeshift
                # is enabled, this means we can activate
 
                # when this service is not seekable, but timeshift
                # is enabled, this means we can activate
@@ -1195,7 +1179,7 @@ class InfoBarTimeshift:
                if not self.isSeekable() and self.timeshift_enabled:
                        enabled = True
 
                if not self.isSeekable() and self.timeshift_enabled:
                        enabled = True
 
-               print "timeshift activate:", enabled
+#              print "timeshift activate:", enabled
                self["TimeshiftActivateActions"].setEnabled(enabled)
 
        def __serviceStarted(self):
                self["TimeshiftActivateActions"].setEnabled(enabled)
 
        def __serviceStarted(self):
@@ -1292,13 +1276,33 @@ class InfoBarPlugins:
        def runPlugin(self, plugin):
                plugin(session = self.session, servicelist = self.servicelist)
 
        def runPlugin(self, plugin):
                plugin(session = self.session, servicelist = self.servicelist)
 
+from Components.Task import job_manager
+class InfoBarJobman:
+       def __init__(self):
+               self.addExtension(extension = self.getJobList, type = InfoBarExtensions.EXTENSION_LIST)
+
+       def getJobList(self):
+               list = []
+               for job in job_manager.getPendingJobs():
+                       list.append(((boundFunction(self.getJobName, job), boundFunction(self.showJobView, job), lambda: True), None))
+               return list
+
+       def getJobName(self, job):
+               return "%s: %s (%d%%)" % (job.getStatustext(), job.name, int(100*job.progress/float(job.end)))
+
+       def showJobView(self, job):
+               from Screens.TaskView import JobView
+               job_manager.in_background = False
+               self.session.openWithCallback(self.JobViewCB, JobView, job)
+       
+       def JobViewCB(self, in_background):
+               from Screens.TaskView import JobView
+               job_manager.in_background = in_background
+
 # depends on InfoBarExtensions
 class InfoBarSleepTimer:
        def __init__(self):
 # depends on InfoBarExtensions
 class InfoBarSleepTimer:
        def __init__(self):
-               self.addExtension((self.getSleepTimerName, self.showSleepTimerSetup, self.available), "1")
-
-       def available(self):
-               return True
+               self.addExtension((self.getSleepTimerName, self.showSleepTimerSetup, lambda: True), "1")
 
        def getSleepTimerName(self):
                return _("Sleep Timer")
 
        def getSleepTimerName(self):
                return _("Sleep Timer")
@@ -1311,13 +1315,10 @@ class InfoBarPiP:
        def __init__(self):
                self.session.pipshown = False
                if SystemInfo.get("NumVideoDecoders", 1) > 1:
        def __init__(self):
                self.session.pipshown = False
                if SystemInfo.get("NumVideoDecoders", 1) > 1:
-                       self.addExtension((self.getShowHideName, self.showPiP, self.available), "blue")
+                       self.addExtension((self.getShowHideName, self.showPiP, lambda: True), "blue")
                        self.addExtension((self.getMoveName, self.movePiP, self.pipShown), "green")
                        self.addExtension((self.getSwapName, self.swapPiP, self.pipShown), "yellow")
 
                        self.addExtension((self.getMoveName, self.movePiP, self.pipShown), "green")
                        self.addExtension((self.getSwapName, self.swapPiP, self.pipShown), "yellow")
 
-       def available(self):
-               return SystemInfo.get("NumVideoDecoders", 1) > 1
-
        def pipShown(self):
                return self.session.pipshown
 
        def pipShown(self):
                return self.session.pipshown
 
@@ -1378,7 +1379,7 @@ class InfoBarPiP:
                elif "stop" == use:
                        self.showPiP()
 
                elif "stop" == use:
                        self.showPiP()
 
-from RecordTimer import parseEvent
+from RecordTimer import parseEvent, RecordTimerEntry
 
 class InfoBarInstantRecord:
        """Instant Record - handles the instantRecord action in order to
 
 class InfoBarInstantRecord:
        """Instant Record - handles the instantRecord action in order to
@@ -1389,13 +1390,6 @@ class InfoBarInstantRecord:
                                "instantRecord": (self.instantRecord, _("Instant Record...")),
                        })
                self.recording = []
                                "instantRecord": (self.instantRecord, _("Instant Record...")),
                        })
                self.recording = []
-#### DEPRECATED CODE ####
-               self["BlinkingPoint"] = BlinkingPixmapConditional()
-               self["BlinkingPoint"].setConnect(self.session.nav.RecordTimer.isRecording)
-               self["BlinkingPoint"].deprecationInfo = (
-                       "session.RecordState source, Pixmap renderer and "
-                       "ConditionalShowHide/Blink Converter", "2008-02")
-#########################
 
        def stopCurrentRecording(self, entry = -1):
                if entry is not None and entry != -1:
 
        def stopCurrentRecording(self, entry = -1):
                if entry is not None and entry != -1:
@@ -1419,7 +1413,7 @@ class InfoBarInstantRecord:
                        pass
 
                begin = time()
                        pass
 
                begin = time()
-               end = time() + 3600 * 10
+               end = time() + 3600 * 24 * 365 * 1 # 1 year
                name = "instant record"
                description = ""
                eventid = None
                name = "instant record"
                description = ""
                eventid = None
@@ -1435,16 +1429,25 @@ class InfoBarInstantRecord:
                        if limitEvent:
                                self.session.open(MessageBox, _("No event info found, recording indefinitely."), MessageBox.TYPE_INFO)
 
                        if limitEvent:
                                self.session.open(MessageBox, _("No event info found, recording indefinitely."), MessageBox.TYPE_INFO)
 
-               data = (begin, end, name, description, eventid)
+               if isinstance(serviceref, eServiceReference):
+                       serviceref = ServiceReference(serviceref)
 
 
-               recording = self.session.nav.recordWithTimer(serviceref, *data)
+               recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname = config.movielist.last_videodir.value)
                recording.dontSave = True
                recording.dontSave = True
+               recording.autoincrease = True
+
+               simulTimerList = self.session.nav.RecordTimer.record(recording)
+               if simulTimerList is not None:
+                       print "timer conflict detected!"
+                       if (len(simulTimerList) > 1):
+                               print "tsc_list > 1"
+                               recording.end = simulTimerList[1].begin - 30
+                               self.session.nav.RecordTimer.record(recording)
+                               print "new endtime applied"
+                       else:
+                               print "conflict with only one timer? ! ?"
                self.recording.append(recording)
 
                self.recording.append(recording)
 
-#### DEPRECATED CODE ####
-               self["BlinkingPoint"].setConnect(lambda: self.recording.isRunning())
-#########################
-
        def isInstantRecordRunning(self):
                print "self.recording:", self.recording
                if len(self.recording) > 0:
        def isInstantRecordRunning(self):
                print "self.recording:", self.recording
                if len(self.recording) > 0:
@@ -1501,6 +1504,8 @@ class InfoBarInstantRecord:
                        if ret[0]:
                                localendtime = localtime(ret[1])
                                print "stopping recording at", strftime("%c", localendtime)
                        if ret[0]:
                                localendtime = localtime(ret[1])
                                print "stopping recording at", strftime("%c", localendtime)
+                               if self.recording[self.selectedEntry].end != ret[1]:
+                                       self.recording[self.selectedEntry].autoincrease = False
                                self.recording[self.selectedEntry].end = ret[1]
                                self.session.nav.RecordTimer.timeChanged(self.recording[self.selectedEntry])
 
                                self.recording[self.selectedEntry].end = ret[1]
                                self.session.nav.RecordTimer.timeChanged(self.recording[self.selectedEntry])
 
@@ -1512,13 +1517,19 @@ class InfoBarInstantRecord:
        def inputCallback(self, value):
                if value is not None:
                        print "stopping recording after", int(value), "minutes."
        def inputCallback(self, value):
                if value is not None:
                        print "stopping recording after", int(value), "minutes."
+                       if int(value) != 0:
+                               self.recording[self.selectedEntry].autoincrease = False
                        self.recording[self.selectedEntry].end = time() + 60 * int(value)
                        self.session.nav.RecordTimer.timeChanged(self.recording[self.selectedEntry])
 
        def instantRecord(self):
                        self.recording[self.selectedEntry].end = time() + 60 * int(value)
                        self.session.nav.RecordTimer.timeChanged(self.recording[self.selectedEntry])
 
        def instantRecord(self):
+               dir = config.movielist.last_videodir.value
+               if not pathExists(dir):
+                       dir = resolveFilename(SCOPE_HDD)
                try:
                try:
-                       stat = os_stat(resolveFilename(SCOPE_HDD))
+                       stat = os_stat(dir)
                except:
                except:
+                       # XXX: this message is a little odd as we might be recording to a remote device
                        self.session.open(MessageBox, _("No HDD found or HDD not initialized!"), MessageBox.TYPE_ERROR)
                        return
 
                        self.session.open(MessageBox, _("No HDD found or HDD not initialized!"), MessageBox.TYPE_ERROR)
                        return
 
@@ -1553,10 +1564,8 @@ class InfoBarAudioSelection:
 
        def audioSelection(self):
                service = self.session.nav.getCurrentService()
 
        def audioSelection(self):
                service = self.session.nav.getCurrentService()
-               audio = service and service.audioTracks()
-               self.audioTracks = audio
+               self.audioTracks = audio = service and service.audioTracks()
                n = audio and audio.getNumberOfTracks() or 0
                n = audio and audio.getNumberOfTracks() or 0
-               keys = [ "red", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n
                tlist = []
                if n > 0:
                        self.audioChannel = service.audioChannel()
                tlist = []
                if n > 0:
                        self.audioChannel = service.audioChannel()
@@ -1576,21 +1585,45 @@ class InfoBarAudioSelection:
 
                                tlist.append((description, x))
 
 
                                tlist.append((description, x))
 
-                       selectedAudio = audio.getCurrentTrack()
                        tlist.sort(key=lambda x: x[0])
 
                        tlist.sort(key=lambda x: x[0])
 
-                       selection = 2
+                       selectedAudio = self.audioTracks.getCurrentTrack()
+
+                       selection = 0
+
                        for x in tlist:
                                if x[1] != selectedAudio:
                                        selection += 1
                                else:
                                        break
 
                        for x in tlist:
                                if x[1] != selectedAudio:
                                        selection += 1
                                else:
                                        break
 
-                       tlist = [([_("Left"), _("Stereo"), _("Right")][self.audioChannel.getCurrentChannel()], "mode"), ("--", "")] + tlist
+                       if SystemInfo["CanDownmixAC3"]:
+                               tlist = [(_("AC3 downmix") + " - " +[_("Off"), _("On")][config.av.downmix_ac3.value and 1 or 0], "CALLFUNC", self.changeAC3Downmix),
+                                       ([_("Left"), _("Stereo"), _("Right")][self.audioChannel.getCurrentChannel()], "mode"),
+                                       ("--", "")] + tlist
+                               keys = [ "red", "green", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n
+                               selection += 3
+                       else:
+                               tlist = [([_("Left"), _("Stereo"), _("Right")][self.audioChannel.getCurrentChannel()], "mode"), ("--", "")] + tlist
+                               keys = [ "red", "", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] + [""]*n
+                               selection += 2
                        self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = tlist, selection = selection, keys = keys)
                else:
                        del self.audioTracks
 
                        self.session.openWithCallback(self.audioSelected, ChoiceBox, title=_("Select audio track"), list = tlist, selection = selection, keys = keys)
                else:
                        del self.audioTracks
 
+       def changeAC3Downmix(self, arg):
+               choicelist = self.session.current_dialog["list"]
+               list = choicelist.list
+               t = list[0][1]
+               list[0][1]=(t[0], t[1], t[2], t[3], t[4], t[5], t[6],
+                       _("AC3 downmix") + " - " +[_("On"), _("Off")][config.av.downmix_ac3.value and 1 or 0])
+               choicelist.setList(list)
+               if config.av.downmix_ac3.value:
+                       config.av.downmix_ac3.value = False
+               else:
+                       config.av.downmix_ac3.value = True
+               config.av.downmix_ac3.save()
+
        def audioSelected(self, audio):
                if audio is not None:
                        if isinstance(audio[1], str):
        def audioSelected(self, audio):
                if audio is not None:
                        if isinstance(audio[1], str):
@@ -1626,16 +1659,18 @@ class InfoBarSubserviceSelection:
                        }, -1)
                self["SubserviceQuickzapAction"].setEnabled(False)
 
                        }, -1)
                self["SubserviceQuickzapAction"].setEnabled(False)
 
-               self.session.nav.event.append(self.checkSubservicesAvail) # we like to get service events
+               self.__event_tracker = ServiceEventTracker(screen=self, eventmap=
+                       {
+                               iPlayableService.evUpdatedEventInfo: self.checkSubservicesAvail
+                       })
 
                self.bsel = None
 
 
                self.bsel = None
 
-       def checkSubservicesAvail(self, ev):
-               if ev == iPlayableService.evUpdatedEventInfo:
-                       service = self.session.nav.getCurrentService()
-                       subservices = service and service.subServices()
-                       if not subservices or subservices.getNumberOfSubservices() == 0:
-                               self["SubserviceQuickzapAction"].setEnabled(False)
+       def checkSubservicesAvail(self):
+               service = self.session.nav.getCurrentService()
+               subservices = service and service.subServices()
+               if not subservices or subservices.getNumberOfSubservices() == 0:
+                       self["SubserviceQuickzapAction"].setEnabled(False)
 
        def nextSubservice(self):
                self.changeSubservice(+1)
 
        def nextSubservice(self):
                self.changeSubservice(+1)
@@ -1663,7 +1698,7 @@ class InfoBarSubserviceSelection:
                                if newservice.valid():
                                        del subservices
                                        del service
                                if newservice.valid():
                                        del subservices
                                        del service
-                                       self.session.nav.playService(newservice)
+                                       self.session.nav.playService(newservice, False)
 
        def subserviceSelection(self):
                service = self.session.nav.getCurrentService()
 
        def subserviceSelection(self):
                service = self.session.nav.getCurrentService()
@@ -1681,7 +1716,7 @@ class InfoBarSubserviceSelection:
                                tlist.append((i.getName(), i))
 
                        if self.bouquets and len(self.bouquets):
                                tlist.append((i.getName(), i))
 
                        if self.bouquets and len(self.bouquets):
-                               keys = ["red", "green", "",  "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n
+                               keys = ["red", "blue", "",  "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n
                                if config.usage.multibouquet.value:
                                        tlist = [(_("Quickzap"), "quickzap", service.subServices()), (_("Add to bouquet"), "CALLFUNC", self.addSubserviceToBouquetCallback), ("--", "")] + tlist
                                else:
                                if config.usage.multibouquet.value:
                                        tlist = [(_("Quickzap"), "quickzap", service.subServices()), (_("Add to bouquet"), "CALLFUNC", self.addSubserviceToBouquetCallback), ("--", "")] + tlist
                                else:
@@ -1703,7 +1738,7 @@ class InfoBarSubserviceSelection:
                                        self.session.open(SubservicesQuickzap, service[2])
                        else:
                                self["SubserviceQuickzapAction"].setEnabled(True)
                                        self.session.open(SubservicesQuickzap, service[2])
                        else:
                                self["SubserviceQuickzapAction"].setEnabled(True)
-                               self.session.nav.playService(service[1])
+                               self.session.nav.playService(service[1], False)
 
        def addSubserviceToBouquetCallback(self, service):
                if len(service) > 1 and isinstance(service[1], eServiceReference):
 
        def addSubserviceToBouquetCallback(self, service):
                if len(service) > 1 and isinstance(service[1], eServiceReference):
@@ -1734,63 +1769,13 @@ class InfoBarSubserviceSelection:
 class InfoBarAdditionalInfo:
        def __init__(self):
 
 class InfoBarAdditionalInfo:
        def __init__(self):
 
-               self["RecordingPossible"] = Boolean(fixed=harddiskmanager.HDDCount() > 0)
+               self["RecordingPossible"] = Boolean(fixed=harddiskmanager.HDDCount() > 0 and config.misc.rcused.value == 1)
                self["TimeshiftPossible"] = self["RecordingPossible"]
                self["TimeshiftPossible"] = self["RecordingPossible"]
+               self["ShowTimeshiftOnYellow"] = Boolean(fixed=(not config.misc.rcused.value == 0))
+               self["ShowAudioOnYellow"] = Boolean(fixed=config.misc.rcused.value == 0)
+               self["ShowRecordOnRed"] = Boolean(fixed=config.misc.rcused.value == 1)
                self["ExtensionsAvailable"] = Boolean(fixed=1)
 
                self["ExtensionsAvailable"] = Boolean(fixed=1)
 
-######### DEPRECATED CODE ##########
-               self["NimA"] = Pixmap()
-               self["NimA"].deprecationInfo = (
-                       "session.TunerInfo source, Pixmap renderer, TunerInfo/UseMask Converter"
-                       ", ValueBitTest(1) Converter and ConditionalShowHide Converter", "2008-02")
-               self["NimB"] = Pixmap()
-               self["NimB"].deprecationInfo = (
-                       "session.TunerInfo source, Pixmap renderer, TunerInfo/UseMask Converter"
-                       ", ValueBitTest(2) Converter and ConditionalShowHide Converter", "2008-02")
-               self["NimA_Active"] = Pixmap()
-               self["NimA_Active"].deprecationInfo = (
-                       "session.FrontendInfo source, Pixmap renderer, FrontendInfo/NUMBER Converter"
-                       ", ValueRange(1,1) Converter and ConditionalShowHide Converter", "2008-02")
-               self["NimB_Active"] = Pixmap()
-               self["NimB_Active"].deprecationInfo = (
-                       "session.FrontendInfo source, Pixmap renderer, FrontendInfo/NUMBER Converter"
-                       ", ValueRange(1,1) Converter and ConditionalShowHide Converter", "2008-02")
-
-               res_mgr = eDVBResourceManager.getInstance()
-               if res_mgr:
-                       res_mgr.frontendUseMaskChanged.get().append(self.tunerUseMaskChanged)
-
-               self.session.nav.event.append(self.gotServiceEvent) # we like to get service events
-
-       def tunerUseMaskChanged(self, mask):
-               if mask&1:
-                       self["NimA_Active"].show()
-               else:
-                       self["NimA_Active"].hide()
-               if mask&2:
-                       self["NimB_Active"].show()
-               else:
-                       self["NimB_Active"].hide()
-
-       def checkTunerState(self, service):
-               info = service and service.frontendInfo()
-               feNumber = info and info.getFrontendInfo(iFrontendInformation.frontendNumber)
-               if feNumber is None:
-                       self["NimA"].hide()
-                       self["NimB"].hide()
-               elif feNumber == 0:
-                       self["NimB"].hide()
-                       self["NimA"].show()
-               elif feNumber == 1:
-                       self["NimA"].hide()
-                       self["NimB"].show()
-
-       def gotServiceEvent(self, ev):
-               service = self.session.nav.getCurrentService()
-               if ev == iPlayableService.evUpdatedInfo or ev == iPlayableService.evEnd:
-                       self.checkTunerState(service)
-####################################
-
 class InfoBarNotifications:
        def __init__(self):
                self.onExecBegin.append(self.checkNotifications)
 class InfoBarNotifications:
        def __init__(self):
                self.onExecBegin.append(self.checkNotifications)