X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=Navigation.py;h=50cdf01f3b00e3024dff1efa0f5385ff3150c2f2;hp=f1683df8cdb4ceffabb0a8948e420b6839140291;hb=2b557e7ef4b0518736c5162a501cd9bc743930b3;hpb=f044f2ac4beee89b4038b32eb704dcab2a3d5e98 diff --git a/Navigation.py b/Navigation.py index f1683df..50cdf01 100644 --- a/Navigation.py +++ b/Navigation.py @@ -1,9 +1,14 @@ from enigma import * +from Components.ParentalControl import parentalControl +from Tools.BoundFunction import boundFunction import RecordTimer +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): @@ -12,50 +17,78 @@ class Navigation: NavigationInstance.instance = self self.ServiceHandler = eServiceCenter.getInstance() - + import Navigation as Nav Nav.navcore = self self.pnav = pNavigation() - self.pnav.m_event.get().append(self.callEvent) + self.pnav.m_event.get().append(self.dispatchEvent) + self.pnav.m_record_event.get().append(self.dispatchRecordEvent) self.event = [ ] + self.record_event = [ ] self.currentlyPlayingServiceReference = None self.currentlyPlayingService = None self.state = 0 self.RecordTimer = RecordTimer.RecordTimer() + self.SleepTimer = SleepTimer.SleepTimer() - def callEvent(self, i): + def dispatchEvent(self, i): self.state = i != 1 for x in self.event: x(i) - def playService(self, ref): + def dispatchRecordEvent(self, rec_service, event): +# print "record_event", rec_service, event + for x in self.record_event: + x(rec_service, event) + + def playService(self, ref, checkParentalControl = True): + oldref = self.currentlyPlayingServiceReference print "playing", ref and ref.toString() self.currentlyPlayingServiceReference = None self.currentlyPlayingService = None if ref is None: self.stopService() return 0 - - if self.pnav and not self.pnav.playService(ref): - self.currentlyPlayingServiceReference = ref - return 0 + if not checkParentalControl or parentalControl.isServicePlayable(ref.toCompareString(), 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))): + self.stopService() + return 0 + else: + playref = ref + if self.pnav and not self.pnav.playService(playref): + self.currentlyPlayingServiceReference = ref + return 0 + else: + self.stopService() return 1 def getCurrentlyPlayingServiceReference(self): 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) + return ret + + def getRecordings(self): + return self.pnav and self.pnav.getRecordings() def getCurrentService(self): if self.state: