X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/7249d5f07b5ee201a6b775ac7946255514350682..c563ffd07163d5982fa4a3d8e9c2486f480b899a:/Navigation.py diff --git a/Navigation.py b/Navigation.py index 37f3fbf9..a905da19 100644 --- a/Navigation.py +++ b/Navigation.py @@ -1,17 +1,17 @@ -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 +from Tools.DreamboxHardware import setFPWakeuptime, getFPWakeuptime, getFPWasTimerWakeup, clearFPWasTimerWakeup +from time import time import RecordTimer import SleepTimer - +import Screens.Standby import NavigationInstance import ServiceReference -from time import time - # TODO: remove pNavgation, eNavigation and rewrite this stuff in python. class Navigation: - def __init__(self): + def __init__(self, nextRecordTimerAfterEventActionAuto=False): if NavigationInstance.instance is not None: raise NavigationInstance.instance @@ -29,25 +29,33 @@ class Navigation: self.currentlyPlayingServiceReference = None self.currentlyPlayingService = None self.RecordTimer = RecordTimer.RecordTimer() + if getFPWasTimerWakeup(): + clearFPWasTimerWakeup() + if getFPWasTimerWakeup(): # sanity check to detect if the FP driver is working correct! + print "buggy fp driver detected!!! please update drivers.... ignore timer wakeup!" + elif nextRecordTimerAfterEventActionAuto and (len(self.getRecordings()) or abs(self.RecordTimer.getNextRecordingTime() - time()) <= 360): + if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open + RecordTimer.RecordTimerEntry.TryQuitMainloop(False) # start shutdown handling self.SleepTimer = SleepTimer.SleepTimer() 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 for x in self.record_event: x(rec_service, event) - def playService(self, ref, checkParentalControl = True): + def playService(self, ref, checkParentalControl = True, forceRestart = False): oldref = self.currentlyPlayingServiceReference - if ref and oldref and ref == oldref: - print "ignore request to play already running service" + if ref and oldref and ref == oldref and not forceRestart: + print "ignore request to play already running service(1)" return 0 print "playing", ref and ref.toString() - self.currentlyPlayingServiceReference = None - self.currentlyPlayingService = None if ref is None: self.stopService() return 0 @@ -56,13 +64,17 @@ class Navigation: if not oldref: oldref = eServiceReference() playref = getBestPlayableServiceReference(ref, oldref) + print "playref", playref + if playref and oldref and playref == oldref and not forceRestart: + print "ignore request to play already running service(2)" + return 0 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() @@ -71,15 +83,15 @@ class Navigation: def getCurrentlyPlayingServiceReference(self): return self.currentlyPlayingServiceReference - def recordService(self, ref): + def recordService(self, ref, simulate=False): service = None print "recording service: %s" % (str(ref)) if isinstance(ref, ServiceReference.ServiceReference): ref = ref.ref if ref: if ref.flags & eServiceReference.isGroup: - ref = getBestPlayableServiceReference(ref, eServiceReference()) - service = ref and self.pnav and self.pnav.recordService(ref) + ref = getBestPlayableServiceReference(ref, eServiceReference(), simulate) + service = ref and self.pnav and self.pnav.recordService(ref, simulate) if service is None: print "record returned non-zero" return service @@ -88,8 +100,8 @@ class Navigation: ret = self.pnav and self.pnav.stopRecordService(service) return ret - def getRecordings(self): - return self.pnav and self.pnav.getRecordings() + def getRecordings(self, simulate=False): + return self.pnav and self.pnav.getRecordings(simulate) def getCurrentService(self): if not self.currentlyPlayingService: @@ -100,19 +112,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