def timerAdd(self):
		cur = self["list"].getCurrent()
		event = cur[0]
		if event is None:
			return
		serviceref = cur[1]
		isRecordEvent = isRepeat = firstNextRepeatEvent = isRunning = False
		eventid = event.getEventId()
		begin = event.getBeginTime()
		end = begin + event.getDuration()
		refstr = ':'.join(serviceref.ref.toString().split(':')[:11])
		for timer in self.session.nav.RecordTimer.getAllTimersList():
			needed_ref = ':'.join(timer.service_ref.ref.toString().split(':')[:11]) == refstr
			if needed_ref and timer.eit == eventid and (begin < timer.begin <= end or timer.begin <= begin <= timer.end):
				isRecordEvent = True
				break
			elif needed_ref and timer.repeated and self.session.nav.RecordTimer.isInRepeatTimer(timer, event):
				isRecordEvent = True
				break
		if isRecordEvent:
			isRepeat = timer.repeated
			prev_state = timer.state
			isRunning = prev_state in (1, 2)
			title_text = isRepeat and _("Attention, this is repeated timer!\n") or ""
			firstNextRepeatEvent = isRepeat and (begin < timer.begin <= end or timer.begin <= begin <= timer.end) and not timer.justplay
			menu = [(_("Delete timer"), "delete"),(_("Edit timer"), "edit")]
			buttons = ["red", "green"]
			if not isRunning:
				if firstNextRepeatEvent and timer.isFindRunningEvent() and not timer.isFindNextEvent():
					menu.append((_("Options disable timer"), "disablerepeat"))
				else:
					menu.append((_("Disable timer"), "disable"))
				buttons.append("yellow")
			elif prev_state == 2 and firstNextRepeatEvent:
				menu.append((_("Options disable timer"), "disablerepeatrunning"))
				buttons.append("yellow")
			menu.append((_("Timer Overview"), "timereditlist"))
			def timerAction(choice):
				if choice is not None:
					if choice[1] == "delete":
						self.removeTimer(timer)
					elif choice[1] == "edit":
						self.session.openWithCallback(self.finishedEdit, TimerEntry, timer)
					elif choice[1] == "disable":
						self.disableTimer(timer, prev_state)
					elif choice[1] == "timereditlist":
						self.session.open(TimerEditList)
					elif choice[1] == "disablerepeatrunning":
						self.disableTimer(timer, prev_state, repeat=True, record=True)
					elif choice[1] == "disablerepeat":
						self.disableTimer(timer, prev_state, repeat=True)
			self.session.openWithCallback(timerAction, ChoiceBox, title=title_text + _("Select action for timer '%s'.") % timer.name, list=menu, keys=buttons)
		else:
			newEntry = RecordTimerEntry(serviceref, checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(event))
			self.session.openWithCallback(self.finishedAdd, TimerEntry, newEntry)
예제 #2
0
    def recordNow(self, param):
        limitEvent = True
        if param == "undefinitely" or param == "infinite":
            ret = (True, "Infinite Instant recording started")
            limitEvent = False
        else:
            ret = (True, "Instant record for current Event started")

        serviceref = ServiceReference(
            self.session.nav.getCurrentlyPlayingServiceReference().toString())

        event = None

        try:
            service = self.session.nav.getCurrentService()
            event = service.info().getEvent(0)
        except Exception:
            print "[Webcomponents.Timer] recordNow Exception!"

        begin = time()
        end = begin + 3600 * 10
        name = "instant record"
        description = ""
        eventid = 0

        if event is not None:
            curEvent = parseEvent(event)
            name = curEvent[2]
            description = curEvent[3]
            eventid = curEvent[4]
            if limitEvent:
                end = curEvent[1]
        else:
            if limitEvent:
                ret = (False, "No event found! Not recording!")

        if ret[0]:
            location = preferredInstantRecordPath()
            timer = RecordTimerEntry(serviceref,
                                     begin,
                                     end,
                                     name,
                                     description,
                                     eventid,
                                     False,
                                     False,
                                     0,
                                     dirname=location)
            timer.dontSave = True
            recRet = self.recordtimer.record(timer)
            if recRet is not None:
                # a conflict is rather unlikely, but this can also indicate a non-recordable service
                ret = (False, "Timer conflict detected! Not recording!")

        return ret
