X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/5b8f2b881ba69de7269b27aa4c5dff7c7d4b2e5c..e7a4be1d20a33dbd97acfa021db2f8b82bf7a844:/RecordTimer.py diff --git a/RecordTimer.py b/RecordTimer.py index c9c8fe9e..0f425681 100644 --- a/RecordTimer.py +++ b/RecordTimer.py @@ -1,9 +1,8 @@ import time -import codecs #from time import datetime from Tools import Directories, Notifications -from Components.config import config, ConfigYesNo +from Components.config import config import timer import xml.dom.minidom @@ -164,23 +163,26 @@ class RecordTimerEntry(timer.TimerEntry, object): self.log(1, "'record service' failed") return False - event_id = self.eit - if event_id is None: - event_id = -1 - - prep_res=self.record_service.prepare(self.Filename + ".ts", self.begin, self.end, event_id) - if prep_res: - self.log(2, "'prepare' failed: error %d" % prep_res) - NavigationInstance.instance.stopRecordService(self.record_service) - self.record_service = None - return False - if self.repeated: epgcache = eEPGCache.getInstance() queryTime=self.begin+(self.end-self.begin)/2 evt = epgcache.lookupEventTime(rec_ref, queryTime) if evt: self.description = evt.getShortDescription() + event_id = evt.getEventId() + else: + event_id = -1 + else: + event_id = self.eit + if event_id is None: + event_id = -1 + + prep_res=self.record_service.prepare(self.Filename + ".ts", self.begin, self.end, event_id) + if prep_res: + self.log(2, "'prepare' failed: error %d" % prep_res) + NavigationInstance.instance.stopRecordService(self.record_service) + self.record_service = None + return False self.log(3, "prepare ok, writing meta information to %s" % self.Filename) try: @@ -313,7 +315,7 @@ class RecordTimerEntry(timer.TimerEntry, object): def gotRecordEvent(self, record, event): # TODO: this is not working (never true), please fix. (comparing two swig wrapped ePtrs) - if self.__record_service != record: + if self.__record_service.__deref__() != record.__deref__(): return self.log(16, "record event %d" % event) if event == iRecordableService.evRecordWriteError: @@ -327,7 +329,7 @@ class RecordTimerEntry(timer.TimerEntry, object): # TODO: this has to be done. elif event == iRecordableService.evStart: # maybe this should be configurable? - Notifications.AddPopup(text = _("A record has been started:\n%s") % self.description, type = MessageBox.TYPE_INFO, timeout = 3) + Notifications.AddPopup(text = _("A record has been started:\n%s") % self.name, type = MessageBox.TYPE_INFO, timeout = 3) # we have record_service as property to automatically subscribe to record service events def setRecordService(self, service): @@ -480,27 +482,19 @@ class RecordTimer(timer.Timer): file.close() def getNextZapTime(self): - llen = len(self.timer_list) - idx = 0 now = time.time() - while idx < llen: - timer = self.timer_list[idx] + for timer in self.timer_list: if not timer.justplay or timer.begin < now: - idx += 1 - else: - return timer.begin + continue + return timer.begin return -1 def getNextRecordingTime(self): - llen = len(self.timer_list) - idx = 0 now = time.time() - while idx < llen: - timer = self.timer_list[idx] + for timer in self.timer_list: if timer.justplay or timer.begin < now: - idx += 1 - else: - return timer.begin + continue + return timer.begin return -1 def record(self, entry): @@ -516,7 +510,34 @@ class RecordTimer(timer.Timer): chktimecmp_end = None end = begin + duration for x in self.timer_list: - if str(x.service_ref) == str(service): + check = x.service_ref.ref.toCompareString() == str(service) + if not check: + sref = x.service_ref.ref + parent_sid = sref.getUnsignedData(5) + parent_tsid = sref.getUnsignedData(6) + if parent_sid and parent_tsid: # check for subservice + sid = sref.getUnsignedData(1) + tsid = sref.getUnsignedData(2) + sref.setUnsignedData(1, parent_sid) + sref.setUnsignedData(2, parent_tsid) + sref.setUnsignedData(5, 0) + sref.setUnsignedData(6, 0) + check = x.service_ref.ref.toCompareString() == str(service) + num = 0 + if check: + check = False + event = eEPGCache.getInstance().lookupEventId(sref, eventid) + num = event and event.getNumOfLinkageServices() or 0 + sref.setUnsignedData(1, sid) + sref.setUnsignedData(2, tsid) + sref.setUnsignedData(5, parent_sid) + sref.setUnsignedData(6, parent_tsid) + for cnt in range(num): + subservice = event.getLinkageService(sref, cnt) + if sref.toCompareString() == subservice.toCompareString(): + check = True + break + if check: #if x.eit is not None and x.repeated == 0: # if x.eit == eventid: # return duration