def addTimerByEventId(session, eventid, serviceref, justplay, dirname, tags): serviceref = unquote(serviceref) event = eEPGCache.getInstance().lookupEventId(eServiceReference(serviceref), eventid) if event is None: return { "result": False, "message": "EventId not found" } (begin, end, name, description, eit) = parseEvent(event) return addTimer( session, serviceref, begin, end, name, description, False, justplay, AFTEREVENT.AUTO, dirname, tags, False, None, eit )
def addTimerByEventId(session, eventid, serviceref, justplay, dirname, tags, vpsinfo, always_zap): event = eEPGCache.getInstance().lookupEventId(eServiceReference(serviceref), eventid) if event is None: return { "result": False, "message": _("EventId not found") } (begin, end, name, description, eit) = parseEvent(event) if justplay: begin += config.recording.margin_before.value * 60 end = begin + 1 return addTimer( session, serviceref, begin, end, name, description, False, justplay, AFTEREVENT.AUTO, dirname, tags, False, vpsinfo, None, eit, always_zap )
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): cur = self["list"].getCurrent() event = cur[0] if event is None: return eventid = event.getEventId() serviceref = cur[1] 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, *parseEvent(event)) self.session.openWithCallback(self.finishedTimerAdd, TimerEntry, newEntry)
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 getStatusInfo(self): statusinfo = {} # Get Current Volume and Mute Status vcontrol = eDVBVolumecontrol.getInstance() statusinfo['volume'] = vcontrol.getVolume() statusinfo['muted'] = vcontrol.isMuted() # Get currently running Service event = None serviceref = self.session.nav.getCurrentlyPlayingServiceReference() if serviceref is not None: serviceHandler = eServiceCenter.getInstance() serviceHandlerInfo = serviceHandler.info(serviceref) service = self.session.nav.getCurrentService() serviceinfo = service and service.info() event = serviceinfo and serviceinfo.getEvent(0) else: event = None if event is not None: curEvent = parseEvent(event) statusinfo['currservice_name'] = curEvent[2].replace('\xc2\x86', '').replace('\xc2\x87', '') statusinfo['currservice_serviceref'] = serviceref.toString() statusinfo['currservice_begin'] = strftime("%H:%M", (localtime(int(curEvent[0])+(config.recording.margin_before.value*60)))) statusinfo['currservice_end'] = strftime("%H:%M", (localtime(int(curEvent[1])-(config.recording.margin_after.value*60)))) statusinfo['currservice_description'] = curEvent[3] if len(curEvent[3].decode('utf-8')) > 220: statusinfo['currservice_description'] = curEvent[3].decode('utf-8')[0:220].encode('utf-8') + "..." statusinfo['currservice_station'] = serviceHandlerInfo.getName(serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') else: statusinfo['currservice_name'] = "N/A" statusinfo['currservice_begin'] = "" statusinfo['currservice_end'] = "" statusinfo['currservice_description'] = "" if serviceref: statusinfo['currservice_serviceref'] = serviceref.toString() statusinfo['currservice_station'] = serviceHandlerInfo.getName(serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') # Get Standby State from Screens.Standby import inStandby if inStandby == None: statusinfo['inStandby'] = "false" else: statusinfo['inStandby'] = "true" # Get recording state recs = NavigationInstance.instance.getRecordings() if recs: statusinfo['isRecording'] = "true" else: statusinfo['isRecording'] = "false" return statusinfo
def getStatusInfo(self): statusinfo = {} # Get Current Volume and Mute Status vcontrol = eDVBVolumecontrol.getInstance() statusinfo["volume"] = vcontrol.getVolume() statusinfo["muted"] = vcontrol.isMuted() # Get currently running Service event = None serviceref = self.session.nav.getCurrentlyPlayingServiceReference() if serviceref is not None: serviceHandler = eServiceCenter.getInstance() serviceHandlerInfo = serviceHandler.info(serviceref) service = self.session.nav.getCurrentService() serviceinfo = service and service.info() event = serviceinfo and serviceinfo.getEvent(0) else: event = None if event is not None: curEvent = parseEvent(event) statusinfo["currservice_name"] = curEvent[2].replace("\xc2\x86", "").replace("\xc2\x87", "") statusinfo["currservice_serviceref"] = serviceref.toString() statusinfo["currservice_begin"] = strftime( "%H:%M", (localtime(int(curEvent[0]) + (config.recording.margin_before.value * 60))) ) statusinfo["currservice_end"] = strftime( "%H:%M", (localtime(int(curEvent[1]) - (config.recording.margin_after.value * 60))) ) statusinfo["currservice_description"] = curEvent[3] if len(curEvent[3]) > 220: statusinfo["currservice_description"] = curEvent[3][0:220] + "..." statusinfo["currservice_station"] = ( serviceHandlerInfo.getName(serviceref).replace("\xc2\x86", "").replace("\xc2\x87", "") ) else: statusinfo["currservice_name"] = "N/A" statusinfo["currservice_begin"] = "" statusinfo["currservice_end"] = "" statusinfo["currservice_description"] = "" if serviceref: statusinfo["currservice_serviceref"] = serviceref.toString() statusinfo["currservice_station"] = ( serviceHandlerInfo.getName(serviceref).replace("\xc2\x86", "").replace("\xc2\x87", "") ) # Get Standby State if inStandby == None: statusinfo["inStandby"] = "false" else: statusinfo["inStandby"] = "true" return statusinfo
def timerAdd(self): cur = self["list"].getCurrent() event = cur[0] serviceref = cur[1] if event is None: return 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.open(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, *parseEvent(event)) self.session.openWithCallback(self.finishedTimerAdd, TimerEntry, newEntry)
def updateStatus(self): print "[TVCharts] Status Update ..." self.DBStatusTimer.stop() if not config.plugins.tvcharts.enabled.value or Screens.Standby.inStandby: return # Get Channelname sref = self.session.nav.getCurrentlyPlayingServiceReference() if sref is not None: ref = eServiceReference(sref.toString()) ref.setName("") serviceHandler = eServiceCenter.getInstance() info = serviceHandler.info(ref) channel_name = info and info.getName(ref).replace('\xc2\x86', '').replace('\xc2\x87', '').decode("utf-8", "ignore").encode("utf-8") or "" self.serviceref = ref.toString() else: channel_name = "" self.serviceref = "" # Get Event Info service = self.session.nav.getCurrentService() info = service and service.info() event = info and info.getEvent(0) event_name = event and event.getEventName() or "" event_description = "" event_begin = 0 if event is not None: curEvent = parseEvent(event) event_begin = int(curEvent[0])+(config.recording.margin_before.value*60) event_description = event.getExtendedDescription() # Get Box Info self.BoxID = iNetwork.getAdapterAttribute("eth0", "mac") self.DeviceName = HardwareInfo().get_device_name() self.EnigmaVersion = about.getEnigmaVersionString() self.ImageVersion = about.getVersionString() # Get TimerList self.timerlist = "" if config.plugins.tvcharts.submittimers.value and self.LastTimerlistUpdate <= (time()-1800): self.LastTimerlistUpdate = time() try: for timer in self.recordtimer.timer_list: if timer.disabled == 0 and timer.justplay == 0: self.timerlist += "%s|%s|%s|%s|%s|%s\n" % (timer.eit,str(int(timer.begin)+(config.recording.margin_before.value*60)), str(int(timer.end)-(config.recording.margin_after.value*60)), str(timer.service_ref), timer.name, timer.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', '').decode("utf-8", "ignore").encode("utf-8")) except Exception: print "[TVCharts] Error loading timers!" # Status Update getPage(url='http://www.dreambox-plugins.de/feeds/TVCharts/status.php', method='POST', headers={'Content-Type':'application/x-www-form-urlencoded'}, postdata=urlencode({'boxid' : self.BoxID, 'devicename' : self.DeviceName, 'imageversion' : self.ImageVersion, 'enigmaversion' : self.EnigmaVersion, 'lastchannel' : channel_name, 'lastevent' : event_name, 'eventdescr' : event_description, 'lastbegin' : event_begin, 'lastserviceref' : self.serviceref, 'timerlist' : self.timerlist})).addErrback(self.updateError) # Restart Timer self.DBStatusTimer.start(900000, True)
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 recordNow(self, param): if not config.misc.recording_allowed.value: return (False, _("Recording is currently disabled!")) 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 timerAdd(self): cur = self["list"].getCurrent() event = cur[0] if event is None: return eventid = event.getEventId() serviceref = cur[1] 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, *parseEvent(event)) self.session.openWithCallback(self.finishedTimerAdd, 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 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 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 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 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 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 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 buildlist(self): #current_channel = EPGNow.CurrentService(self.session).command() serviceref = self.session.nav.getCurrentlyPlayingServiceReference() service = self.session.nav.getCurrentService() info = service.info() default = { 'servicename': info.getName(), 'eventname': '', 'comment': '', } epg = eEPGCache.getInstance() event = epg.lookupEventTime(serviceref, -1, 0) if event is not None: curEvent = parseEvent(event) default['eventname'] = curEvent[2] #description = curEvent[3] #eventid = curEvent[4] fields = [ {'name': 'servicename', 'field': ConfigText(fixed_size = False) , 'text': _('Channellname'), 'value': default['servicename']}, {'name': 'eventname', 'field': ConfigText(fixed_size = False) , 'text': _('Event-Name'), 'value': default['eventname']}, {'name': 'comment', 'field': ConfigText(fixed_size = False) , 'text': _('Comment'), 'value': default['comment']}, #{'name': 'grabimage', 'field': ConfigYesNo() , 'text': 'Attach Screenshot', 'value': True}, ] list = [] for field in fields: field['field'].setValue(field['value']) list.append(getConfigListEntry(_(field['text']), field['field'], field['name'])) return list
def getStatusInfo2(session): statusinfo = {} vcontrol = eDVBVolumecontrol.getInstance() statusinfo['volume'] = vcontrol.getVolume() statusinfo['muted'] = vcontrol.isMuted() event = None serviceref = session.nav.getCurrentlyPlayingServiceReference() if serviceref is not None: serviceHandler = eServiceCenter.getInstance() serviceHandlerInfo = serviceHandler.info(serviceref) service = session.nav.getCurrentService() serviceinfo = service and service.info() event = serviceinfo and serviceinfo.getEvent(0) else: event = None if event is not None: curEvent = parseEvent(event) statusinfo['currservice_name'] = curEvent[2].replace('\xc2\x86', '').replace('\xc2\x87', '') statusinfo['currservice_serviceref'] = serviceref.toString() statusinfo['currservice_begin'] = strftime('%H:%M', localtime(int(curEvent[0]) + config.recording.margin_before.value * 60)) statusinfo['currservice_end'] = strftime('%H:%M', localtime(int(curEvent[1]) - config.recording.margin_after.value * 60)) statusinfo['currservice_description'] = curEvent[3] statusinfo['currservice_station'] = serviceHandlerInfo.getName(serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') else: statusinfo['currservice_name'] = 'N/A' statusinfo['currservice_begin'] = '' statusinfo['currservice_end'] = '' statusinfo['currservice_description'] = '' if serviceref: statusinfo['currservice_serviceref'] = serviceref.toString() statusinfo['currservice_station'] = serviceHandlerInfo.getName(serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') if inStandby == None: statusinfo['inStandby'] = 'false' else: statusinfo['inStandby'] = 'true' return statusinfo
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))
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, dirname = preferredTimerPath(), *parseEvent(self.event)) self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
def getStatusInfo(self): # Get Current Volume and Mute Status vcontrol = eDVBVolumecontrol.getInstance() statusinfo = { 'volume': vcontrol.getVolume(), 'muted': vcontrol.isMuted(), 'transcoding': getTranscodingSupport(), 'currservice_filename': "", 'currservice_id': -1, 'state': { 'standby': False, 'recording': False } } # Get currently running Service event = None serviceref = self.session.nav.getCurrentlyPlayingServiceReference() serviceref_string = None currservice_station = None if serviceref is not None: serviceHandler = eServiceCenter.getInstance() serviceHandlerInfo = serviceHandler.info(serviceref) service = self.session.nav.getCurrentService() serviceinfo = service and service.info() event = serviceinfo and serviceinfo.getEvent(0) serviceref_string = serviceref.toString() currservice_station = mangle_epg_text( serviceHandlerInfo.getName(serviceref)) else: event = None serviceHandlerInfo = None if event is not None: # (begin, end, name, description, eit) curEvent = parseEvent(event) margin_before = config.recording.margin_before.value margin_after = config.recording.margin_after.value begin_timestamp = int(curEvent[0]) + (margin_before * 60) end_timestamp = int(curEvent[1]) - (margin_after * 60) statusinfo['currservice_name'] = mangle_epg_text(curEvent[2]) statusinfo['currservice_serviceref'] = serviceref_string statusinfo['currservice_begin'] = time.strftime( "%H:%M", (time.localtime(begin_timestamp))) statusinfo['currservice_begin_timestamp'] = begin_timestamp statusinfo['currservice_end'] = time.strftime( "%H:%M", (time.localtime(end_timestamp))) statusinfo['currservice_end_timestamp'] = end_timestamp statusinfo['currservice_description'] = curEvent[3] statusinfo['currservice_station'] = currservice_station if statusinfo['currservice_serviceref'].startswith('1:0:0'): fn = '/' + '/'.join(serviceref_string.split("/")[1:]) statusinfo['currservice_filename'] = fn statusinfo['currservice_fulldescription'] = mangle_epg_text( event.getExtendedDescription()) statusinfo['currservice_id'] = curEvent[4] else: statusinfo['currservice_name'] = "N/A" statusinfo['currservice_begin'] = "" statusinfo['currservice_end'] = "" statusinfo['currservice_description'] = "" statusinfo['currservice_fulldescription'] = "N/A" if serviceref: statusinfo['currservice_serviceref'] = serviceref_string if serviceHandlerInfo: statusinfo['currservice_station'] = currservice_station elif serviceref_string.find("http") != -1: statusinfo['currservice_station'] = serviceref_string.replace( '%3a', ':')[serviceref_string.find("http"):] else: statusinfo['currservice_station'] = "N/A" # Get Standby State from Screens.Standby import inStandby statusinfo['state']['standby'] = inStandby is not None if statusinfo['state']['standby'] is False: statusinfo['inStandby'] = "false" else: statusinfo['inStandby'] = "true" # Get recording state recs = NavigationInstance.instance.getRecordings() statusinfo['state']['recording'] = len(recs) > 0 if recs: statusinfo['Recording_list'] = "\n" for timer in NavigationInstance.instance.RecordTimer.timer_list: if timer.state == TimerEntry.StateRunning: if not timer.justplay: s_name = timer.service_ref.getServiceName() label = mangle_epg_text(s_name) + ": " + timer.name + "\n" statusinfo['Recording_list'] += label if statusinfo['state']['recording']: statusinfo['isRecording'] = "true" else: statusinfo['isRecording'] = "false" return statusinfo
def updateStatus(self): print "[TVCharts] Status Update ..." self.DBStatusTimer.stop() if not config.plugins.tvcharts.enabled.value or Screens.Standby.inStandby: return # Get Channelname sref = self.session.nav.getCurrentlyPlayingServiceReference() if sref is not None: ref = eServiceReference(sref.toString()) ref.setName("") serviceHandler = eServiceCenter.getInstance() info = serviceHandler.info(ref) channel_name = info and info.getName(ref).replace( '\xc2\x86', '').replace('\xc2\x87', '').decode( "utf-8", "ignore").encode("utf-8") or "" self.serviceref = ref.toString() else: channel_name = "" self.serviceref = "" # Get Event Info service = self.session.nav.getCurrentService() info = service and service.info() event = info and info.getEvent(0) event_name = event and event.getEventName() or "" event_description = "" event_begin = 0 if event is not None: curEvent = parseEvent(event) event_begin = int( curEvent[0]) + (config.recording.margin_before.getValue() * 60) event_description = event.getExtendedDescription() # Get Box Info self.BoxID = iNetwork.getAdapterAttribute("eth0", "mac") self.DeviceName = HardwareInfo().get_device_name() try: from enigma import getEnigmaVersionString from boxbranding import getImageVersion, getImageBuild self.EnigmaVersion = getEnigmaVersionString() self.ImageVersion = getImageVersion() + '.' + getImageBuild() except: self.EnigmaVersion = about.getEnigmaVersionString() self.ImageVersion = about.getVersionString() # Get TimerList self.timerlist = "" if config.plugins.tvcharts.submittimers.value and self.LastTimerlistUpdate <= ( time() - 1800): self.LastTimerlistUpdate = time() try: for timer in self.recordtimer.timer_list: if timer.disabled == 0 and timer.justplay == 0: self.timerlist += "%s|%s|%s|%s|%s|%s|%s\n" % ( timer.eit, str( int(timer.begin) + (config.recording.margin_before.getValue() * 60)), str( int(timer.end) - (config.recording.margin_after.getValue() * 60)), str(timer.service_ref), timer.name, timer.service_ref.getServiceName().replace( '\xc2\x86', '').replace('\xc2\x87', '').decode( "utf-8", "ignore").encode("utf-8"), timer.repeated) except Exception: print "[TVCharts] Error loading timers!" # Get Pluginlist if config.plugins.tvcharts.submitplugins.value and self.pluginlist == "": try: os_system( "opkg list_installed | grep enigma2-plugin- > /tmp/plugins.txt" ) for plugin in open('/tmp/plugins.txt', 'r'): self.pluginlist += plugin[0:plugin.find(' - ')] + "\n" os_system("rm -f /tmp/plugins.txt") except Exception: print "[TVCharts] Error loading plugins!" # Status Update getPage( url='http://www.dreambox-plugins.de/feeds/TVCharts/status.php', agent="Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)", timeout=60, method='POST', headers={ 'Content-Type': 'application/x-www-form-urlencoded' }, postdata=urlencode({ 'boxid': self.BoxID, 'devicename': self.DeviceName, 'imageversion': self.ImageVersion, 'enigmaversion': self.EnigmaVersion, 'lastchannel': channel_name, 'lastevent': event_name, 'eventdescr': event_description, 'lastbegin': event_begin, 'lastserviceref': self.serviceref, 'timerlist': self.timerlist, 'pluginlist': self.pluginlist })).addErrback(self.updateError) # Restart Timer self.DBStatusTimer.start(900000, True)
def getStatusInfo(self): # Get Current Volume and Mute Status vcontrol = eDVBVolumecontrol.getInstance() statusinfo = { 'volume': vcontrol.getVolume(), 'muted': vcontrol.isMuted(), 'transcoding': TRANSCODING, 'currservice_filename': "", 'currservice_id': -1, } # Get currently running Service event = None serviceref = self.session.nav.getCurrentlyPlayingServiceReference() serviceref_string = None currservice_station = None if serviceref is not None: serviceHandler = eServiceCenter.getInstance() serviceHandlerInfo = serviceHandler.info(serviceref) service = self.session.nav.getCurrentService() serviceinfo = service and service.info() event = serviceinfo and serviceinfo.getEvent(0) serviceref_string = serviceref.toString() currservice_station = serviceHandlerInfo.getName( serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') else: event = None serviceHandlerInfo = None if event is not None: # (begin, end, name, description, eit) curEvent = parseEvent(event) begin_timestamp = int(curEvent[0]) + (config.recording.margin_before.value * 60) end_timestamp = int(curEvent[1]) - (config.recording.margin_after.value * 60) statusinfo['currservice_name'] = curEvent[2].replace('\xc2\x86', '').replace('\xc2\x87', '') statusinfo['currservice_serviceref'] = serviceref_string statusinfo['currservice_begin'] = time.strftime("%H:%M", (time.localtime(begin_timestamp))) statusinfo['currservice_begin_timestamp'] = begin_timestamp statusinfo['currservice_end'] = time.strftime("%H:%M", (time.localtime(end_timestamp))) statusinfo['currservice_end_timestamp'] = end_timestamp statusinfo['currservice_description'] = curEvent[3] if len(curEvent[3].decode('utf-8')) > 220: statusinfo['currservice_description'] = curEvent[3].decode('utf-8')[0:220].encode('utf-8') + "..." statusinfo['currservice_station'] = currservice_station if statusinfo['currservice_serviceref'].startswith('1:0:0'): statusinfo['currservice_filename'] = '/' + '/'.join(serviceref_string.split("/")[1:]) full_desc = statusinfo['currservice_name'] + '\n' full_desc += statusinfo['currservice_begin'] + " - " + statusinfo['currservice_end'] + '\n\n' full_desc += event.getExtendedDescription().replace('\xc2\x86', '').replace('\xc2\x87', '').replace('\xc2\x8a', '\n') statusinfo['currservice_fulldescription'] = full_desc statusinfo['currservice_id'] = curEvent[4] else: statusinfo['currservice_name'] = "N/A" statusinfo['currservice_begin'] = "" statusinfo['currservice_end'] = "" statusinfo['currservice_description'] = "" statusinfo['currservice_fulldescription'] = "N/A" if serviceref: statusinfo['currservice_serviceref'] = serviceref_string if statusinfo['currservice_serviceref'].startswith('1:0:0') or statusinfo['currservice_serviceref'].startswith('4097:0:0'): this_path = '/' + '/'.join(serviceref_string.split("/")[1:]) if os.path.exists(this_path): statusinfo['currservice_filename'] = this_path if serviceHandlerInfo: statusinfo['currservice_station'] = currservice_station elif serviceref_string.find("http") != -1: statusinfo['currservice_station'] = serviceref_string.replace('%3a', ':')[serviceref_string.find("http"):] else: statusinfo['currservice_station'] = "N/A" # Get Standby State from Screens.Standby import inStandby if inStandby is None: statusinfo['inStandby'] = "false" else: statusinfo['inStandby'] = "true" # Get recording state recs = NavigationInstance.instance.getRecordings() if recs: statusinfo['isRecording'] = "true" statusinfo['Recording_list'] = "\n" for timer in NavigationInstance.instance.RecordTimer.timer_list: if timer.state == TimerEntry.StateRunning: if not timer.justplay: statusinfo['Recording_list'] += timer.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', '') + ": " + timer.name + "\n" if statusinfo['Recording_list'] == "\n": statusinfo['isRecording'] = "false" else: statusinfo['isRecording'] = "false" return statusinfo
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 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!") } nt = { "serviceref": str(timer.service_ref), "servicename": timer.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', ''), "eit": timer.eit, "name": timer.name, "begin": timer.begin, "end": timer.end, "duration": timer.end - timer.begin } return { "result": True, "message": msg, "newtimer": nt }
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 getStatusInfo(self): statusinfo = {} # Get Current Volume and Mute Status vcontrol = eDVBVolumecontrol.getInstance() statusinfo['volume'] = vcontrol.getVolume() statusinfo['muted'] = vcontrol.isMuted() statusinfo['transcoding'] = getTranscodingSupport() # Get currently running Service event = None serviceref = self.session.nav.getCurrentlyPlayingServiceReference() if serviceref is not None: serviceHandler = eServiceCenter.getInstance() serviceHandlerInfo = serviceHandler.info(serviceref) service = self.session.nav.getCurrentService() serviceinfo = service and service.info() event = serviceinfo and serviceinfo.getEvent(0) else: event = None statusinfo['currservice_filename'] = "" if event is not None: curEvent = parseEvent(event) statusinfo['currservice_name'] = curEvent[2].replace('\xc2\x86', '').replace('\xc2\x87', '') statusinfo['currservice_serviceref'] = serviceref.toString() statusinfo['currservice_begin'] = strftime("%H:%M", (localtime(int(curEvent[0])+(config.recording.margin_before.value*60)))) statusinfo['currservice_end'] = strftime("%H:%M", (localtime(int(curEvent[1])-(config.recording.margin_after.value*60)))) statusinfo['currservice_description'] = curEvent[3] if len(curEvent[3].decode('utf-8')) > 220: statusinfo['currservice_description'] = curEvent[3].decode('utf-8')[0:220].encode('utf-8') + "..." statusinfo['currservice_station'] = serviceHandlerInfo.getName(serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') if statusinfo['currservice_serviceref'].startswith('1:0:0'): statusinfo['currservice_filename'] = '/' + '/'.join(serviceref.toString().split("/")[1:]) full_desc = statusinfo['currservice_name'] + '\n' full_desc += statusinfo['currservice_begin'] + " - " + statusinfo['currservice_end'] + '\n\n' full_desc += event.getExtendedDescription().replace('\xc2\x86', '').replace('\xc2\x87', '').replace('\xc2\x8a', '\n') statusinfo['currservice_fulldescription'] = full_desc else: statusinfo['currservice_name'] = "N/A" statusinfo['currservice_begin'] = "" statusinfo['currservice_end'] = "" statusinfo['currservice_description'] = "" statusinfo['currservice_fulldescription'] = "N/A" if serviceref: statusinfo['currservice_serviceref'] = serviceref.toString() if serviceHandlerInfo: statusinfo['currservice_station'] = serviceHandlerInfo.getName(serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') elif serviceref.toString().find("http") != -1: statusinfo['currservice_station'] = serviceref.toString().replace('%3a', ':')[serviceref.toString().find("http"):] else: statusinfo['currservice_station'] = "N/A" # Get Standby State from Screens.Standby import inStandby if inStandby == None: statusinfo['inStandby'] = "false" else: statusinfo['inStandby'] = "true" # Get recording state recs = NavigationInstance.instance.getRecordings() if recs: statusinfo['isRecording'] = "true" statusinfo['Recording_list'] = "\n" for timer in NavigationInstance.instance.RecordTimer.timer_list: if timer.state == TimerEntry.StateRunning: if not timer.justplay: statusinfo['Recording_list'] += timer.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', '') + ": " + timer.name + "\n" else: statusinfo['isRecording'] = "false" return statusinfo
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 CheckBlockContent(self): global blockedcontent_deactive global blockedcontent_asking blockedcontent_asking = False self.TimerBlockContentCheck.stop() current_hour = int(strftime("%H", localtime())) if Screens.Standby.inStandby or config.plugins.blockcontent.viewingtime.value == 0 or config.plugins.blockcontent.freeview.value <= current_hour: print "[BlockedContent] resets" self.blockedcontent_authorized = "" if blockedcontent_deactive: blockedcontent_deactive = False elif blockedcontent_deactive: if config.plugins.blockcontent.reactivetime.value > 0 and not self.blockedcontent_reactive: print "[BlockContent] reactivate in %s min\n" % config.plugins.blockcontent.reactivetime.value self.TimerBlockContentReactivate = eTimer() self.TimerBlockContentReactivate.stop() self.TimerBlockContentReactivate.timeout.get().append( self.ReactivateBlockContent) self.TimerBlockContentReactivate.start( config.plugins.blockcontent.reactivetime.value * 60000, True) self.blockedcontent_reactive = True else: eventid = None text = "" station = "" name = "" description = "" servicerefstr = "" serviceref = self.session.nav.getCurrentlyPlayingServiceReference() if serviceref is not None: servicerefstr = serviceref.toString() serviceHandler = eServiceCenter.getInstance() info = serviceHandler.info(serviceref) station = info.getName(serviceref) begin = time() event = None service = self.session.nav.getCurrentService() info = service and service.info() event = info and info.getEvent(0) if event is not None: curEvent = parseEvent(event) begin = curEvent[0] end = curEvent[1] name = curEvent[2] description = curEvent[3] eventid = curEvent[4] text = event.getEventName() short = event.getShortDescription() ext = event.getExtendedDescription() if short and short != text: text += '\n\n' + short if ext: if text: text += '\n\n' text += ext check = "%s %s %s %s %s" % (servicerefstr, station, name, description, text) if config.plugins.blockcontent.casesensitive.value is False: check = check.upper() blockedcontent_found = False blockedcontent = True if os.path.exists("/etc/enigma2/blockedcontent"): f = open("/etc/enigma2/blockedcontent") while blockedcontent and not blockedcontent_found: blockedcontent = f.readline().lstrip().rstrip().rstrip( "\r\n") if blockedcontent.startswith("userbouquet."): if os.path.exists("/etc/enigma2/%s" % blockedcontent): blockedbouquet = True u = open("/etc/enigma2/%s" % blockedcontent, "r") while blockedbouquet and not blockedcontent_found: blockedbouquet = u.readline().lstrip().rstrip( ).rstrip("\r\n") blockedbouquet = blockedbouquet.replace( "#SERVICE", "").replace(" ", "") if blockedbouquet.startswith( "#") is False and check.find( blockedbouquet) is not -1 and len( blockedbouquet) > 1: print "[BlockedContent] %s found in %s" % ( blockedbouquet, check) blockedcontent_found = True u.close() if config.plugins.blockcontent.casesensitive.value is False: blockedcontent = blockedcontent.upper() if blockedcontent.startswith("#") is False and check.find( blockedcontent ) is not -1 and len(blockedcontent) > 1: print "[BlockedContent] %s found in %s" % ( blockedcontent, check) blockedcontent_found = True f.close() else: print "[BlockedContent] /etc/enigma2/blockedcontent not found" if self.blockedcontent_authorized != check: self.blockedcontent_authorized = "" if blockedcontent_found and self.blockedcontent_authorized != check and not blockedcontent_asking: if config.plugins.blockcontent.popup.value is False: blockedcontent_asking = True print "[BlockedContent] asks for PIN" self.prev_running_service = serviceref self.blockedcontent_check = check self.session.nav.stopService() try: self.session.openWithCallback( self.pinEntered, PinInput, pinList=[ config.plugins.blockcontent.pin.getValue() ], triesEntry=self.getTriesEntry(), title=_("Please enter the correct pin code"), windowTitle=_("Enter pin code")) except: self.session.nav.playService(self.prev_running_service) blockedcontent_asking = False pass else: self.session.open( MessageBox, _("Block Content found %s") % blockedcontent, MessageBox.TYPE_WARNING, timeout=config.plugins.blockcontent.popuptime.value)
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=['red', 'green'], 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.ChoiceBoxDialog.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 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 getStatusInfo(self): statusinfo = {} # Get Current Volume and Mute Status vcontrol = eDVBVolumecontrol.getInstance() statusinfo['volume'] = vcontrol.getVolume() statusinfo['muted'] = vcontrol.isMuted() # Get currently running Service event = None serviceref = self.session.nav.getCurrentlyPlayingServiceReference() if serviceref is not None: serviceHandler = eServiceCenter.getInstance() serviceHandlerInfo = serviceHandler.info(serviceref) service = self.session.nav.getCurrentService() serviceinfo = service and service.info() event = serviceinfo and serviceinfo.getEvent(0) else: event = None if event is not None: curEvent = parseEvent(event) statusinfo['currservice_name'] = curEvent[2].replace( '\xc2\x86', '').replace('\xc2\x87', '') statusinfo['currservice_serviceref'] = serviceref.toString() statusinfo['currservice_begin'] = strftime("%H:%M", (localtime( int(curEvent[0]) + (config.recording.margin_before.value * 60)))) statusinfo['currservice_end'] = strftime("%H:%M", (localtime( int(curEvent[1]) - (config.recording.margin_after.value * 60)))) statusinfo['currservice_description'] = curEvent[3] if len(curEvent[3].decode('utf-8')) > 220: statusinfo['currservice_description'] = curEvent[3].decode( 'utf-8')[0:220].encode('utf-8') + "..." statusinfo['currservice_station'] = serviceHandlerInfo.getName( serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') else: statusinfo['currservice_name'] = "N/A" statusinfo['currservice_begin'] = "" statusinfo['currservice_end'] = "" statusinfo['currservice_description'] = "" if serviceref: statusinfo['currservice_serviceref'] = serviceref.toString() statusinfo['currservice_station'] = serviceHandlerInfo.getName( serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') # Get Standby State from Screens.Standby import inStandby if inStandby == None: statusinfo['inStandby'] = "false" else: statusinfo['inStandby'] = "true" # Get recording state recs = NavigationInstance.instance.getRecordings() if recs: statusinfo['isRecording'] = "true" else: statusinfo['isRecording'] = "false" return statusinfo
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.open(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 getStatusInfo(self): # Get Current Volume and Mute Status vcontrol = eDVBVolumecontrol.getInstance() statusinfo = { 'volume': vcontrol.getVolume(), 'muted': vcontrol.isMuted(), 'transcoding': TRANSCODING, 'currservice_filename': "", 'currservice_id': -1, } # Get currently running Service event = None serviceref = NavigationInstance.instance.getCurrentlyPlayingServiceReference( ) serviceref_string = None currservice_station = None if serviceref is not None: serviceHandler = eServiceCenter.getInstance() serviceHandlerInfo = serviceHandler.info(serviceref) service = NavigationInstance.instance.getCurrentService() serviceinfo = service and service.info() event = serviceinfo and serviceinfo.getEvent(0) serviceref_string = serviceref.toString() currservice_station = removeBad(serviceHandlerInfo.getName(serviceref)) else: event = None serviceHandlerInfo = None if event is not None: # (begin, end, name, description, eit) curEvent = parseEvent(event) begin_timestamp = int( curEvent[0]) + (config.recording.margin_before.value * 60) end_timestamp = int( curEvent[1]) - (config.recording.margin_after.value * 60) statusinfo['currservice_name'] = removeBad(curEvent[2]) statusinfo['currservice_serviceref'] = serviceref_string statusinfo['currservice_begin'] = time.strftime( "%H:%M", (time.localtime(begin_timestamp))) statusinfo['currservice_begin_timestamp'] = begin_timestamp statusinfo['currservice_end'] = time.strftime( "%H:%M", (time.localtime(end_timestamp))) statusinfo['currservice_end_timestamp'] = end_timestamp desc = curEvent[3] if six.PY2: desc = desc.decode('utf-8') if len(desc) > 220: desc = desc + u"..." if six.PY2: desc = desc.encode('utf-8') statusinfo['currservice_description'] = desc statusinfo['currservice_station'] = currservice_station if statusinfo['currservice_serviceref'].startswith('1:0:0'): statusinfo['currservice_filename'] = '/' + '/'.join( serviceref_string.split("/")[1:]) full_desc = statusinfo['currservice_name'] + '\n' full_desc += statusinfo['currservice_begin'] + " - " + statusinfo[ 'currservice_end'] + '\n\n' full_desc += removeBad2(event.getExtendedDescription()) statusinfo['currservice_fulldescription'] = full_desc statusinfo['currservice_id'] = curEvent[4] else: statusinfo['currservice_name'] = "N/A" statusinfo['currservice_begin'] = "" statusinfo['currservice_end'] = "" statusinfo['currservice_description'] = "" statusinfo['currservice_fulldescription'] = "N/A" if serviceref: statusinfo['currservice_serviceref'] = serviceref_string if statusinfo['currservice_serviceref'].startswith( '1:0:0' ) or statusinfo['currservice_serviceref'].startswith('4097:0:0'): this_path = '/' + '/'.join(serviceref_string.split("/")[1:]) if os.path.exists(this_path): statusinfo['currservice_filename'] = this_path if serviceHandlerInfo: statusinfo['currservice_station'] = currservice_station elif serviceref_string.find("http") != -1: statusinfo['currservice_station'] = serviceref_string.replace( '%3a', ':')[serviceref_string.find("http"):] else: statusinfo['currservice_station'] = "N/A" # Get Standby State from Screens.Standby import inStandby if inStandby is None: statusinfo['inStandby'] = "false" else: statusinfo['inStandby'] = "true" # Get recording state recs = NavigationInstance.instance.getRecordings() if recs: statusinfo['isRecording'] = "true" statusinfo['Recording_list'] = "\n" for timer in NavigationInstance.instance.RecordTimer.timer_list: if timer.state == TimerEntry.StateRunning: if not timer.justplay: statusinfo['Recording_list'] += removeBad( timer.service_ref.getServiceName( )) + ": " + timer.name + "\n" if statusinfo['Recording_list'] == "\n": statusinfo['isRecording'] = "false" else: statusinfo['isRecording'] = "false" # Get streaminfo streams = GetStreamInfo() Streaming_list = [] try: # TODO move this code to javascript getStatusinfo for stream in streams: st = '' s = stream["name"] e = stream["eventname"] i = stream["ip"] del stream if i is not None: st += i + ": " st += s + ' - ' + e if st != '': Streaming_list.append(st) except Exception as error: # nosec # noqa: E722 # print("[OpenWebif] -D- build Streaming_list %s" % error) pass if len(streams) > 0: statusinfo['Streaming_list'] = '\n'.join(Streaming_list) statusinfo['isStreaming'] = 'true' else: statusinfo['Streaming_list'] = '' statusinfo['isStreaming'] = 'false' return statusinfo
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 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!") } nt = { "serviceref": str(timer.service_ref), "servicename": timer.service_ref.getServiceName().replace('\xc2\x86', '').replace('\xc2\x87', ''), "eit": timer.eit, "name": timer.name, "begin": timer.begin, "end": timer.end, "duration": timer.end - timer.begin } return {"result": True, "message": msg, "newtimer": nt}
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 getStatusInfo(self): statusinfo = {} # Get Current Volume and Mute Status vcontrol = eDVBVolumecontrol.getInstance() statusinfo['volume'] = vcontrol.getVolume() statusinfo['muted'] = vcontrol.isMuted() statusinfo['transcoding'] = getTranscodingSupport() # Get currently running Service event = None serviceref = self.session.nav.getCurrentlyPlayingServiceReference() if serviceref is not None: serviceHandler = eServiceCenter.getInstance() serviceHandlerInfo = serviceHandler.info(serviceref) service = self.session.nav.getCurrentService() serviceinfo = service and service.info() event = serviceinfo and serviceinfo.getEvent(0) else: event = None statusinfo['currservice_filename'] = "" if event is not None: curEvent = parseEvent(event) statusinfo['currservice_name'] = curEvent[2].replace( '\xc2\x86', '').replace('\xc2\x87', '') statusinfo['currservice_serviceref'] = serviceref.toString() statusinfo['currservice_begin'] = strftime("%H:%M", (localtime( int(curEvent[0]) + (config.recording.margin_before.value * 60)))) statusinfo['currservice_end'] = strftime("%H:%M", (localtime( int(curEvent[1]) - (config.recording.margin_after.value * 60)))) statusinfo['currservice_description'] = curEvent[3] if len(curEvent[3].decode('utf-8')) > 220: statusinfo['currservice_description'] = curEvent[3].decode( 'utf-8')[0:220].encode('utf-8') + "..." statusinfo['currservice_station'] = serviceHandlerInfo.getName( serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') if statusinfo['currservice_serviceref'].startswith('1:0:0'): statusinfo['currservice_filename'] = '/' + '/'.join( serviceref.toString().split("/")[1:]) full_desc = statusinfo['currservice_name'] + '\n' full_desc += statusinfo['currservice_begin'] + " - " + statusinfo[ 'currservice_end'] + '\n\n' full_desc += event.getExtendedDescription().replace( '\xc2\x86', '').replace('\xc2\x87', '').replace('\xc2\x8a', '\n') statusinfo['currservice_fulldescription'] = full_desc else: statusinfo['currservice_name'] = "N/A" statusinfo['currservice_begin'] = "" statusinfo['currservice_end'] = "" statusinfo['currservice_description'] = "" statusinfo['currservice_fulldescription'] = "N/A" if serviceref: statusinfo['currservice_serviceref'] = serviceref.toString() if serviceHandlerInfo: statusinfo['currservice_station'] = serviceHandlerInfo.getName( serviceref).replace('\xc2\x86', '').replace('\xc2\x87', '') elif serviceref.toString().find("http") != -1: statusinfo['currservice_station'] = serviceref.toString( ).replace('%3a', ':')[serviceref.toString().find("http"):] else: statusinfo['currservice_station'] = "N/A" # Get Standby State from Screens.Standby import inStandby if inStandby == None: statusinfo['inStandby'] = "false" else: statusinfo['inStandby'] = "true" # Get recording state recs = NavigationInstance.instance.getRecordings() if recs: statusinfo['isRecording'] = "true" statusinfo['Recording_list'] = "\n" for timer in NavigationInstance.instance.RecordTimer.timer_list: if timer.state == TimerEntry.StateRunning: if not timer.justplay: statusinfo[ 'Recording_list'] += timer.service_ref.getServiceName( ).replace('\xc2\x86', '').replace( '\xc2\x87', '') + ": " + timer.name + "\n" else: statusinfo['isRecording'] = "false" return statusinfo
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))
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 updateStatus(self): print "[TVCharts] Status Update ..." self.DBStatusTimer.stop() if not config.plugins.tvcharts.enabled.value or Screens.Standby.inStandby: return # Get Channelname sref = self.session.nav.getCurrentlyPlayingServiceReference() if sref is not None: ref = eServiceReference(sref.toString()) ref.setName("") serviceHandler = eServiceCenter.getInstance() info = serviceHandler.info(ref) channel_name = ( info and info.getName(ref) .replace("\xc2\x86", "") .replace("\xc2\x87", "") .decode("utf-8", "ignore") .encode("utf-8") or "" ) self.serviceref = ref.toString() else: channel_name = "" self.serviceref = "" # Get Event Info service = self.session.nav.getCurrentService() info = service and service.info() event = info and info.getEvent(0) event_name = event and event.getEventName() or "" event_description = "" event_begin = 0 if event is not None: curEvent = parseEvent(event) event_begin = int(curEvent[0]) + (config.recording.margin_before.getValue() * 60) event_description = event.getExtendedDescription() # Get Box Info self.BoxID = iNetwork.getAdapterAttribute("eth0", "mac") self.DeviceName = HardwareInfo().get_device_name() try: from enigma import getEnigmaVersionString from boxbranding import getImageVersion, getImageBuild self.EnigmaVersion = getEnigmaVersionString() self.ImageVersion = getImageVersion() + "." + getImageBuild() except: self.EnigmaVersion = about.getEnigmaVersionString() self.ImageVersion = about.getVersionString() # Get TimerList self.timerlist = "" if config.plugins.tvcharts.submittimers.value and self.LastTimerlistUpdate <= (time() - 1800): self.LastTimerlistUpdate = time() try: for timer in self.recordtimer.timer_list: if timer.disabled == 0 and timer.justplay == 0: self.timerlist += "%s|%s|%s|%s|%s|%s|%s\n" % ( timer.eit, str(int(timer.begin) + (config.recording.margin_before.getValue() * 60)), str(int(timer.end) - (config.recording.margin_after.getValue() * 60)), str(timer.service_ref), timer.name, timer.service_ref.getServiceName() .replace("\xc2\x86", "") .replace("\xc2\x87", "") .decode("utf-8", "ignore") .encode("utf-8"), timer.repeated, ) except Exception: print "[TVCharts] Error loading timers!" # Get Pluginlist if config.plugins.tvcharts.submitplugins.value and self.pluginlist == "": try: os_system("opkg list_installed | grep enigma2-plugin- > /tmp/plugins.txt") for plugin in open("/tmp/plugins.txt", "r"): self.pluginlist += plugin[0 : plugin.find(" - ")] + "\n" os_system("rm -f /tmp/plugins.txt") except Exception: print "[TVCharts] Error loading plugins!" # Status Update getPage( url="http://www.dreambox-plugins.de/feeds/TVCharts/status.php", agent="Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)", timeout=60, method="POST", headers={"Content-Type": "application/x-www-form-urlencoded"}, postdata=urlencode( { "boxid": self.BoxID, "devicename": self.DeviceName, "imageversion": self.ImageVersion, "enigmaversion": self.EnigmaVersion, "lastchannel": channel_name, "lastevent": event_name, "eventdescr": event_description, "lastbegin": event_begin, "lastserviceref": self.serviceref, "timerlist": self.timerlist, "pluginlist": self.pluginlist, } ), ).addErrback(self.updateError) # Restart Timer self.DBStatusTimer.start(900000, True)
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)