예제 #3
0
def addTimer(session,
             serviceref,
             begin,
             end,
             name,
             description,
             disabled,
             justplay,
             afterevent,
             dirname,
             tags,
             repeated,
             logentries=None,
             eit=0):
    rt = session.nav.RecordTimer

    print "mao1", dirname

    if not dirname:
        dirname = preferredTimerPath()

    print "mao2", dirname

    try:
        timer = RecordTimerEntry(ServiceReference(serviceref),
                                 begin,
                                 end,
                                 name,
                                 description,
                                 eit,
                                 disabled,
                                 justplay,
                                 afterevent,
                                 dirname=dirname,
                                 tags=tags)

        timer.repeated = repeated

        if logentries:
            timer.log_entries = logentries

        conflicts = rt.record(timer)
        if conflicts:
            errors = []
            for conflict in conflicts:
                errors.append(conflict.name)

            return {
                "result": False,
                "message":
                "Conflicting Timer(s) detected! %s" % " / ".join(errors)
            }
    except Exception, e:
        print e
        return {"result": False, "message": "Could not add timer '%s'!" % name}
예제 #4
0
    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))
예제 #5
0
 def copyTimer(self, start, duration):
     starttime = start - config.recording.margin_before.value * 60
     endtime = start + duration + config.recording.margin_after.value * 60
     self.new_timer_copy = RecordTimerEntry(
         ServiceReference(self.rec_ref), starttime, endtime,
         self.timer.name, self.timer.description, self.timer.eit, False,
         False, AFTEREVENT.AUTO, False, self.timer.dirname, self.timer.tags)
     self.new_timer_copy.vpsplugin_enabled = True
     self.new_timer_copy.vpsplugin_overwrite = self.timer.vpsplugin_overwrite
     self.new_timer_copy.log(0, "[VPS] added this timer")
     NavigationInstance.instance.RecordTimer.record(self.new_timer_copy)
예제 #6
0
    def timerAdd(self):
        if self.isRecording:
            return
        event = self.event
        serviceref = self.currentService
        if event is None:
            return
        eventid = event.getEventId()
        begin = event.getBeginTime()
        end = begin + event.getDuration()
        refstr = ':'.join(serviceref.ref.toString().split(':')[:11])
        isRecordEvent = False
        for timer in self.session.nav.RecordTimer.getAllTimersList():
            needed_ref = ':'.join(
                timer.service_ref.ref.toString().split(':')[:11]) == refstr
            if needed_ref and timer.eit == eventid and (
                    begin < timer.begin <= end
                    or timer.begin <= begin <= timer.end):
                isRecordEvent = True
                break
            elif needed_ref and timer.repeated and self.session.nav.RecordTimer.isInRepeatTimer(
                    timer, event):
                isRecordEvent = True
                break
        if isRecordEvent:
            title_text = timer.repeated and _(
                "Attention, this is repeated timer!\n") or ""
            menu = [(_("Delete timer"), "delete"), (_("Edit timer"), "edit")]
            buttons = ["red", "green"]

            def timerAction(choice):
                if choice is not None:
                    if choice[1] == "delete":
                        self.removeTimer(timer)
                    elif choice[1] == "edit":
                        self.session.openWithCallback(self.finishedEdit,
                                                      TimerEntry, timer)

            self.session.openWithCallback(
                timerAction,
                ChoiceBox,
                title=title_text +
                _("Select action for timer '%s'.") % timer.name,
                list=menu,
                keys=buttons)
        else:
            newEntry = RecordTimerEntry(self.currentService,
                                        checkOldTimers=True,
                                        dirname=preferredTimerPath(),
                                        *parseEvent(self.event))
            newEntry.justplay = config.recording.timer_default_type.value == "zap"
            newEntry.always_zap = config.recording.timer_default_type.value == "zap+record"
            self.session.openWithCallback(self.finishedAdd, TimerEntry,
                                          newEntry)
 def doInstantTimer(self, zap):
     event, service = self["list"].getCurrent()[:2]
     if event is None:
         return
     newEntry = RecordTimerEntry(service,
                                 checkOldTimers=True,
                                 *parseEvent(event))
     self.instantRecordDialog = self.session.instantiateDialog(
         InstantRecordTimerEntry, newEntry, zap)
     retval = [True, self.instantRecordDialog.retval()]
     self.session.deleteDialogWithCallback(self.finishedAdd,
                                           self.instantRecordDialog, retval)
