Fix Mediaplayer crash for WAV playback and add basic Audio CD support (needs kernel...
[enigma2.git] / Navigation.py
index 06d47ac4fcad6f6cf83de246bde15670c52942a3..eb1a2b14585c3e7ca09deb40c89758c6c248c99e 100644 (file)
@@ -1,4 +1,4 @@
-from enigma import eServiceCenter, eServiceReference, pNavigation, getBestPlayableServiceReference
+from enigma import eServiceCenter, eServiceReference, pNavigation, getBestPlayableServiceReference, iPlayableService
 from Components.ParentalControl import parentalControl
 from Tools.BoundFunction import boundFunction
 import RecordTimer
@@ -7,8 +7,6 @@ import SleepTimer
 import NavigationInstance
 import ServiceReference
 
-from time import time
-
 # TODO: remove pNavgation, eNavigation and rewrite this stuff in python.
 class Navigation:
        def __init__(self):
@@ -34,6 +32,9 @@ class Navigation:
        def dispatchEvent(self, i):
                for x in self.event:
                        x(i)
+               if i == iPlayableService.evEnd:
+                       self.currentlyPlayingServiceReference = None
+                       self.currentlyPlayingService = None
 
        def dispatchRecordEvent(self, rec_service, event):
 #              print "record_event", rec_service, event
@@ -42,24 +43,25 @@ class Navigation:
 
        def playService(self, ref, checkParentalControl = True):
                oldref = self.currentlyPlayingServiceReference
+               if ref and oldref and ref == oldref:
+                       print "ignore request to play already running service"
+                       return 0
                print "playing", ref and ref.toString()
-               self.currentlyPlayingServiceReference = None
-               self.currentlyPlayingService = None
                if ref is None:
                        self.stopService()
                        return 0
-               if not checkParentalControl or parentalControl.isServicePlayable(ref.toCompareString(), boundFunction(self.playService, checkParentalControl = False)):
+               if not checkParentalControl or parentalControl.isServicePlayable(ref, boundFunction(self.playService, checkParentalControl = False)):
                        if ref.flags & eServiceReference.isGroup:
                                if not oldref:
                                        oldref = eServiceReference()
                                playref = getBestPlayableServiceReference(ref, oldref)
-                               if not playref or (checkParentalControl and not parentalControl.isServicePlayable(playref.toCompareString(), boundFunction(self.playService, checkParentalControl = False))):
+                               if not playref or (checkParentalControl and not parentalControl.isServicePlayable(playref, boundFunction(self.playService, checkParentalControl = False))):
                                        self.stopService()
                                        return 0
                        else:
                                playref = ref
                        if self.pnav and not self.pnav.playService(playref):
-                               self.currentlyPlayingServiceReference = ref
+                               self.currentlyPlayingServiceReference = playref
                                return 0
                else:
                        self.stopService()
@@ -97,19 +99,10 @@ class Navigation:
                print "stopService"
                if self.pnav:
                        self.pnav.stopService()
-               self.currentlyPlayingService = None
-               self.currentlyPlayingServiceReference = None
 
        def pause(self, p):
                return self.pnav and self.pnav.pause(p)
 
-       def recordWithTimer(self, ref, begin, end, name, description, eit):
-               if isinstance(ref, eServiceReference):
-                       ref = ServiceReference.ServiceReference(ref)
-               entry = RecordTimer.RecordTimerEntry(ref, begin, end, name, description, eit)
-               self.RecordTimer.record(entry)
-               return entry
-       
        def shutdown(self):
                self.RecordTimer.shutdown()
                self.ServiceHandler = None