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 = ":".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( 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() begin = event.getBeginTime() end = begin + event.getDuration() refstr = ':'.join(serviceref.ref.toString().split(':')[:11]) isRecordEvent = False for timer in self.session.nav.RecordTimer.timer_list: 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.open(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)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def timerAdd(self, instantTimer = False): 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: if instantTimer: self.removeTimer(timer) break 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(self.currentService, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(self.event)) if instantTimer: self.session.nav.RecordTimer.saveTimer() self.finishedAdd((True, newEntry)) else: self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def addTimer( session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, logentries=None, eit=0, ): serviceref = unquote(serviceref) 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 addTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, vpsinfo=None, logentries=None, eit=0, always_zap=-1): serviceref = unquote(serviceref) 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) } #VPS if vpsinfo is not None: timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap <> -1: if hasattr(timer,"always_zap"): timer.always_zap = always_zap == 1 except Exception, e: print e return { "result": False, "message": _("Could not add timer '%s'!") % name }
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.timer_list: 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 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 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 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 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: 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 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 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): 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"] 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(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() begin = event.getBeginTime() try: end = begin + event.getDuration() except: pass refstr = ':'.join(serviceref.ref.toString().split(':')[:11]) isRecordEvent = False for timer in self.session.nav.RecordTimer.timer_list: 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)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
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): 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 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 addTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, recordingtype, vpsinfo=None, logentries=None, eit=0, always_zap=-1, pipzap=-1, allow_duplicate=1, autoadjust=-1): rt = session.nav.RecordTimer if not dirname: dirname = preferredTimerPath() # IPTV Fix serviceref = serviceref.replace('%253a', '%3a') 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 = [] conflictinfo = [] for conflict in conflicts: errors.append(conflict.name) conflictinfo.append({ "serviceref": str(conflict.service_ref), "servicename": conflict.service_ref.getServiceName().replace( '\xc2\x86', '').replace('\xc2\x87', ''), "name": conflict.name, "begin": conflict.begin, "end": conflict.end, "realbegin": strftime(_("%d.%m.%Y %H:%M"), (localtime(float(conflict.begin)))), "realend": strftime(_("%d.%m.%Y %H:%M"), (localtime(float(conflict.end)))) }) return { "result": False, "message": _("Conflicting Timer(s) detected! %s") % " / ".join(errors), "conflicts": conflictinfo } # VPS if vpsinfo is not None: timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap != -1: if hasattr(timer, "always_zap"): timer.always_zap = always_zap == 1 if hasattr(timer, "zapbeforerecord"): timer.zapbeforerecord = always_zap == 1 if hasattr(timer, "autoadjust"): if autoadjust == -1: autoadjust = config.recording.adjust_time_to_event.value and 1 or 0 autoadjust = autoadjust if hasattr(timer, "allow_duplicate"): allow_duplicate = allow_duplicate if pipzap != -1: if hasattr(timer, "pipzap"): timer.pipzap = pipzap == 1 if recordingtype: timer.descramble = { "normal": True, "descrambled": True, "scrambled": False, }[recordingtype] timer.record_ecm = { "normal": False, "descrambled": True, "scrambled": True, }[recordingtype] except Exception as e: print(str(e)) return { "result": False, "message": _("Could not add timer '%s'!") % name } return {"result": True, "message": _("Timer '%s' added") % name}
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() duration = event.getDuration() end = begin + duration refstr = ':'.join(serviceref.ref.toString().split(':')[:11]) isRepeat = False prev_state = 0 for timer in self.session.nav.RecordTimer.timer_list: 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 if not isRecordEvent: x = self.session.nav.RecordTimer.isInTimer(eventid, begin, duration, refstr, True) if x and x[1][0] in (2, 7, 12): isRecordEvent = True timer = x[3] 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 addTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, vpsinfo=None, logentries=None, eit=0, always_zap=-1): rt = session.nav.RecordTimer if not dirname: dirname = preferredTimerPath() 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 = [] conflictinfo = [] for conflict in conflicts: errors.append(conflict.name) conflictinfo.append({ "serviceref": str(conflict.service_ref), "servicename": conflict.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', ''), "name": conflict.name, "begin" : conflict.begin, "end" : conflict.end, "realbegin":strftime("%d.%m.%Y %H:%M", (localtime(float(conflict.begin)))), "realend":strftime("%d.%m.%Y %H:%M", (localtime(float(conflict.end)))) }) return { "result": False, "message": _("Conflicting Timer(s) detected! %s") % " / ".join(errors), "conflicts" : conflictinfo } #VPS if vpsinfo is not None: timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap <> -1: if hasattr(timer,"always_zap"): timer.always_zap = always_zap == 1 except Exception, e: print e return { "result": False, "message": _("Could not add timer '%s'!") % name }
def addTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, vpsinfo=None, logentries=None, eit=0, always_zap=-1): rt = session.nav.RecordTimer if not dirname: dirname = preferredTimerPath() 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 = [] conflictinfo = [] for conflict in conflicts: errors.append(conflict.name) conflictinfo.append({ "serviceref": str(conflict.service_ref), "servicename": mangle_epg_text(conflict.service_ref.getServiceName()), "name": conflict.name, "begin": conflict.begin, "end": conflict.end, "realbegin": strftime("%d.%m.%Y %H:%M", (localtime(float(conflict.begin)))), "realend": strftime("%d.%m.%Y %H:%M", (localtime(float(conflict.end)))) }) return { "result": False, "message": _("Conflicting Timer(s) detected! %s") % " / ".join(errors), "conflicts": conflictinfo } # VPS if vpsinfo is not None: timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap != -1: if hasattr(timer, "always_zap"): timer.always_zap = always_zap == 1 except Exception as e: print e return { "result": False, "message": _("Could not add timer '%s'!") % name } return {"result": True, "message": _("Timer '%s' added") % name}
def editTimer(self, param): print("[WebComponents.Timer] editTimer") #OK first we need to parse all of your Parameters #For some of them (like afterEvent or justplay) we can use default values #for others (the serviceReference or the Begin/End time of the timer #we have to quit if they are not set/have illegal values if 'sRef' not in param: return (False, _("Missing Parameter: sRef")) service_ref = ServiceReference(param['sRef']) repeated = int(param.get('repeated') or 0) if 'begin' not in param: return (False, _("Missing Parameter: begin")) begin = int(float(param['begin'])) if 'end' not in param: return (False, _("Missing Parameter: end")) end = int(float(param['end'])) tm = int(time()) if tm <= begin: pass elif tm > begin and tm < end and repeated == 0: pass elif repeated == 0: return (False, _("Illegal Parameter value for Parameter begin : '%s'") % begin) if 'applyMargin' in param: if param['applyMargin'] == "1": begin -= config.recording.margin_before.value * 60 end += config.recording.margin_after.value * 60 if 'name' not in param: return (False, _("Missing Parameter: name")) name = param['name'] if 'description' not in param: return (False, _("Missing Parameter: description")) description = param['description'].replace("\n", " ") eit = param.get("eit", None) if eit is None or eit.strip() == "": eit = 0 else: try: eit = int(eit) except ValueError: return (False, _("Illegal Parameter value for Parameter eit : '%s'") % eit) print("[WebComponents.Sources.Timer]: eit=%d" % eit) if eit != 0: #check if the given event exists, if it doesn't the timer may be already running epgcache = eEPGCache.getInstance() event = epgcache.lookupEventId(eServiceReference(param['sRef']), eit) if event: eit = event.getEventId() #TODO add some subservice handling else: print( "[WebComponents.Sources.Timer] event not found, will be ignored" ) disabled = False #Default to: Enabled if 'disabled' in param: if param['disabled'] == "1": disabled = True else: #TODO - maybe we can give the user some useful hint here pass justplay = False #Default to: Record if 'justplay' in param: if param['justplay'] == "1": justplay = True afterEvent = 3 #Default to Afterevent: Auto if 'afterevent' in param: if (param['afterevent'] == "0") or (param['afterevent'] == "1") or (param['afterevent'] == "2"): afterEvent = int(param['afterevent']) dirname = preferredTimerPath() if 'dirname' in param and param['dirname']: dirname = param['dirname'] tags = [] if 'tags' in param and param['tags']: tags = unescape(param['tags']).split(' ') delold = 0 if 'deleteOldOnSave' in param: delold = int(param['deleteOldOnSave']) #Try to edit an existing Timer if delold: if 'channelOld' in param and param['channelOld']: channelOld = ServiceReference(param['channelOld']) else: return (False, _("Missing Parameter: channelOld")) # We do need all of the following Parameters, too, for being able of finding the Timer. # Therefore so we can neither use default values in this part nor can we # continue if a parameter is missing if 'beginOld' not in param: return (False, _("Missing Parameter: beginOld")) beginOld = int(param['beginOld']) if 'endOld' not in param: return (False, _("Missing Parameter: endOld")) endOld = int(param['endOld']) #let's try to find the timer try: for timer in self.recordtimer.timer_list + self.recordtimer.processed_timers: if str(timer.service_ref) == str(channelOld): if int(timer.begin) == beginOld: if int( timer.end ) == endOld: #we've found the timer we've been searching for #set the new data timer.service_ref = service_ref timer.begin = begin timer.end = end timer.name = name timer.description = description timer.eit = eit timer.disabled = disabled timer.justplay = justplay timer.afterEvent = afterEvent timer.dirname = dirname timer.tags = tags timer.repeated = repeated timer.processRepeated() #sanity check timersanitycheck = TimerSanityCheck( self.session.nav.RecordTimer.timer_list, timer) conflicts = None if not timersanitycheck.check(): conflicts = timersanitycheck.getSimulTimerList( ) if conflicts is not None: for x in conflicts: if x.setAutoincreaseEnd(entry): self.session.nav.RecordTimer.timeChanged( x) if not timersanitycheck.check(): conflicts = timersanitycheck.getSimulTimerList( ) if conflicts is None: self.recordtimer.timeChanged( timer) #go and save it print( "[WebComponents.Timer] editTimer: Timer changed!" ) return (True, "Timer '%s' changed" % (timer.name)) else: print( "[WebComponents.Timer] editTimer conflicting Timers: %s" % (conflicts)) msg = "" for t in conflicts: msg = "%s / %s" % (msg, t.name) return ( False, _("Conflicting Timer(s) detected! %s") % (msg)) except Exception as e: #obviously some value was not good, return an error import traceback print(traceback.format_exc()) return (False, _("Changing the timer for '%s' failed!") % name) return ( False, _("Could not find timer '%s' with given start and end time!") % name) #Try adding a new Timer try: #Create a new instance of recordtimerentry timer = RecordTimerEntry(service_ref, begin, end, name, description, eit, disabled, justplay, afterEvent, dirname=dirname, tags=tags) timer.repeated = repeated #add the new timer 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)) except Exception as e: #something went wrong, most possibly one of the given paramater-values was wrong print("[WebComponents.Timer] editTimer exception: %s" % (e)) return (False, _("Could not add timer '%s'!") % name) return (False, "Unexpected Error")
def addTimer( session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, logentries=None, eit=0, ): recordHandler = NavigationInstance.instance.RecordTimer msgTimeout = config.plugins.skyrecorder.msgtimeout.value if not dirname: try: dirname = config.plugins.skyrecorder.anytimefolder.value except Exception: dirname = preferredTimerPath() print "mao1", 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 print "rrgggg" conflicts = recordHandler.record(timer) if conflicts: errors = [] for conflict in conflicts: errors.append(conflict.name) print "duuuupppppppeeeeee" return {"result": False, "message": "Conflicting Timer(s) detected! %s" % " / ".join(errors)} except Exception, e: print "adupppeee" print e return {"result": False, "message": "Could not add timer '%s'!" % name}
def editTimer(self, param): print "[WebComponents.Timer] editTimer" #OK first we need to parse all of your Parameters #For some of them (like afterEvent or justplay) we can use default values #for others (the serviceReference or the Begin/End time of the timer #we have to quit if they are not set/have illegal values if 'sRef' not in param: return ( False, _("Missing Parameter: sRef") ) service_ref = ServiceReference(param['sRef']) repeated = int(param.get('repeated') or 0) if 'begin' not in param: return ( False, _("Missing Parameter: begin") ) begin = int(float(param['begin'])) if 'end' not in param: return ( False, _("Missing Parameter: end") ) end = int(float(param['end'])) tm = int( time() ) if tm <= begin: pass elif tm > begin and tm < end and repeated == 0: pass elif repeated == 0: return ( False, _("Illegal Parameter value for Parameter begin : '%s'") % begin ) if 'applyMargin' in param: if param['applyMargin'] == "1": begin -= config.recording.margin_before.value * 60 end += config.recording.margin_after.value * 60 if 'name' not in param: return ( False, _("Missing Parameter: name") ) name = param['name'] if 'description' not in param: return ( False, _("Missing Parameter: description") ) description = param['description'].replace("\n", " ") eit = param.get("eit", None) if eit is None or eit.strip() == "": eit = 0 else: try: eit = int(eit) except ValueError: return ( False, _("Illegal Parameter value for Parameter eit : '%s'") % eit ) print "[WebComponents.Sources.Timer]: eit=%d" %eit if eit != 0: #check if the given event exists, if it doesn't the timer may be already running epgcache = eEPGCache.getInstance() event = epgcache.lookupEventId(eServiceReference(param['sRef']), eit) if event: eit = event.getEventId() #TODO add some subservice handling else: print "[WebComponents.Sources.Timer] event not found, will be ignored" disabled = False #Default to: Enabled if 'disabled' in param: if param['disabled'] == "1": disabled = True else: #TODO - maybe we can give the user some useful hint here pass justplay = False #Default to: Record if 'justplay' in param: if param['justplay'] == "1": justplay = True if not justplay and not config.misc.recording_allowed.value: return (False, _("Recording is currently disabled!")) afterEvent = 3 #Default to Afterevent: Auto if 'afterevent' in param: if (param['afterevent'] == "0") or (param['afterevent'] == "1") or (param['afterevent'] == "2"): afterEvent = int(param['afterevent']) dirname = preferredTimerPath() if 'dirname' in param and param['dirname']: dirname = param['dirname'] tags = [] if 'tags' in param and param['tags']: tags = unescape(param['tags']).split(' ') delold = 0 if 'deleteOldOnSave' in param: delold = int(param['deleteOldOnSave']) #Try to edit an existing Timer if delold: if 'channelOld' in param and param['channelOld']: channelOld = ServiceReference(param['channelOld']) else: return ( False, _("Missing Parameter: channelOld") ) # We do need all of the following Parameters, too, for being able of finding the Timer. # Therefore so we can neither use default values in this part nor can we # continue if a parameter is missing if 'beginOld' not in param: return ( False, _("Missing Parameter: beginOld") ) beginOld = int(param['beginOld']) if 'endOld' not in param: return ( False, _("Missing Parameter: endOld") ) endOld = int(param['endOld']) #let's try to find the timer try: for timer in self.recordtimer.timer_list + self.recordtimer.processed_timers: if str(timer.service_ref) == str(channelOld): if int(timer.begin) == beginOld: if int(timer.end) == endOld: #we've found the timer we've been searching for #set the new data timer.service_ref = service_ref timer.begin = begin timer.end = end timer.name = name timer.description = description timer.eit = eit timer.disabled = disabled timer.justplay = justplay timer.afterEvent = afterEvent timer.dirname = dirname timer.tags = tags timer.repeated = repeated timer.processRepeated() #sanity check timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, timer) conflicts = None if not timersanitycheck.check(): conflicts = timersanitycheck.getSimulTimerList() if conflicts is not None: for x in conflicts: if x.setAutoincreaseEnd(entry): self.session.nav.RecordTimer.timeChanged(x) if not timersanitycheck.check(): conflicts = timersanitycheck.getSimulTimerList() if conflicts is None: self.recordtimer.timeChanged(timer) #go and save it print "[WebComponents.Timer] editTimer: Timer changed!" return ( True, "Timer '%s' changed" %(timer.name) ) else: print "[WebComponents.Timer] editTimer conflicting Timers: %s" %(conflicts) msg = "" for t in conflicts: msg = "%s / %s" %(msg, t.name) return (False, _("Conflicting Timer(s) detected! %s") %(msg)) except Exception as e: #obviously some value was not good, return an error import traceback print traceback.format_exc() return ( False, _("Changing the timer for '%s' failed!") % name ) return ( False, _("Could not find timer '%s' with given start and end time!") % name ) #Try adding a new Timer try: #Create a new instance of recordtimerentry timer = RecordTimerEntry(service_ref, begin, end, name, description, eit, disabled, justplay, afterEvent, dirname=dirname, tags=tags) timer.repeated = repeated #add the new timer 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)) except Exception, e: #something went wrong, most possibly one of the given paramater-values was wrong print "[WebComponents.Timer] editTimer exception: %s" %(e) return ( False, _("Could not add timer '%s'!") % name )
def addTimer(session, serviceref, begin, end, name, description, disabled, justplay, afterevent, dirname, tags, repeated, vpsinfo=None, logentries=None, eit=0, always_zap=-1): 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) } #VPS if vpsinfo is not None: timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"] timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"] timer.vpsplugin_time = vpsinfo["vpsplugin_time"] if always_zap <> -1: if hasattr(timer, "always_zap"): timer.always_zap = always_zap == 1 except Exception, e: print e return { "result": False, "message": _("Could not add timer '%s'!") % name }
def keyRecord(self): log.debug("keyRecord") 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 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 editTimer(self, param): print "[WebComponents.Timer] editTimer" #OK first we need to parse all of your Parameters #For some of them (like afterEvent or justplay) we can use default values #for others (the serviceReference or the Begin/End time of the timer #we have to quit if they are not set/have illegal values if 'serviceref' in param: param['sRef'] = str(param['serviceref']) if 'sRef' not in param: return ( False, "Missing Parameter: sRef" ) service_ref = ServiceReference(param['sRef']) repeated = int(param.get('repeated') or 0) if 'begin' not in param: return ( False, "Missing Parameter: begin" ) begin = int(float(param['begin'])) if 'end' not in param: return ( False, "Missing Parameter: end" ) end = int(float(param['end'])) tm = time() if tm <= begin: pass elif tm > begin and tm < end and repeated == 0: begin = time() elif repeated == 0: return ( False, "Illegal Parameter value for Parameter begin : '%s'" % begin ) if 'name' not in param: return ( False, "Missing Parameter: name" ) name = param['name'] if 'description' not in param: return ( False, "Missing Parameter: description" ) description = param['description'].replace("\n", " ") disabled = False #Default to: Enabled if 'disabled' in param: if param['disabled'] == "1": disabled = True else: #TODO - maybe we can give the user some useful hint here pass justplay = False #Default to: Record if 'justplay' in param: if param['justplay'] == "1": justplay = True afterEvent = 3 #Default to Afterevent: Auto if 'afterevent' in param: if (param['afterevent'] == "0") or (param['afterevent'] == "1") or (param['afterevent'] == "2"): afterEvent = int(param['afterevent']) dirname = preferredTimerPath() if 'dirname' in param and param['dirname']: dirname = param['dirname'] tags = [] if 'tags' in param and param['tags']: tags = unescape(param['tags']).split(' ') delold = 0 if 'deleteOldOnSave' in param: delold = int(param['deleteOldOnSave']) #Try to edit an existing Timer if delold: if 'channelOld' in param and param['channelOld']: channelOld = ServiceReference(param['channelOld']) else: return ( False, "Missing Parameter: channelOld" ) # We do need all of the following Parameters, too, for being able of finding the Timer. # Therefore so we can neither use default values in this part nor can we # continue if a parameter is missing if 'beginOld' not in param: return ( False, "Missing Parameter: beginOld" ) beginOld = int(param['beginOld']) if 'endOld' not in param: return ( False, "Missing Parameter: endOld" ) endOld = int(param['endOld']) #let's try to find the timer try: for timer in self.__recordtimer.timer_list + self.__recordtimer.processed_timers: if str(timer.service_ref) == str(channelOld): if int(timer.begin) == beginOld: if int(timer.end) == endOld: #we've found the timer we've been searching for #Delete the old entry self.__recordtimer.removeEntry(timer) old = timer timer = RecordTimerEntry(service_ref, begin, end, name, description, 0, disabled, justplay, afterEvent, dirname=dirname, tags=tags) timer.repeated = repeated timer.log_entries = old.log_entries timer.processRepeated() #send the changed timer back to enigma2 and hope it's good conflicts = self.__recordtimer.record(timer) if conflicts is None: print "[WebComponents.Timer] editTimer: Timer changed!" return ( True, "Timer '%s' changed" %(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)) except Exception: #obviously some value was not good, return an error return ( False, "Changing the timer for '%s' failed!" % name ) return ( False, "Could not find timer '%s' with given start and end time!" % name ) #Try adding a new Timer try: #Create a new instance of recordtimerentry timer = RecordTimerEntry(service_ref, begin, end, name, description, 0, disabled, justplay, afterEvent, dirname=dirname, tags=tags) timer.repeated = repeated #add the new timer 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)) except Exception, e: #something went wrong, most possibly one of the given paramater-values was wrong print "[WebComponents.Timer] editTimer exception: %s" %(e) return ( False, "Could not add timer '%s'!" % name )
def editTimer(self, param): print "[WebComponents.Timer] editTimer" #OK first we need to parse all of your Parameters #For some of them (like afterEvent or justplay) we can use default values #for others (the serviceReference or the Begin/End time of the timer #we have to quit if they are not set/have illegal values if 'sRef' not in param: return (False, "Missing Parameter: sRef") service_ref = ServiceReference(param['sRef']) repeated = int(param.get('repeated') or 0) if 'begin' not in param: return (False, "Missing Parameter: begin") begin = int(float(param['begin'])) if 'end' not in param: return (False, "Missing Parameter: end") end = int(float(param['end'])) tm = time() if tm <= begin: pass elif tm > begin and tm < end and repeated == 0: begin = time() elif repeated == 0: return (False, "Illegal Parameter value for Parameter begin : '%s'" % begin) if 'name' not in param: return (False, "Missing Parameter: name") name = param['name'] if 'description' not in param: return (False, "Missing Parameter: description") description = param['description'].replace("\n", " ") disabled = False #Default to: Enabled if 'disabled' in param: if param['disabled'] == "1": disabled = True else: #TODO - maybe we can give the user some useful hint here pass justplay = False #Default to: Record if 'justplay' in param: if param['justplay'] == "1": justplay = True afterEvent = 3 #Default to Afterevent: Auto if 'afterevent' in param: if (param['afterevent'] == "0") or (param['afterevent'] == "1") or (param['afterevent'] == "2"): afterEvent = int(param['afterevent']) dirname = preferredTimerPath() if 'dirname' in param and param['dirname']: dirname = param['dirname'] tags = [] if 'tags' in param and param['tags']: tags = unescape(param['tags']).split(' ') delold = 0 if 'deleteOldOnSave' in param: delold = int(param['deleteOldOnSave']) #Try to edit an existing Timer if delold: if 'channelOld' in param and param['channelOld']: channelOld = ServiceReference(param['channelOld']) else: return (False, "Missing Parameter: channelOld") # We do need all of the following Parameters, too, for being able of finding the Timer. # Therefore so we can neither use default values in this part nor can we # continue if a parameter is missing if 'beginOld' not in param: return (False, "Missing Parameter: beginOld") beginOld = int(param['beginOld']) if 'endOld' not in param: return (False, "Missing Parameter: endOld") endOld = int(param['endOld']) #let's try to find the timer try: for timer in self.recordtimer.timer_list + self.recordtimer.processed_timers: if str(timer.service_ref) == str(channelOld): if int(timer.begin) == beginOld: if int(timer.end) == endOld: #we've found the timer we've been searching for #Delete the old entry self.recordtimer.removeEntry(timer) old = timer timer = RecordTimerEntry(service_ref, begin, end, name, description, 0, disabled, justplay, afterEvent, dirname=dirname, tags=tags) timer.repeated = repeated timer.log_entries = old.log_entries timer.processRepeated() #send the changed timer back to enigma2 and hope it's good conflicts = self.recordtimer.record(timer) if conflicts is None: print "[WebComponents.Timer] editTimer: Timer changed!" return (True, "Timer '%s' changed" % (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)) except Exception: #obviously some value was not good, return an error return (False, "Changing the timer for '%s' failed!" % name) return ( False, "Could not find timer '%s' with given start and end time!" % name) #Try adding a new Timer try: #Create a new instance of recordtimerentry timer = RecordTimerEntry(service_ref, begin, end, name, description, 0, disabled, justplay, afterEvent, dirname=dirname, tags=tags) timer.repeated = repeated #add the new timer 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)) except Exception, e: #something went wrong, most possibly one of the given paramater-values was wrong print "[WebComponents.Timer] editTimer exception: %s" % (e) return (False, "Could not add timer '%s'!" % name)
def tvbrowser(session, request): if "name" in request.args: name = request.args['name'][0] else: name = "Unknown" if "description" in request.args: description = "".join(request.args['description'][0]) description = description.replace("\n", " ") else: description = "" disabled = False if "disabled" in request.args: if (request.args['disabled'][0] == "1"): disabled = True justplay = False if 'justplay' in request.args: if (request.args['justplay'][0] == "1"): justplay = True afterevent = 3 if 'afterevent' in request.args: if (request.args['afterevent'][0] == "0") or (request.args['afterevent'][0] == "1") or (request.args['afterevent'][0] == "2"): afterevent = int(request.args['afterevent'][0]) location = preferredTimerPath() if "dirname" in request.args: location = request.args['dirname'][0] if not location: location = "/hdd/movie/" begin = int(mktime((int(request.args['syear'][0]), int(request.args['smonth'][0]), int(request.args['sday'][0]), int(request.args['shour'][0]), int(request.args['smin'][0]), 0, 0, 0, -1))) end = int(mktime((int(request.args['syear'][0]), int(request.args['smonth'][0]), int(request.args['sday'][0]), int(request.args['ehour'][0]), int(request.args['emin'][0]), 0, 0, 0, -1))) if end < begin: end += 86400 repeated = int(request.args['repeated'][0]) if repeated == 0: for element in ("mo", "tu", "we", "th", "fr", "sa", "su", "ms", "mf"): if element in request.args: number = request.args[element][0] or 0 del request.args[element][0] repeated = repeated + int(number) if repeated > 127: repeated = 127 repeated = repeated if request.args['sRef'][0] is None: return { "result": False, "message": "Missing requesteter: sRef" } else: takeApart = unquote(request.args['sRef'][0]).decode('utf-8', 'ignore').encode('utf-8').split('|') sRef = takeApart[1] tags = [] if 'tags' in request.args and request.args['tags'][0]: tags = unescape(request.args['tags'][0]).split(' ') if request.args['command'][0] == "add": del request.args['command'][0] return addTimer(session, sRef, begin, end, name, description, disabled, justplay, afterevent, location , tags , repeated) elif request.args['command'][0] == "del": del request.args['command'][0] return removeTimer(session, sRef, begin, end) elif request.args['command'][0] == "change": del request.args['command'][0] return editTimer(session, sRef, begin, end, name, description, disabled, justplay, afterevent, location, tags, repeated, begin, end, serviceref) else: return { "result": False, "message": "Unknown command: '%s'" % request.args['command'][0] }
def tvbrowser(session, request): if "name" in request.args: name = request.args['name'][0] else: name = "Unknown" if "description" in request.args: description = "".join(request.args['description'][0]) description = description.replace("\n", " ") else: description = "" disabled = False if "disabled" in request.args: if (request.args['disabled'][0] == "1"): disabled = True justplay = False if 'justplay' in request.args: if (request.args['justplay'][0] == "1"): justplay = True afterevent = 3 if 'afterevent' in request.args: if (request.args['afterevent'][0] == "0") or (request.args['afterevent'][0] == "1") or (request.args['afterevent'][0] == "2"): afterevent = int(request.args['afterevent'][0]) location = preferredTimerPath() if "dirname" in request.args: location = request.args['dirname'][0] if not location: location = "/hdd/movie/" begin = int( mktime((int(request.args['syear'][0]), int(request.args['smonth'][0]), int(request.args['sday'][0]), int(request.args['shour'][0]), int(request.args['smin'][0]), 0, 0, 0, -1))) end = int( mktime((int(request.args['syear'][0]), int(request.args['smonth'][0]), int(request.args['sday'][0]), int(request.args['ehour'][0]), int(request.args['emin'][0]), 0, 0, 0, -1))) if end < begin: end += 86400 repeated = int(request.args['repeated'][0]) if repeated == 0: for element in ("mo", "tu", "we", "th", "fr", "sa", "su", "ms", "mf"): if element in request.args: number = request.args[element][0] or 0 del request.args[element][0] repeated = repeated + int(number) if repeated > 127: repeated = 127 repeated = repeated if request.args['sRef'][0] is None: return {"result": False, "message": _("Missing requesteter: sRef")} else: takeApart = unquote(request.args['sRef'][0]).decode( 'utf-8', 'ignore').encode('utf-8').split('|') sRef = takeApart[1] tags = [] if 'tags' in request.args and request.args['tags'][0]: tags = unquote(request.args['tags'][0]).split(' ') if request.args['command'][0] == "add": del request.args['command'][0] return addTimer(session, sRef, begin, end, name, description, disabled, justplay, afterevent, location, tags, repeated) elif request.args['command'][0] == "del": del request.args['command'][0] return removeTimer(session, sRef, begin, end, eit=None) elif request.args['command'][0] == "change": del request.args['command'][0] return editTimer(session, sRef, begin, end, name, description, disabled, justplay, afterevent, location, tags, repeated, begin, end, serviceref) else: return { "result": False, "message": _("Unknown command: '%s'") % request.args['command'][0] }
def record(self): 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 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)) 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)