def timerAdd(self): cur = self["list"].getCurrent() event = cur[0] if event is None: return serviceref = cur[1] isRecordEvent = isRepeat = firstNextRepeatEvent = isRunning = False eventid = event.getEventId() begin = event.getBeginTime() end = begin + event.getDuration() refstr = ':'.join(serviceref.ref.toString().split(':')[:11]) for timer in self.session.nav.RecordTimer.getAllTimersList(): needed_ref = ':'.join(timer.service_ref.ref.toString().split(':')[:11]) == refstr if needed_ref and timer.eit == eventid and (begin < timer.begin <= end or timer.begin <= begin <= timer.end): isRecordEvent = True break elif needed_ref and timer.repeated and self.session.nav.RecordTimer.isInRepeatTimer(timer, event): isRecordEvent = True break if isRecordEvent: isRepeat = timer.repeated prev_state = timer.state isRunning = prev_state in (1, 2) title_text = isRepeat and _("Attention, this is repeated timer!\n") or "" firstNextRepeatEvent = isRepeat and (begin < timer.begin <= end or timer.begin <= begin <= timer.end) and not timer.justplay menu = [(_("Delete timer"), "delete"),(_("Edit timer"), "edit")] buttons = ["red", "green"] if not isRunning: if firstNextRepeatEvent and timer.isFindRunningEvent() and not timer.isFindNextEvent(): menu.append((_("Options disable timer"), "disablerepeat")) else: menu.append((_("Disable timer"), "disable")) buttons.append("yellow") elif prev_state == 2 and firstNextRepeatEvent: menu.append((_("Options disable timer"), "disablerepeatrunning")) buttons.append("yellow") menu.append((_("Timer Overview"), "timereditlist")) def timerAction(choice): if choice is not None: if choice[1] == "delete": self.removeTimer(timer) elif choice[1] == "edit": self.session.openWithCallback(self.finishedEdit, TimerEntry, timer) elif choice[1] == "disable": self.disableTimer(timer, prev_state) elif choice[1] == "timereditlist": self.session.open(TimerEditList) elif choice[1] == "disablerepeatrunning": self.disableTimer(timer, prev_state, repeat=True, record=True) elif choice[1] == "disablerepeat": self.disableTimer(timer, prev_state, repeat=True) self.session.openWithCallback(timerAction, ChoiceBox, title=title_text + _("Select action for timer '%s'.") % timer.name, list=menu, keys=buttons) else: newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def recordNow(self, param): limitEvent = True if param == "undefinitely" or param == "infinite": ret = (True, "Infinite Instant recording started") limitEvent = False else: ret = (True, "Instant record for current Event started") serviceref = ServiceReference( self.session.nav.getCurrentlyPlayingServiceReference().toString()) event = None try: service = self.session.nav.getCurrentService() event = service.info().getEvent(0) except Exception: print "[Webcomponents.Timer] recordNow Exception!" begin = time() end = begin + 3600 * 10 name = "instant record" description = "" eventid = 0 if event is not None: curEvent = parseEvent(event) name = curEvent[2] description = curEvent[3] eventid = curEvent[4] if limitEvent: end = curEvent[1] else: if limitEvent: ret = (False, "No event found! Not recording!") if ret[0]: location = preferredInstantRecordPath() timer = RecordTimerEntry(serviceref, begin, end, name, description, eventid, False, False, 0, dirname=location) timer.dontSave = True recRet = self.recordtimer.record(timer) if recRet is not None: # a conflict is rather unlikely, but this can also indicate a non-recordable service ret = (False, "Timer conflict detected! Not recording!") return ret
def addTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, logentries=None, eit=0): rt = session.nav.RecordTimer print "mao1", dirname if not dirname: dirname = preferredTimerPath() print "mao2", dirname try: timer = RecordTimerEntry(ServiceReference(serviceref), begin, end, name, description, eit, disabled, justplay, afterevent, dirname=dirname, tags=tags) timer.repeated = repeated if logentries: timer.log_entries = logentries conflicts = rt.record(timer) if conflicts: errors = [] for conflict in conflicts: errors.append(conflict.name) return { "result": False, "message": "Conflicting Timer(s) detected! %s" % " / ".join(errors) } except Exception, e: print e return {"result": False, "message": "Could not add timer '%s'!" % name}
def addTimerByEventID(self, param): print "[WebComponents.Timer] addTimerByEventID", param if param['sRef'] is None: return (False, _("Missing Parameter: sRef")) if param['eventid'] is None: return (False, _("Missing Parameter: eventid")) justplay = False if param['justplay'] is not None: if param['justplay'] == "1": justplay = True if not justplay and not config.misc.recording_allowed.value: return (False, _("Recording is currently disabled!")) location = preferredTimerPath() if 'dirname' in param and param['dirname']: location = param['dirname'] tags = [] if 'tags' in param and param['tags']: tags = unescape(param['tags']).split(' ') epgcache = eEPGCache.getInstance() event = epgcache.lookupEventId(eServiceReference(param['sRef']), int(param['eventid'])) if event is None: return (False, _("EventId not found")) (begin, end, name, description, eit) = parseEvent(event) timer = RecordTimerEntry(ServiceReference(param['sRef']), begin, end, name, description, eit, False, justplay, AFTEREVENT.AUTO, dirname=location, tags=tags) conflicts = self.recordtimer.record(timer) if conflicts is None: return (True, _("Timer '%s' added") % (timer.name)) else: print "[WebComponents.Timer] editTimer conflicting Timers: %s" % ( conflicts) msg = "" for timer in conflicts: msg = "%s / %s" % (msg, timer.name) return (False, _("Conflicting Timer(s) detected! %s") % (msg))
def copyTimer(self, start, duration): starttime = start - config.recording.margin_before.value * 60 endtime = start + duration + config.recording.margin_after.value * 60 self.new_timer_copy = RecordTimerEntry( ServiceReference(self.rec_ref), starttime, endtime, self.timer.name, self.timer.description, self.timer.eit, False, False, AFTEREVENT.AUTO, False, self.timer.dirname, self.timer.tags) self.new_timer_copy.vpsplugin_enabled = True self.new_timer_copy.vpsplugin_overwrite = self.timer.vpsplugin_overwrite self.new_timer_copy.log(0, "[VPS] added this timer") NavigationInstance.instance.RecordTimer.record(self.new_timer_copy)
def timerAdd(self): if self.isRecording: return event = self.event serviceref = self.currentService if event is None: return eventid = event.getEventId() begin = event.getBeginTime() end = begin + event.getDuration() refstr = ':'.join(serviceref.ref.toString().split(':')[:11]) isRecordEvent = False for timer in self.session.nav.RecordTimer.getAllTimersList(): needed_ref = ':'.join( timer.service_ref.ref.toString().split(':')[:11]) == refstr if needed_ref and timer.eit == eventid and ( begin < timer.begin <= end or timer.begin <= begin <= timer.end): isRecordEvent = True break elif needed_ref and timer.repeated and self.session.nav.RecordTimer.isInRepeatTimer( timer, event): isRecordEvent = True break if isRecordEvent: title_text = timer.repeated and _( "Attention, this is repeated timer!\n") or "" menu = [(_("Delete timer"), "delete"), (_("Edit timer"), "edit")] buttons = ["red", "green"] def timerAction(choice): if choice is not None: if choice[1] == "delete": self.removeTimer(timer) elif choice[1] == "edit": self.session.openWithCallback(self.finishedEdit, TimerEntry, timer) self.session.openWithCallback( timerAction, ChoiceBox, title=title_text + _("Select action for timer '%s'.") % timer.name, list=menu, keys=buttons) else: newEntry = RecordTimerEntry(self.currentService, checkOldTimers=True, dirname=preferredTimerPath(), *parseEvent(self.event)) newEntry.justplay = config.recording.timer_default_type.value == "zap" newEntry.always_zap = config.recording.timer_default_type.value == "zap+record" self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def doInstantTimer(self, zap): event, service = self["list"].getCurrent()[:2] if event is None: return newEntry = RecordTimerEntry(service, checkOldTimers=True, *parseEvent(event)) self.instantRecordDialog = self.session.instantiateDialog( InstantRecordTimerEntry, newEntry, zap) retval = [True, self.instantRecordDialog.retval()] self.session.deleteDialogWithCallback(self.finishedAdd, self.instantRecordDialog, retval)
def recordNow(session, infinite): rt = session.nav.RecordTimer serviceref = session.nav.getCurrentlyPlayingServiceReference().toString() try: event = session.nav.getCurrentService().info().getEvent(0) except Exception: event = None if not event and not infinite: return { "result": False, "message": "No event found! Not recording!" } if event: (begin, end, name, description, eit) = parseEvent(event) begin = time() msg = "Instant record for current Event started" else: name = "instant record" description = "" eit = 0 if infinite: begin = time() end = begin + 3600 * 10 msg = "Infinite Instant recording started" timer = RecordTimerEntry( ServiceReference(serviceref), begin, end, name, description, eit, False, False, 0, dirname=preferredInstantRecordPath() ) timer.dontSave = True if rt.record(timer): return { "result": False, "message": "Timer conflict detected! Not recording!" } return { "result": True, "message": msg }
def getTimers(self): self._timer_list = [] self._processed_timers = [] baseurl = self.getBaseUrl() print("[ClientModeBoxRemoteTimer] get remote timer list") try: httprequest = urllib2.urlopen(baseurl + '/web/timerlist') xmldoc = minidom.parseString(httprequest.read()) timers = xmldoc.getElementsByTagName('e2timer') for timer in timers: serviceref = ServiceReference(getValueFromNode(timer, 'e2servicereference')) begin = int(getValueFromNode(timer, 'e2timebegin')) end = int(getValueFromNode(timer, 'e2timeend')) name = getValueFromNode(timer, 'e2name') description = getValueFromNode(timer, 'e2description') eit = int(getValueFromNode(timer, 'e2eit')) disabled = int(getValueFromNode(timer, 'e2disabled')) justplay = int(getValueFromNode(timer, 'e2justplay')) afterevent = int(getValueFromNode(timer, 'e2afterevent')) repeated = int(getValueFromNode(timer, 'e2repeated')) location = getValueFromNode(timer, 'e2location') tags = getValueFromNode(timer, 'e2tags').split(" ") entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname=location, tags=tags, descramble=1, record_ecm=0, isAutoTimer=0, always_zap=0) entry.repeated = repeated entry.orig = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname=location, tags=tags, descramble=1, record_ecm=0, isAutoTimer=0, always_zap=0) entry.orig.repeated = repeated if entry.shouldSkip() or entry.state == TimerEntry.StateEnded or (entry.state == TimerEntry.StateWaiting and entry.disabled): insort(self._processed_timers, entry) else: insort(self._timer_list, entry) except Exception as e: print("[ClientModeBoxRemoteTimer]", e) self.last_update_ts = time()
def recordNow(self, param): limitEvent = True if param == "undefinitely" or param == "infinite": ret = (True, "Infinite Instant recording started") limitEvent = False else: ret = (True, "Instant record for current Event started") serviceref = ServiceReference( self.session.nav.getCurrentlyPlayingServiceReference().toString()) event = None try: service = self.session.nav.getCurrentService() event = service.info().getEvent(0) except Exception: print "[Webcomponents.Timer] recordNow Exception!" begin = time() end = begin + 3600 * 10 name = "instant record" description = "" eventid = 0 if event is not None: curEvent = parseEvent(event) name = curEvent[2] description = curEvent[3] eventid = curEvent[4] if limitEvent: end = curEvent[1] else: if limitEvent: ret = (False, "No event found! Not recording!") if ret[0]: location = config.movielist.last_videodir.value timer = RecordTimerEntry(serviceref, begin, end, name, description, eventid, False, False, 0, dirname=location) timer.dontSave = True self.recordtimer.record(timer) return ret
def addTimerFromEventSilent(session, refreshCallback, event, service, zap=0): if event is None or event.getBeginTime() + event.getDuration() < time(): return timer = RecordTimerEntry(service, checkOldTimers=True, dirname=preferredTimerPath(), *parseEvent(event, service=service)) if zap: timer.justplay = 1 timer.end = timer.begin + (config.recording.margin_before.value * 60) + 1 timer.resetRepeated() checkForConflicts(session, refreshCallback, timer)
def timerAdd(self, instantTimer=False): cur = self["list"].getCurrent() event = cur[0] serviceref = cur[1] if event is None: return eventid = event.getEventId() refstr = serviceref.ref.toString() if self.key_green_choice == self.ENABLE_TIMER: for timer in self.session.nav.RecordTimer.processed_timers: if timer.eit == eventid and timer.service_ref.ref.toString( ) == refstr and timer.disabled == True: if instantTimer: self.removeTimer(timer, True) else: cb_func = lambda ret: not ret or self.removeTimer(timer ) self.session.openWithCallback( cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventid and timer.service_ref.ref.toString( ) == refstr: if instantTimer: self.removeTimer(timer, True) else: cb_func = lambda ret: not ret or self.removeTimer(timer ) self.session.openWithCallback( cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: newEntry = RecordTimerEntry(serviceref, checkOldTimers=True, dirname=preferredTimerPath(), *parseEvent(event)) if instantTimer: self.session.nav.RecordTimer.saveTimer() self.finishedAdd((True, newEntry), True) else: self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def timerAdd(self): cur = self["list"].getCurrent() event = cur[0] serviceref = cur[1] if event is None: return eventid = event.getEventId() refstr = serviceref.ref.toString() for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: cb_func = lambda ret : not ret or self.removeTimer(timer) self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def program_seek_vps_multiple_closed(self, retval): self.program_seek_vps_multiple_started = -1 self.found_vps_multiple = sorted(self.found_vps_multiple) for evt_begin, evt_id, evt in self.found_vps_multiple: # eigenen Timer überprüfen, wenn Zeiten nicht überschrieben werden dürfen if not self.timer.vpsplugin_overwrite and evt_begin <= self.timer.end: self.next_events.append(evt_id) self.timer.log(0, "[VPS] add event_id "+ str(evt_id)) else: canbeadded = True evt_begin += 60 evt_end = evt.getBeginTime() + evt.getDuration() - 60 now = time() for checktimer in self.session.nav.RecordTimer.timer_list: if checktimer == self.timer: continue if (checktimer.begin - now) > 3600*24: break if checktimer.service_ref.ref.toCompareString() == self.timer.service_ref.ref.toCompareString() or checktimer.service_ref.ref.toCompareString() == self.rec_ref.toCompareString(): if checktimer.begin <= evt_begin and checktimer.end >= evt_end: if not checktimer.vpsplugin_enabled or not checktimer.vpsplugin_overwrite: canbeadded = False # manuell angelegter Timer mit VPS if checktimer.vpsplugin_enabled and checktimer.name == "" and checktimer.vpsplugin_time is not None: checktimer.eit = evt_id checktimer.name = evt.getEventName() checktimer.description = evt.getShortDescription() checktimer.vpsplugin_time = None checktimer.log(0, "[VPS] changed timer (found same PDC-Time as in other VPS-recording)") canbeadded = False break if canbeadded: newevent_data = parseEvent(evt) newEntry = RecordTimerEntry(ServiceReference(self.rec_ref), *newevent_data) newEntry.vpsplugin_enabled = True newEntry.vpsplugin_overwrite = True newEntry.log(0, "[VPS] added this timer (found same PDC-Time as in other VPS-recording)") # Wenn kein Timer-Konflikt auftritt, wird der Timer angelegt. NavigationInstance.instance.RecordTimer.record(newEntry)
def recordTimerQuestion(self, manual=False): event, serviceref = self["list"].getCurrent()[:2] if event is None: return eventId = event.getEventId() refstr = getServiceRefStr(serviceref) title = None for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventId and refstr == getServiceRefStr( timer.service_ref): menu = [ (_("Delete Timer"), "CALLFUNC", self.removeChoiceBoxCB, lambda ret: self.removeTimer(timer)), (_("Edit Timer"), "CALLFUNC", self.removeChoiceBoxCB, lambda ret: self.editTimer(timer)), (_("Disable Timer"), "CALLFUNC", self.removeChoiceBoxCB, lambda ret: self.disableTimer(timer)) ] title = _("Select action for timer %s:") % event.getEventName() break else: if not manual: menu = [(_("Add Timer"), "CALLFUNC", self.choiceBoxCB, self.doRecordTimer), (_("Add AutoTimer"), "CALLFUNC", self.choiceBoxCB, self.addAutoTimerSilent)] title = "%s?" % event.getEventName() else: newEntry = RecordTimerEntry(serviceref, checkOldTimers=True, dirname=preferredTimerPath(), *parseEvent(event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) if title: self.choiceBoxDialog = self.session.instantiateDialog( ChoiceBox, title=title, list=menu, keys=["green", "blue"], skin_name="RecordTimerQuestion") posy = self["list"].getSelectionPosition() self.choiceBoxDialog.instance.move( ePoint(posy[0] - self.choiceBoxDialog.instance.size().width(), self.instance.position().y() + posy[1])) self.showChoiceBoxDialog()
def addCurrentTimer(self): event = None service = self.session.nav.getCurrentService() if service is not None: info = service.info() if info is not None: event = info.getEvent(0) # FIXME only works if already playing a service serviceref = ServiceReference(self.session.nav.getCurrentlyPlayingServiceOrGroup()) if event is None: data = (int(time()), int(time() + 60), "", "", None) else: data = parseEvent(event, description = False) self.addTimer(RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *data))
def timerAdd(self): cur = self["list"].getCurrent() event = cur[0] serviceref = cur[1] if event is None: return eventid = event.getEventId() refstr = ':'.join(serviceref.ref.toString().split(':')[:11]) for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventid and ':'.join( timer.service_ref.ref.toString().split( ':')[:11]) == refstr: menu = [(_("Delete timer"), "delete"), (_("Edit timer"), "edit")] buttons = ["red", "green"] if not timer.isRunning(): menu.append((_("Disable timer"), "disable")) buttons.append("yellow") menu.append((_("Timer Overview"), "timereditlist")) def timerAction(choice): if choice is not None: if choice[1] == "delete": self.removeTimer(timer) elif choice[1] == "edit": self.session.open(TimerEntry, timer) elif choice[1] == "disable": self.disableTimer(timer) elif choice[1] == "timereditlist": self.session.open(TimerEditList) self.session.openWithCallback( timerAction, ChoiceBox, title=_("Select action for timer %s:") % event.getEventName(), list=menu, keys=buttons) break else: newEntry = RecordTimerEntry(serviceref, checkOldTimers=True, dirname=preferredTimerPath(), *parseEvent(event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def timerAdd(self): if self.isRecording: return event = self.event serviceref = self.currentService if event is None: return eventid = event.getEventId() refstr = ':'.join(serviceref.ref.toString().split(':')[:11]) for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventid and ':'.join( timer.service_ref.ref.toString().split( ':')[:11]) == refstr: # disable dialog box -> workaround for non closed dialog when press key green for delete Timer (bsod when again green, blue or ok key was pressed) self.editTimer(timer) break cb_func1 = lambda ret: self.removeTimer(timer) cb_func2 = lambda ret: self.editTimer(timer) menu = [(_("Delete timer"), 'CALLFUNC', self.ChoiceBoxCB, cb_func1), (_("Edit timer"), 'CALLFUNC', self.ChoiceBoxCB, cb_func2)] self.ChoiceBoxDialog = self.session.instantiateDialog( ChoiceBox, title=_("Select action for timer %s:") % event.getEventName(), list=menu, keys=['green', 'blue'], skin_name="RecordTimerQuestion") self.ChoiceBoxDialog.instance.move( ePoint( self.instance.position().x() + self["key_green"].getPosition()[0], self.instance.position().y() + self["key_green"].getPosition()[1] - self["key_green"].instance.size().height())) self.showChoiceBoxDialog() break else: newEntry = RecordTimerEntry(self.currentService, checkOldTimers=True, dirname=preferredTimerPath(), *parseEvent(self.event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def RecordDateInputClosed(self, ret=None): if ret[0]: begin = ret[1] end = ret[2] info = {} name = glob.currentepglist[glob.currentchannelistindex][3] description = glob.currentepglist[glob.currentchannelistindex][4] eventid = glob.currentepglist[glob.currentchannelistindex][1] self.getProgramInfoAndEvent(info, name) serviceref = info["serviceref"] if isinstance(serviceref, eServiceReference): serviceref = ServiceReference(serviceref) recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname=str( cfg.downloadlocation.getValue())) recording.dontSave = True simulTimerList = self.session.nav.RecordTimer.record(recording) if simulTimerList is None: # no conflict recording.autoincrease = False self.recording.append(recording) self.session.open(MessageBox, _('Recording Started.'), MessageBox.TYPE_INFO, timeout=5) else: self.session.open(MessageBox, _('Recording Failed.'), MessageBox.TYPE_WARNING) return else: self.session.open(MessageBox, _('Recording Failed.'), MessageBox.TYPE_WARNING) return
def addCurrentTimer(self): event = None service = self.session.nav.getCurrentService() if service is not None: info = service.info() if info is not None: event = info.getEvent(0) # FIXME only works if already playing a service serviceref = ServiceReference(self.session.nav.getCurrentlyPlayingServiceOrGroup()) if event is None: data = (int(time()), int(time() + 60), "", "", None) else: data = parseEvent(event, description=False) timer = RecordTimerEntry(serviceref, checkOldTimers=True, dirname=preferredTimerPath(), *data) timer.justplay = config.recording.timer_default_type.value == "zap" timer.always_zap = config.recording.timer_default_type.value == "zap+record" self.addTimer(timer)
def okClicked(self): current = self["channellist"].getCurrent() if current is None: return if self.mode == "tvcharts": service = eServiceReference(str(current[0][0])) self.session.nav.playService(service) elif self.mode == "timercharts": serviceref = ServiceReference(current[0][0]) eventid = int(current[0][1]) event = self.getEventFromId(serviceref, eventid) if event is not None: newEntry = RecordTimerEntry(serviceref, *parseEvent(event), checkOldTimers = True, dirname = preferredTimerPath()) self.session.openWithCallback(self.addTimerCallback, TimerEntry, newEntry) else: self.session.open(MessageBox, "Sorry, no EPG Info available for this event", type=MessageBox.TYPE_ERROR, timeout=10) elif self.mode == "moviecharts": print("[TVCharts] ToDo: Show Movie Info here ...") return
def timerAdd(self): def callback(choice): if choice: choice(self) self.closeChoiceBoxDialog() if self.isRecording: return event = self.event if event is None: return timer = self.session.nav.RecordTimer.getTimerForEvent( self.currentService, event) if timer is not None: cb_func1 = lambda ret: self.removeTimer(timer) cb_func2 = lambda ret: self.editTimer(timer) menu = [(_("Delete Timer"), 'CALLFUNC', callback, cb_func1), (_("Edit Timer"), 'CALLFUNC', callback, cb_func2)] self.ChoiceBoxDialog = self.session.instantiateDialog( ChoiceBox, title=_("Select action for timer %s:") % event.getEventName(), list=menu, keys=['green', 'blue'], skin_name="RecordTimerQuestion") self.ChoiceBoxDialog.instance.move( ePoint( self.instance.position().x() + self["key_green"].getPosition()[0], self.instance.position().y() + self["key_green"].getPosition()[1] - self["key_green"].instance.size().height())) self.showChoiceBoxDialog() else: newEntry = RecordTimerEntry(self.currentService, checkOldTimers=True, dirname=preferredTimerPath(), *parseEvent( self.event, service=self.currentService)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def addTimerByEventID(self, param): print "[WebComponents.Timer] addTimerByEventID", param if param['sRef'] is None: return (False, "Missing Parameter: sRef") if param['eventid'] is None: return (False, "Missing Parameter: eventid") justplay = False if param['justplay'] is not None: if param['justplay'] == "1": justplay = True location = config.movielist.last_timer_videodir.value if 'dirname' in param and param['dirname']: location = param['dirname'] tags = [] if 'tags' in param and param['tags']: tags = unescape(param['tags']).split(' ') epgcache = eEPGCache.getInstance() event = epgcache.lookupEventId(eServiceReference(param['sRef']), int(param['eventid'])) if event is None: return (False, "EventId not found") (begin, end, name, description, eit) = parseEvent(event) timer = RecordTimerEntry(ServiceReference(param['sRef']), begin, end, name, description, eit, False, justplay, AFTEREVENT.NONE, dirname=location, tags=tags) self.recordtimer.record(timer) return (True, "Timer '%s' added" % (timer.name))
def AddConfirmedTimer(self, answer): cur = self["epg_list"].getCurrent() event = cur[0] serviceref = cur[1] if event is None: return eventid = event.getEventId() refstr = serviceref.ref.toString() answer = answer and answer[1] if answer == "AT": addAutotimerFromEvent(self.session, evt=event, service=serviceref) elif answer == "NT": for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventid and timer.service_ref.ref.toString() == refstr: cb_func = lambda ret: not ret or self.removeTimer(timer) self.session.openWithCallback(cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: newEntry = RecordTimerEntry(serviceref, checkOldTimers=True, *parseEvent(event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry) elif answer == "ATV": AutoTimerView(self.session)
def timerAdd(self): if self.isRecording: return event = self.event serviceref = self.currentService if event is None: return eventid = event.getEventId() refstr = ':'.join(serviceref.ref.toString().split(':')[:11]) for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventid and ':'.join( timer.service_ref.ref.toString().split( ':')[:11]) == refstr: menu = [(_("Delete timer"), "delete"), (_("Edit timer"), "edit")] buttons = ["red", "green"] def timerAction(choice): if choice is not None: if choice[1] == "delete": self.removeTimer(timer) elif choice[1] == "edit": self.session.open(TimerEntry, timer) self.session.openWithCallback( timerAction, ChoiceBox, title=_("Select action for timer %s:") % event.getEventName(), list=menu, keys=buttons) break else: newEntry = RecordTimerEntry(self.currentService, checkOldTimers=True, dirname=preferredTimerPath(), *parseEvent(self.event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def record(self): logDebug("SPI: record") if self.event and self.service: event = self.event ref = self.service if event is None: return eventid = event.getEventId() eref = eServiceReference(str(ref)) refstr = eref.toString() for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventid and timer.service_ref.ref.toString( ) == refstr: cb_func = lambda ret: not ret or self.removeTimer(timer) self.session.openWithCallback( cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: #newEntry = RecordTimerEntry(ServiceReference(ref), checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(self.event)) begin, end, name, description, eit = parseEvent(self.event) from SeriesPlugin import refactorTitle, refactorDescription if self.data: name = refactorTitle(name, self.data) description = refactorDescription(description, self.data) #newEntry = RecordTimerEntry(ServiceReference(refstr), begin, end, name, description, eit, dirname = preferredTimerPath()) newEntry = RecordTimerEntry(ServiceReference(str(ref)), begin, end, name, description, eit, dirname=preferredTimerPath()) #newEntry = RecordTimerEntry(refstr, begin, end, name, description, eit, dirname = preferredTimerPath()) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def RecordDateInputClosed(self, ret=None): if ret: begin = ret[1] end = ret[2] name = ret[3] description = glob.currentepglist[glob.currentchannelistindex][4] eventid = int(self.streamurl.rpartition('/')[-1].partition('.')[0]) serviceref = eServiceReference(1, 0, self.streamurl) if isinstance(serviceref, eServiceReference): serviceref = ServiceReference(serviceref) recording = RecordTimerEntry(serviceref, begin, end, name, description, eventid, dirname=str( cfg.downloadlocation.getValue())) recording.dontSave = True simulTimerList = self.session.nav.RecordTimer.record(recording) if simulTimerList is None: # no conflict recording.autoincrease = False self.session.open(MessageBox, _('Recording Timer Set.'), MessageBox.TYPE_INFO, timeout=5) else: self.session.open(MessageBox, _('Recording Failed.'), MessageBox.TYPE_WARNING) return else: return
def timerAdd(self): if self.isRecording: return event = self.event serviceref = self.serviceRef if event is None: return eventid = event.getEventId() refstr = ":".join(serviceref.ref.toString().split(":")[:11]) for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventid and ":".join( timer.service_ref.ref.toString().split( ":")[:11]) == refstr: # Disable dialog box -> Workaround for non closed dialog when press key GREEN for Delete Timer. (Crash when again GREEN, BLUE or OK key was pressed.) self.editTimer(timer) break else: newEntry = RecordTimerEntry(self.serviceRef, checkOldTimers=True, dirname=preferredTimerPath(), *parseEvent(self.event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def timerAdd(self): if self.isRecording: return event = self.event serviceref = self.currentService if event is None: return eventid = event.getEventId() refstr = serviceref.ref.toString() for timer in self.session.nav.RecordTimer.timer_list: if timer.eit == eventid and timer.service_ref.ref.toString( ) == refstr: cb_func = lambda ret: not ret or self.removeTimer(timer) self.session.openWithCallback( cb_func, MessageBox, _("Do you really want to delete %s?") % event.getEventName()) break else: newEntry = RecordTimerEntry(self.currentService, checkOldTimers=True, *parseEvent(self.event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def check_and_add_event(self, neweventid): if not config.plugins.vps.allow_seeking_multiple_pdc.value: return epgcache = eEPGCache.getInstance() evt = epgcache.lookupEventId(self.rec_ref, neweventid) if evt: evt_begin = evt.getBeginTime() + 60 evt_end = evt.getBeginTime() + evt.getDuration() - 60 if evt_begin < self.timer.begin: return for checktimer in self.session.nav.RecordTimer.timer_list: if checktimer == self.timer: continue if (checktimer.begin - evt_begin) > 3600 * 2: break compareString = checktimer.service_ref.ref.toCompareString() if compareString == self.timer.service_ref.ref.toCompareString( ) or compareString == self.rec_ref.toCompareString(): if checktimer.eit == neweventid: return if checktimer.begin <= evt_begin and checktimer.end >= evt_end: if checktimer.vpsplugin_enabled is None or not checktimer.vpsplugin_enabled: return # manuell angelegter Timer mit VPS if checktimer.name == "" and checktimer.vpsplugin_time is not None: checktimer.eit = neweventid checktimer.name = evt.getEventName() checktimer.description = evt.getShortDescription() checktimer.vpsplugin_time = None checktimer.log( 0, "[VPS] changed timer (found same PDC-Time as in other VPS-recording)" ) return # eigenen Timer überprüfen, wenn Zeiten nicht überschrieben werden dürfen if not self.timer.vpsplugin_overwrite and evt_begin <= self.timer.end: check_already_existing = [ x for (x, y) in self.next_events if y == neweventid ] if len(check_already_existing) > 0: start = check_already_existing.pop() if start == evt_begin: return else: self.next_events.remove((start, neweventid)) self.timer.log( 0, "[VPS] delete event_id " + str(neweventid) + " because of delay " + str(evt_begin - start)) self.next_events.append((evt_begin, neweventid)) self.next_events = sorted(self.next_events) self.timer.log(0, "[VPS] add event_id " + str(neweventid)) else: newevent_data = parseEvent(evt) newEntry = RecordTimerEntry(ServiceReference(self.rec_ref), *newevent_data) newEntry.vpsplugin_enabled = True newEntry.vpsplugin_overwrite = True newEntry.dirname = self.timer.dirname newEntry.log( 0, "[VPS] added this timer (found same PDC-Time as in other VPS-recording)" ) # Wenn kein Timer-Konflikt auftritt, wird der Timer angelegt. res = NavigationInstance.instance.RecordTimer.record(newEntry) self.timer.log(0, "[VPS] added another timer, res " + str(res))