예제 #8
0
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
	}
예제 #9
0
	def getTimers(self):
		self._timer_list = []
		self._processed_timers = []

		baseurl = self.getBaseUrl()

		print("[ClientModeBoxRemoteTimer] get remote timer list")

		try:
			httprequest = urllib2.urlopen(baseurl + '/web/timerlist')
			xmldoc = minidom.parseString(httprequest.read())
			timers = xmldoc.getElementsByTagName('e2timer')
			for timer in timers:
				serviceref = ServiceReference(getValueFromNode(timer, 'e2servicereference'))
				begin = int(getValueFromNode(timer, 'e2timebegin'))
				end = int(getValueFromNode(timer, 'e2timeend'))
				name = getValueFromNode(timer, 'e2name')
				description = getValueFromNode(timer, 'e2description')
				eit = int(getValueFromNode(timer, 'e2eit'))
				disabled = int(getValueFromNode(timer, 'e2disabled'))
				justplay = int(getValueFromNode(timer, 'e2justplay'))
				afterevent = int(getValueFromNode(timer, 'e2afterevent'))
				repeated = int(getValueFromNode(timer, 'e2repeated'))
				location = getValueFromNode(timer, 'e2location')
				tags = getValueFromNode(timer, 'e2tags').split(" ")

				entry = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname=location, tags=tags, descramble=1, record_ecm=0, isAutoTimer=0, always_zap=0)
				entry.repeated = repeated

				entry.orig = RecordTimerEntry(serviceref, begin, end, name, description, eit, disabled, justplay, afterevent, dirname=location, tags=tags, descramble=1, record_ecm=0, isAutoTimer=0, always_zap=0)
				entry.orig.repeated = repeated

				if entry.shouldSkip() or entry.state == TimerEntry.StateEnded or (entry.state == TimerEntry.StateWaiting and entry.disabled):
					insort(self._processed_timers, entry)
				else:
					insort(self._timer_list, entry)
		except Exception as e:
			print("[ClientModeBoxRemoteTimer]", e)

		self.last_update_ts = time()
예제 #10
0
    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
예제 #11
0
def addTimerFromEventSilent(session, refreshCallback, event, service, zap=0):
    if event is None or event.getBeginTime() + event.getDuration() < time():
        return
    timer = RecordTimerEntry(service,
                             checkOldTimers=True,
                             dirname=preferredTimerPath(),
                             *parseEvent(event, service=service))
    if zap:
        timer.justplay = 1
        timer.end = timer.begin + (config.recording.margin_before.value *
                                   60) + 1
    timer.resetRepeated()
    checkForConflicts(session, refreshCallback, timer)
예제 #12
0
    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)
예제 #13
0
	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)
