X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/06f7820d3c5fff95b0609c1e5830cc234a0b2741..a36d71485cec16ba09beb5c267a4467d0f10bb1f:/Navigation.py diff --git a/Navigation.py b/Navigation.py index 53e9ed42..cde4ca4c 100644 --- a/Navigation.py +++ b/Navigation.py @@ -1,4 +1,4 @@ -from enigma import * +from enigma import eServiceCenter, eServiceReference, pNavigation, getBestPlayableServiceReference from Components.ParentalControl import parentalControl from Tools.BoundFunction import boundFunction import RecordTimer @@ -28,12 +28,10 @@ class Navigation: self.record_event = [ ] self.currentlyPlayingServiceReference = None self.currentlyPlayingService = None - self.state = 0 self.RecordTimer = RecordTimer.RecordTimer() self.SleepTimer = SleepTimer.SleepTimer() def dispatchEvent(self, i): - self.state = i != 1 for x in self.event: x(i) @@ -43,16 +41,28 @@ class Navigation: x(rec_service, event) 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 self.pnav and not self.pnav.playService(ref): - self.currentlyPlayingServiceReference = ref + 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, boundFunction(self.playService, checkParentalControl = False))): + self.stopService() + return 0 + else: + playref = ref + if self.pnav and not self.pnav.playService(playref): + self.currentlyPlayingServiceReference = playref return 0 else: self.stopService() @@ -62,16 +72,17 @@ class Navigation: return self.currentlyPlayingServiceReference def recordService(self, ref): + service = None print "recording service: %s" % (str(ref)) if isinstance(ref, ServiceReference.ServiceReference): ref = ref.ref - service = self.pnav and self.pnav.recordService(ref) - - if service is None: - print "record returned non-zero" - return None - else: - return service + if ref: + if ref.flags & eServiceReference.isGroup: + ref = getBestPlayableServiceReference(ref, eServiceReference()) + service = ref and self.pnav and self.pnav.recordService(ref) + if service is None: + print "record returned non-zero" + return service def stopRecordService(self, service): ret = self.pnav and self.pnav.stopRecordService(service) @@ -81,11 +92,9 @@ class Navigation: return self.pnav and self.pnav.getRecordings() def getCurrentService(self): - if self.state: - if not self.currentlyPlayingService: - self.currentlyPlayingService = self.pnav and self.pnav.getCurrentService() - return self.currentlyPlayingService - return None + if not self.currentlyPlayingService: + self.currentlyPlayingService = self.pnav and self.pnav.getCurrentService() + return self.currentlyPlayingService def stopService(self): print "stopService"