X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=RecordTimer.py;h=28b878a196f6277a5fed711750bdd041194aea32;hb=9ca172f45cc02fe5cb693e7d35aade7d2233d448;hp=147a38fc6510660b340719e9d5fa2c74d6a6d407;hpb=04f4636324ab06c5a3a4f618100048e159eaf6f9;p=vuplus_dvbapp diff --git a/RecordTimer.py b/RecordTimer.py index 147a38f..28b878a 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -10,7 +10,7 @@ from enigma import eEPGCache, getBestPlayableServiceReference, \ eServiceReference, iRecordableService, quitMainloop from Screens.MessageBox import MessageBox - +from Components.TimerSanityCheck import TimerSanityCheck import NavigationInstance import Screens.Standby @@ -79,7 +79,7 @@ class RecordTimerEntry(timer.TimerEntry, object): RecordTimerEntry.receiveRecordEvents = False @staticmethod - def TryQuitMainloop(): + def TryQuitMainloop(default_yes = True): if not RecordTimerEntry.receiveRecordEvents: print "RecordTimer.TryQuitMainloop" NavigationInstance.instance.record_event.append(RecordTimerEntry.staticGotRecordEvent) @@ -88,10 +88,10 @@ class RecordTimerEntry(timer.TimerEntry, object): # other timers start in a few seconds RecordTimerEntry.staticGotRecordEvent(None, iRecordableService.evEnd) # send normal notification for the case the user leave the standby now.. - Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1, onSessionOpenCallback=RecordTimerEntry.stopTryQuitMainloop) + Notifications.AddNotification(Screens.Standby.TryQuitMainloop, 1, onSessionOpenCallback=RecordTimerEntry.stopTryQuitMainloop, default_yes = default_yes) ################################################################# - def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.NONE, checkOldTimers = False, dirname = None): + def __init__(self, serviceref, begin, end, name, description, eit, disabled = False, justplay = False, afterEvent = AFTEREVENT.NONE, checkOldTimers = False, dirname = None, tags = None): timer.TimerEntry.__init__(self, int(begin), int(end)) if checkOldTimers == True: @@ -116,7 +116,9 @@ class RecordTimerEntry(timer.TimerEntry, object): self.afterEvent = afterEvent self.dirname = dirname self.dirnameHadToFallback = False - + self.autoincrease = False + self.tags = tags or [] + self.log_entries = [] self.resetState() @@ -191,6 +193,7 @@ class RecordTimerEntry(timer.TimerEntry, object): f.write(self.name + "\n") f.write(self.description + "\n") f.write(str(self.begin) + "\n") + f.write(' '.join(self.tags)) f.close() except IOError: self.log(4, "failed to write meta information") @@ -271,9 +274,9 @@ class RecordTimerEntry(timer.TimerEntry, object): if self.afterEvent == AFTEREVENT.STANDBY: if not Screens.Standby.inStandby: # not already in standby Notifications.AddNotificationWithCallback(self.sendStandbyNotification, MessageBox, _("A finished record timer wants to set your\nDreambox to standby. Do that now?"), timeout = 20) - if self.afterEvent == AFTEREVENT.DEEPSTANDBY: + elif self.afterEvent == AFTEREVENT.DEEPSTANDBY: if not Screens.Standby.inTryQuitMainloop: # not a shutdown messagebox is open - if Screens.Standby.inStandby: # not in standby + if Screens.Standby.inStandby: # in standby RecordTimerEntry.TryQuitMainloop() # start shutdown handling without screen else: Notifications.AddNotificationWithCallback(self.sendTryQuitMainloopNotification, MessageBox, _("A finished record timer wants to shut down\nyour Dreambox. Shutdown now?"), timeout = 20) @@ -367,10 +370,14 @@ def createTimer(xml): location = xml.getAttribute("location").encode("utf-8") else: location = None + if xml.hasAttribute("tags") and xml.getAttribute("tags"): + tags = xml.getAttribute("tags").encode("utf-8").split(' ') + else: + tags = None name = xml.getAttribute("name").encode("utf-8") #filename = xml.getAttribute("filename").encode("utf-8") - entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname = location) + entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname = location, tags = tags) entry.repeated = int(repeated) for l in elementsWithTag(xml.childNodes, "log"): @@ -418,8 +425,16 @@ class RecordTimer(timer.Timer): return root = doc.childNodes[0] + + # put out a message when at least one timer overlaps + checkit = True for timer in elementsWithTag(root.childNodes, "timer"): - self.record(createTimer(timer)) + newTimer = createTimer(timer) + if (self.record(newTimer, True, True) is not None) and (checkit == True): + from Tools.Notifications import AddPopup + from Screens.MessageBox import MessageBox + AddPopup(_("Timer overlap in timers.xml detected!\nPlease recheck it!"), type = MessageBox.TYPE_ERROR, timeout = 0, id = "TimerLoadFailed") + checkit = False # at moment it is enough when the message is displayed one time def saveTimer(self): #doc = xml.dom.minidom.Document() @@ -483,6 +498,8 @@ class RecordTimer(timer.Timer): list.append(' eit="' + str(timer.eit) + '"') if timer.dirname is not None: list.append(' location="' + str(stringToXML(timer.dirname)) + '"') + if timer.tags is not None: + list.append(' tags="' + str(stringToXML(' '.join(timer.tags))) + '"') list.append(' disabled="' + str(int(timer.disabled)) + '"') list.append(' justplay="' + str(int(timer.justplay)) + '"') list.append('>\n') @@ -521,12 +538,24 @@ class RecordTimer(timer.Timer): return timer.begin return -1 - def record(self, entry): + def record(self, entry, ignoreTSC=False, dosave=True): #wird von loadTimer mit dosave=False aufgerufen + timersanitycheck = TimerSanityCheck(self.timer_list,entry) + if not timersanitycheck.check(): + if ignoreTSC != True: + print "timer conflict detected!" + print timersanitycheck.getSimulTimerList() + return timersanitycheck.getSimulTimerList() + else: + print "ignore timer conflict" + elif timersanitycheck.doubleCheck(): + print "ignore double timer" entry.timeChanged() print "[Timer] Record " + str(entry) entry.Timer = self self.addTimerEntry(entry) - self.saveTimer() + if dosave: + self.saveTimer() + return None def isInTimer(self, eventid, begin, duration, service): time_match = 0