예제 #14
0
	def program_seek_vps_multiple_closed(self, retval):
		self.program_seek_vps_multiple_started = -1
		
		self.found_vps_multiple = sorted(self.found_vps_multiple)
		
		for evt_begin, evt_id, evt in self.found_vps_multiple:
			# eigenen Timer überprüfen, wenn Zeiten nicht überschrieben werden dürfen
			if not self.timer.vpsplugin_overwrite and evt_begin <= self.timer.end:
				self.next_events.append(evt_id)
				self.timer.log(0, "[VPS] add event_id "+ str(evt_id))
			
			else:
				canbeadded = True
				evt_begin += 60
				evt_end = evt.getBeginTime() + evt.getDuration() - 60
				now = time()
				
				for checktimer in self.session.nav.RecordTimer.timer_list:
					if checktimer == self.timer:
						continue
					if (checktimer.begin - now) > 3600*24:
						break
					if checktimer.service_ref.ref.toCompareString() == self.timer.service_ref.ref.toCompareString() or checktimer.service_ref.ref.toCompareString() == self.rec_ref.toCompareString():	
						if checktimer.begin <= evt_begin and checktimer.end >= evt_end:
							if not checktimer.vpsplugin_enabled or not checktimer.vpsplugin_overwrite:
								canbeadded = False
							
							# manuell angelegter Timer mit VPS
							if checktimer.vpsplugin_enabled and checktimer.name == "" and checktimer.vpsplugin_time is not None:
								checktimer.eit = evt_id
								checktimer.name = evt.getEventName()
								checktimer.description = evt.getShortDescription()
								checktimer.vpsplugin_time = None
								checktimer.log(0, "[VPS] changed timer (found same PDC-Time as in other VPS-recording)")
								canbeadded = False
								break

				
				if canbeadded:
					newevent_data = parseEvent(evt)
					newEntry = RecordTimerEntry(ServiceReference(self.rec_ref), *newevent_data)
					newEntry.vpsplugin_enabled = True
					newEntry.vpsplugin_overwrite = True
					newEntry.log(0, "[VPS] added this timer (found same PDC-Time as in other VPS-recording)")
					
					# Wenn kein Timer-Konflikt auftritt, wird der Timer angelegt.
					NavigationInstance.instance.RecordTimer.record(newEntry)
 def recordTimerQuestion(self, manual=False):
     event, serviceref = self["list"].getCurrent()[:2]
     if event is None:
         return
     eventId = event.getEventId()
     refstr = getServiceRefStr(serviceref)
     title = None
     for timer in self.session.nav.RecordTimer.timer_list:
         if timer.eit == eventId and refstr == getServiceRefStr(
                 timer.service_ref):
             menu = [
                 (_("Delete Timer"), "CALLFUNC", self.removeChoiceBoxCB,
                  lambda ret: self.removeTimer(timer)),
                 (_("Edit Timer"), "CALLFUNC", self.removeChoiceBoxCB,
                  lambda ret: self.editTimer(timer)),
                 (_("Disable Timer"), "CALLFUNC", self.removeChoiceBoxCB,
                  lambda ret: self.disableTimer(timer))
             ]
             title = _("Select action for timer %s:") % event.getEventName()
             break
     else:
         if not manual:
             menu = [(_("Add Timer"), "CALLFUNC", self.choiceBoxCB,
                      self.doRecordTimer),
                     (_("Add AutoTimer"), "CALLFUNC", self.choiceBoxCB,
                      self.addAutoTimerSilent)]
             title = "%s?" % event.getEventName()
         else:
             newEntry = RecordTimerEntry(serviceref,
                                         checkOldTimers=True,
                                         dirname=preferredTimerPath(),
                                         *parseEvent(event))
             self.session.openWithCallback(self.finishedAdd, TimerEntry,
                                           newEntry)
     if title:
         self.choiceBoxDialog = self.session.instantiateDialog(
             ChoiceBox,
             title=title,
             list=menu,
             keys=["green", "blue"],
             skin_name="RecordTimerQuestion")
         posy = self["list"].getSelectionPosition()
         self.choiceBoxDialog.instance.move(
             ePoint(posy[0] - self.choiceBoxDialog.instance.size().width(),
                    self.instance.position().y() + posy[1]))
         self.showChoiceBoxDialog()
예제 #16
0
	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))
예제 #17
0
    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)
예제 #18
0
 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)
예제 #19
0
    def RecordDateInputClosed(self, ret=None):
        if ret[0]:
            begin = ret[1]
            end = ret[2]
            info = {}

            name = glob.currentepglist[glob.currentchannelistindex][3]
            description = glob.currentepglist[glob.currentchannelistindex][4]
            eventid = glob.currentepglist[glob.currentchannelistindex][1]

            self.getProgramInfoAndEvent(info, name)
            serviceref = info["serviceref"]

            if isinstance(serviceref, eServiceReference):
                serviceref = ServiceReference(serviceref)

            recording = RecordTimerEntry(serviceref,
                                         begin,
                                         end,
                                         name,
                                         description,
                                         eventid,
                                         dirname=str(
                                             cfg.downloadlocation.getValue()))
            recording.dontSave = True

            simulTimerList = self.session.nav.RecordTimer.record(recording)

            if simulTimerList is None:  # no conflict
                recording.autoincrease = False
                self.recording.append(recording)

                self.session.open(MessageBox,
                                  _('Recording Started.'),
                                  MessageBox.TYPE_INFO,
                                  timeout=5)
            else:
                self.session.open(MessageBox, _('Recording Failed.'),
                                  MessageBox.TYPE_WARNING)
                return
        else:
            self.session.open(MessageBox, _('Recording Failed.'),
                              MessageBox.TYPE_WARNING)
            return
