add function to get a comparable service reference string (useable to
[enigma2.git] / Navigation.py
index fcf1976..9ba0afc 100644 (file)
@@ -1,9 +1,13 @@
 from enigma import *
+from Components.ParentalControl import parentalControl
+from Tools.BoundFunction import boundFunction
 import RecordTimer
 
 import NavigationInstance
 import ServiceReference
 
+from time import time
+
 # TODO: remove pNavgation, eNavigation and rewrite this stuff in python.
 class Navigation:
        def __init__(self):
@@ -12,7 +16,7 @@ class Navigation:
                
                NavigationInstance.instance = self
                self.ServiceHandler = eServiceCenter.getInstance()
-
+               
                import Navigation as Nav
                Nav.navcore = self
                
@@ -23,23 +27,26 @@ class Navigation:
                self.currentlyPlayingService = None
                self.state = 0
                self.RecordTimer = RecordTimer.RecordTimer()
-
+               
        def callEvent(self, i):
                self.state = i != 1
                for x in self.event:
                        x(i)
 
-       def playService(self, ref):
-               print "playing", ref.toString()
+       def playService(self, ref, checkParentalControl = True):
+               print "playing", ref and ref.toString()
                self.currentlyPlayingServiceReference = None
                self.currentlyPlayingService = None
                if ref is None:
                        self.stopService()
                        return 0
                
-               if not self.pnav.playService(ref):
-                       self.currentlyPlayingServiceReference = ref
-                       return 0
+               if not checkParentalControl or parentalControl.isServicePlayable(ref, boundFunction(self.playService, checkParentalControl = False)):
+                       if self.pnav and not self.pnav.playService(ref):
+                               self.currentlyPlayingServiceReference = ref
+                               return 0
+               else:
+                       self.stopService()
                return 1
        
        def getCurrentlyPlayingServiceReference(self):
@@ -49,7 +56,7 @@ class Navigation:
                print "recording service: %s" % (str(ref))
                if isinstance(ref, ServiceReference.ServiceReference):
                        ref = ref.ref
-               service = self.pnav.recordService(ref)
+               service = self.pnav and self.pnav.recordService(ref)
                
                if service is None:
                        print "record returned non-zero"
@@ -60,17 +67,19 @@ class Navigation:
        def getCurrentService(self):
                if self.state:
                        if not self.currentlyPlayingService:
-                               self.currentlyPlayingService = self.pnav.getCurrentService()
+                               self.currentlyPlayingService = self.pnav and self.pnav.getCurrentService()
                        return self.currentlyPlayingService
                return None
 
        def stopService(self):
-               self.pnav.stopService()
+               print "stopService"
+               if self.pnav:
+                       self.pnav.stopService()
                self.currentlyPlayingService = None
                self.currentlyPlayingServiceReference = None
 
        def pause(self, p):
-               return self.pnav.pause(p)
+               return self.pnav and self.pnav.pause(p)
 
        def recordWithTimer(self, ref, begin, end, name, description, eit):
                if isinstance(ref, eServiceReference):
@@ -81,8 +90,8 @@ class Navigation:
        
        def shutdown(self):
                self.RecordTimer.shutdown()
-               del self.ServiceHandler
-               del self.pnav
+               self.ServiceHandler = None
+               self.pnav = None
 
        def stopUserServices(self):
                self.stopService()