예제 #20
0
	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)
예제 #21
0
	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
예제 #22
0
    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)
예제 #23
0
    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))
예제 #24
0
	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)
예제 #25
0
    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)
예제 #26
0
    def record(self):
        logDebug("SPI: record")
        if self.event and self.service:
            event = self.event
            ref = self.service
            if event is None:
                return
            eventid = event.getEventId()
            eref = eServiceReference(str(ref))
            refstr = eref.toString()
            for timer in self.session.nav.RecordTimer.timer_list:
                if timer.eit == eventid and timer.service_ref.ref.toString(
                ) == refstr:
                    cb_func = lambda ret: not ret or self.removeTimer(timer)
                    self.session.openWithCallback(
                        cb_func, MessageBox,
                        _("Do you really want to delete %s?") %
                        event.getEventName())
                    break
            else:
                #newEntry = RecordTimerEntry(ServiceReference(ref), checkOldTimers = True, dirname = preferredTimerPath(), *parseEvent(self.event))
                begin, end, name, description, eit = parseEvent(self.event)

                from SeriesPlugin import refactorTitle, refactorDescription
                if self.data:
                    name = refactorTitle(name, self.data)
                    description = refactorDescription(description, self.data)

                #newEntry = RecordTimerEntry(ServiceReference(refstr), begin, end, name, description, eit, dirname = preferredTimerPath())
                newEntry = RecordTimerEntry(ServiceReference(str(ref)),
                                            begin,
                                            end,
                                            name,
                                            description,
                                            eit,
                                            dirname=preferredTimerPath())
                #newEntry = RecordTimerEntry(refstr, begin, end, name, description, eit, dirname = preferredTimerPath())
                self.session.openWithCallback(self.finishedAdd, TimerEntry,
                                              newEntry)
예제 #27
0
    def RecordDateInputClosed(self, ret=None):
        if ret:
            begin = ret[1]
            end = ret[2]
            name = ret[3]

            description = glob.currentepglist[glob.currentchannelistindex][4]
            eventid = int(self.streamurl.rpartition('/')[-1].partition('.')[0])
            serviceref = eServiceReference(1, 0, self.streamurl)

            if isinstance(serviceref, eServiceReference):
                serviceref = ServiceReference(serviceref)

            recording = RecordTimerEntry(serviceref,
                                         begin,
                                         end,
                                         name,
                                         description,
                                         eventid,
                                         dirname=str(
                                             cfg.downloadlocation.getValue()))
            recording.dontSave = True

            simulTimerList = self.session.nav.RecordTimer.record(recording)

            if simulTimerList is None:  # no conflict
                recording.autoincrease = False

                self.session.open(MessageBox,
                                  _('Recording Timer Set.'),
                                  MessageBox.TYPE_INFO,
                                  timeout=5)
            else:
                self.session.open(MessageBox, _('Recording Failed.'),
                                  MessageBox.TYPE_WARNING)
                return
        else:
            return
예제 #28
0
 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)
예제 #29
0
 def timerAdd(self):
     if self.isRecording:
         return
     event = self.event
     serviceref = self.currentService
     if event is None:
         return
     eventid = event.getEventId()
     refstr = serviceref.ref.toString()
     for timer in self.session.nav.RecordTimer.timer_list:
         if timer.eit == eventid and timer.service_ref.ref.toString(
         ) == refstr:
             cb_func = lambda ret: not ret or self.removeTimer(timer)
             self.session.openWithCallback(
                 cb_func, MessageBox,
                 _("Do you really want to delete %s?") %
                 event.getEventName())
             break
     else:
         newEntry = RecordTimerEntry(self.currentService,
                                     checkOldTimers=True,
                                     *parseEvent(self.event))
         self.session.openWithCallback(self.finishedAdd, TimerEntry,
                                       newEntry)
예제 #30
0
    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))