コード例 #1
0
	def setAutoincreaseEnd(self, entry = None):
		if not self.autoincrease:
			return False
		if entry is None:
			new_end = int(time()) + self.autoincreasetime
		else:
			new_end = entry.begin - 30

		dummyentry = PowerTimerEntry(self.begin, new_end, disabled=True, afterEvent = self.afterEvent, timerType = self.timerType)
		dummyentry.disabled = self.disabled
		timersanitycheck = TimerSanityCheck(NavigationInstance.instance.PowerManager.timer_list, dummyentry)
		if not timersanitycheck.check():
			simulTimerList = timersanitycheck.getSimulTimerList()
			if simulTimerList is not None and len(simulTimerList) > 1:
				new_end = simulTimerList[1].begin
				new_end -= 30				# 30 Sekunden Prepare-Zeit lassen
		if new_end <= time():
			return False
		self.end = new_end
		return True
コード例 #2
0
	def setAutoincreaseEnd(self, entry = None):
		if not self.autoincrease:
			return False
		if entry is None:
			new_end =  int(time()) + self.autoincreasetime
		else:
			new_end = entry.begin -30

		dummyentry = RecordTimerEntry(self.service_ref, self.begin, new_end, self.name, self.description, self.eit, disabled=True, justplay = self.justplay, afterEvent = self.afterEvent, dirname = self.dirname, tags = self.tags)
		dummyentry.disabled = self.disabled
		timersanitycheck = TimerSanityCheck(NavigationInstance.instance.RecordTimer.timer_list, dummyentry)
		if not timersanitycheck.check():
			simulTimerList = timersanitycheck.getSimulTimerList()
			if simulTimerList is not None and len(simulTimerList) > 1:
				new_end = simulTimerList[1].begin
				new_end -= 30				# 30 Sekunden Prepare-Zeit lassen
		if new_end <= time():
			return False
		self.end = new_end
		return True
コード例 #3
0
ファイル: SVDRP.py プロジェクト: xmasmc/enigma2-plugins
	def MODT(self, args):
		# <id> on | off | <settings>
		args = args.split(None, 1)
		if len(args) != 2:
			payload = "%d argument error" % (CODE_SYNTAX,)
			return self.sendLine(payload)

		if args[1] in ('on', 'off'):
			try:
				timerId = int(args[0])
			except ValueError:
				payload = "%d argument error" % (CODE_SYNTAX,)
				return self.sendLine(payload)

			list = self.getTimerList()

			if timerId < 1 or len(list) < timerId:
				payload = "%d argument error" % (CODE_SYNTAX,)
				return self.sendLine(payload)

			timer = list[timerId - 1]
			disable = args[1] == 'off'
			if disable and timer.isRunning():
				payload = "%d timer is running, not disabling." % (CODE_ERR_LOCAL,)
				return self.sendLine(payload)
			else:
				if timer.disabled and not disable:
					timer.enable()
					tsc = TimerSanityCheck(recordTimer.timer_list, timer)
					if not timersanitycheck.check():
						timer.disable()
						payload = "%d timer conflict detected, aborting." % (CODE_ERR_LOCAL,)
						return self.sendLine(payload)
					else:
						if timersanitycheck.doubleCheck(): timer.disable()
				elif not timer.disabled and disable:
					timer.disable()
				recordTimer.timeChanged(timer)
				sef.sendTimerLine(timer, timerId, last=True)
		else:
			self.UPDT(' '.join(args))
コード例 #4
0
ファイル: ClientModeBox.py プロジェクト: fogoegami/454552
	def timeChanged(self, entry):
		print("[ClientModeBoxRemoteTimer] timer changed ", str(entry))

		entry.service_ref = ServiceReference(":".join(str(entry.service_ref).split(":")[:10]))
		try:
			args = urllib.urlencode({
					'sRef': str(entry.service_ref),
					'begin': str(entry.begin),
					'end': str(entry.end),
					'channelOld': str(entry.orig.service_ref),
					'beginOld': str(entry.orig.begin),
					'endOld': str(entry.orig.end),
					'name': entry.name,
					'disabled': str(1 if entry.disabled else 0),
					'justplay': str(1 if entry.justplay else 0),
					'afterevent': str(entry.afterEvent),
					'dirname': str(entry.dirname),
					'tags': " ".join(entry.tags),
					'repeated': str(entry.repeated),
					'description': entry.description
				})

			baseurl = self.getBaseUrl()
			httprequest = urllib2.urlopen(baseurl + '/web/timerchange?' + args)
			xmldoc = minidom.parseString(httprequest.read())
			status = xmldoc.getElementsByTagName('e2simplexmlresult')[0]
			success = getValueFromNode(status, 'e2state') == "True"
		except Exception as e:
			print("[ClientModeBoxRemoteTimer]", e)
			return None

		self.getTimers()

		if not success:
			timersanitycheck = TimerSanityCheck(self._timer_list, entry)
			if not timersanitycheck.check():
				print("timer conflict detected!")
				print(timersanitycheck.getSimulTimerList())
				return timersanitycheck.getSimulTimerList()

		return None
コード例 #5
0
 def toggleDisabledState(self):
     cur = self['timerlist'].getCurrent()
     if cur:
         t = cur
         if t.disabled:
             t.enable()
             timersanitycheck = TimerSanityCheck(
                 self.session.nav.RecordTimer.timer_list, cur)
             if not timersanitycheck.check():
                 t.disable()
                 print 'Sanity check failed'
                 simulTimerList = timersanitycheck.getSimulTimerList()
                 if simulTimerList is not None:
                     self.session.openWithCallback(self.finishedEdit,
                                                   TimerSanityConflict,
                                                   simulTimerList)
             else:
                 print 'Sanity check passed'
                 if timersanitycheck.doubleCheck():
                     t.disable()
         elif t.isRunning():
             if t.repeated:
                 list = (
                     (_('Stop current event but not coming events'),
                      'stoponlycurrent'),
                     (_('Stop current event and disable coming events'),
                      'stopall'),
                     (_("Don't stop current event but disable coming events"
                        ), 'stoponlycoming'))
                 self.session.openWithCallback(
                     boundFunction(self.runningEventCallback, t),
                     ChoiceBox,
                     title=
                     _('Repeating event currently recording... What do you want to do?'
                       ),
                     list=list)
         else:
             t.disable()
         self.session.nav.RecordTimer.timeChanged(t)
         self.refill()
         self.updateState()
コード例 #6
0
	def finishedEdit(self, answer):
		print "[TimerEditList] finished edit"
		if answer[0]:
			entry = answer[1]
			if entry.external_prev != entry.external:
				def removeEditTimer():
					entry.service_ref, entry.begin, entry.end, entry.external = entry.service_ref_prev, entry.begin_prev, entry.end_prev, entry.external_prev
					self.removeTimer()

				def moveEditTimerError():
					entry.external = entry.external_prev
					self.refill()
				if entry.external:
					self.fallbackTimer.addTimer(entry, removeEditTimer, moveEditTimerError)
				else:
					newentry = createRecordTimerEntry(entry)
					entry.service_ref, entry.begin, entry.end = entry.service_ref_prev, entry.begin_prev, entry.end_prev
					self.fallbackTimer.removeTimer(entry, boundFunction(self.finishedAdd, (True, newentry)), moveEditTimerError)
			elif entry.external:
				self.fallbackTimer.editTimer(entry, self.refill)
			else:
				timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, entry)
				success = False
				if not timersanitycheck.check():
					simulTimerList = timersanitycheck.getSimulTimerList()
					if simulTimerList is not None:
						for x in simulTimerList:
							if x.setAutoincreaseEnd(entry):
								self.session.nav.RecordTimer.timeChanged(x)
						if not timersanitycheck.check():
							simulTimerList = timersanitycheck.getSimulTimerList()
							if simulTimerList is not None:
								self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, timersanitycheck.getSimulTimerList())
						else:
							success = True
				else:
					success = True
				if success:
					print "[TimerEditList] sanity check passed"
					self.session.nav.RecordTimer.timeChanged(entry)
				self.fillTimerList()
コード例 #7
0
	def toggleDisabledState(self):
		cur = self["timerlist"].getCurrent()
		timer_changed = True
		if cur:
			t = cur
			if t.external:
				self.fallbackTimer.toggleTimer(t, self.refill)
			else:
				stateRunning = t.state in (1, 2)
				if t.disabled and t.repeated and stateRunning and not t.justplay:
					return
				if t.disabled:
					print "[TimerEditList] try to ENABLE timer"
					t.enable()
					timersanitycheck = TimerSanityCheck(self.session.nav.RecordTimer.timer_list, cur)
					if not timersanitycheck.check():
						t.disable()
						print "[TimerEditList] sanity check failed"
						simulTimerList = timersanitycheck.getSimulTimerList()
						if simulTimerList is not None:
							self.session.openWithCallback(self.finishedEdit, TimerSanityConflict, simulTimerList)
							timer_changed = False
					else:
						print "[TimerEditList] sanity check passed"
						if timersanitycheck.doubleCheck():
							t.disable()
				else:
					if stateRunning:
						if t.isRunning() and t.repeated:
							list = (
								(_("Stop current event but not coming events"), "stoponlycurrent"),
								(_("Stop current event and disable coming events"), "stopall"),
								(_("Don't stop current event but disable coming events"), "stoponlycoming")
							)
							self.session.openWithCallback(boundFunction(self.runningEventCallback, t), ChoiceBox, title=_("A repeating event is currently recording. What would you like to do?"), list=list)
							timer_changed = False
					else:
						t.disable()
				if timer_changed:
					self.session.nav.RecordTimer.timeChanged(t)
			self.refill()
コード例 #8
0
ファイル: RecordTimer.py プロジェクト: mcron/stb-gui
 def record(self,
            entry,
            ignoreTSC=False,
            dosave=True):  #wird von loadTimer mit dosave=False aufgerufen
     timersanitycheck = TimerSanityCheck(self.timer_list, entry)
     if not timersanitycheck.check():
         if ignoreTSC != True:
             print "timer conflict detected!"
             return timersanitycheck.getSimulTimerList()
         else:
             print "ignore timer conflict"
     elif timersanitycheck.doubleCheck():
         print "ignore double timer"
         return None
     entry.timeChanged()
     print "[Timer] Record " + str(entry)
     entry.Timer = self
     self.addTimerEntry(entry)
     if dosave:
         self.saveTimer()
     return None
コード例 #9
0
    def finishedEdit(self, answer):
        # 		print "[TimerEdit] finished edit"

        if answer[0]:
            # 			print "[TimerEdit] Edited timer"
            entry = answer[1]
            timersanitycheck = TimerSanityCheck(
                self.session.nav.RecordTimer.timer_list, entry)
            success = False
            if not timersanitycheck.check():
                simulTimerList = timersanitycheck.getSimulTimerList()
                if simulTimerList is not None:
                    for x in simulTimerList:
                        if x.setAutoincreaseEnd(entry):
                            self.session.nav.RecordTimer.timeChanged(x)
                    if not timersanitycheck.check():
                        simulTimerList = timersanitycheck.getSimulTimerList()
                        if simulTimerList is not None:
                            self.session.openWithCallback(
                                self.finishedEdit, TimerSanityConflict,
                                timersanitycheck.getSimulTimerList(),
                                self.menu_path)
                    else:
                        success = True
            else:
                success = True
            if success:
                print "[TimerEdit] Sanity check passed"
                self.session.nav.RecordTimer.timeChanged(entry)

            self.fillTimerList()
            self.updateState()
        else:
            #			print "[TimerEdit] Timeredit aborted"
            if self.disable_on_cancel:
                answer[1].disable()
                self.session.nav.RecordTimer.timeChanged(answer[1])
                self.fillTimerList()
                self.updateState()
        self.disable_on_cancel = False
コード例 #10
0
	def record(self, entry, ignoreTSC=False, dosave=True): # wird von loadTimer mit dosave=False aufgerufen
		timersanitycheck = TimerSanityCheck(self.timer_list,entry)
		answer = None
		if not timersanitycheck.check():
			if not ignoreTSC:
				print "[RecordTimer] timer conflict detected!"
				print timersanitycheck.getSimulTimerList()
				return timersanitycheck.getSimulTimerList()
			else:
				print "[RecordTimer] ignore timer conflict..."
				if not dosave:
					entry.disabled = True
					answer = timersanitycheck.getSimulTimerList()
		elif timersanitycheck.doubleCheck():
			print "[RecordTimer] ignore double timer..."
			return None
		entry.timeChanged()
		print "[Timer] Record " + str(entry)
		entry.Timer = self
		self.addTimerEntry(entry)
		if dosave:
			self.saveTimer()
		return answer
コード例 #11
0
	def modifyTimer(self, timer, name, shortdesc, begin, end, serviceref, eit=None, base_timer=None):
		if base_timer:
			timer.justplay = base_timer.justplay
			timer.conflict_detection = base_timer.conflict_detection
			timer.always_zap = base_timer.always_zap
		timer.name = name
		timer.description = shortdesc
		timer.begin = int(begin)
		timer.end = int(end)
		timer.service_ref = ServiceReference(serviceref)
		if eit:
			timer.eit = eit
		if base_timer:
			check_timer_list = NavigationInstance.instance.RecordTimer.timer_list[:]
			if timer in check_timer_list:
				check_timer_list.remove(timer)
			timersanitycheck = TimerSanityCheck(check_timer_list, timer)
			if not timersanitycheck.check():
				return False
			elif timersanitycheck.doubleCheck():
				return False
			else:
				doLog("[AutoTimer] conflict not found for modify timer %s." % timer.name)
		return True
コード例 #12
0
ファイル: Vps.py プロジェクト: prl001/enigma2-plugins
    def check(self):
        # Simulation ggf. stoppen
        if self.timer.state > TimerEntry.StateWaiting and self.simulate_recordService:
            self.stop_simulation()

        # VPS wurde wieder deaktiviert oder Timer wurde beendet
        if self.timer is None or self.timer.state == TimerEntry.StateEnded or self.timer.cancelled:
            self.program_abort()
            self.stop_simulation()
            return -1

        if self.timer.vpsplugin_enabled == False or config.plugins.vps.enabled.value == False:
            if self.activated_auto_increase:
                self.timer.autoincrease = False
            self.program_abort()
            self.stop_simulation()
            return -1

        self.nextExecution = 180

        if config.plugins.vps.initial_time.value < 2 and self.timer.vpsplugin_overwrite:
            initial_time = 120
        else:
            initial_time = config.plugins.vps.initial_time.value * 60

        if self.timer.vpsplugin_overwrite == True:
            if self.timer.state == TimerEntry.StateWaiting or self.timer.state == TimerEntry.StatePrepared:
                # Startzeit verschieben
                if (self.timer.begin - 60) < time():
                    if self.org_timer_begin == 0:
                        self.org_timer_begin = self.timer.begin
                    elif (self.org_timer_begin +
                          self.max_extending_timer) < time():
                        # Sendung begann immer noch nicht -> abbrechen
                        self.timer.abort()
                        self.session.nav.RecordTimer.doActivate(self.timer)
                        self.program_abort()
                        self.stop_simulation()
                        self.timer.log(
                            0,
                            "[VPS] abort timer, waited enough to find Event-ID"
                        )
                        return -1

                    self.timer.begin += 60
                    if (self.timer.end - self.timer.begin) < 300:
                        self.timer.end += 180
                        # auf Timer-Konflikt prüfen
                        timersanitycheck = TimerSanityCheck(
                            self.session.nav.RecordTimer.timer_list,
                            self.timer)
                        if not timersanitycheck.check():
                            self.timer.abort()
                            self.session.nav.RecordTimer.doActivate(self.timer)
                            self.program_abort()
                            self.stop_simulation()
                            self.timer.log(
                                0, "[VPS] abort timer due to TimerSanityCheck")
                            return -1

                    self.session.nav.RecordTimer.timeChanged(self.timer)

                if 30 < self.nextExecution:
                    self.nextExecution = 30

        # Programm starten
        if not self.program_running:
            if self.timer.state == TimerEntry.StateRunning:
                self.program_start()

            elif initial_time > 0:
                if (self.timer.begin - initial_time) <= time():
                    self.program_start()
                else:
                    n = self.timer.begin - initial_time - time()
                    if n < self.nextExecution:
                        self.nextExecution = n

        if self.timer.state == TimerEntry.StateRunning:
            if self.activated_auto_increase and self.org_timer_end != 0 and (
                    self.org_timer_end + (4 * 3600)) < time():
                # Aufnahme läuft seit 4 Stunden im Autoincrease -> abbrechen
                self.timer.autoincrease = False
                self.activated_auto_increase = False
                self.dont_restart_program = True
                self.program_abort()
                self.stop_simulation()
                self.timer.log(0,
                               "[VPS] stop recording, too much autoincrease")

            try:
                if self.timer.vpsplugin_wasTimerWakeup:
                    self.timer.vpsplugin_wasTimerWakeup = False
                    if not Screens.Standby.inTryQuitMainloop:
                        RecordTimerEntry.TryQuitMainloop(False)
            except:
                pass

        return self.nextExecution
コード例 #13
0
def editTimer(session, serviceref, begin, end, name, description, disabled,
              justplay, afterEvent, dirname, tags, repeated, channelOld,
              beginOld, endOld, recordingtype, vpsinfo, always_zap, pipzap,
              allow_duplicate, autoadjust):
    channelOld_str = ':'.join(str(channelOld).split(':')[:11])
    rt = session.nav.RecordTimer
    for timer in rt.timer_list + rt.processed_timers:
        needed_ref = ':'.join(
            timer.service_ref.ref.toString().split(':')[:11]) == channelOld_str
        if needed_ref and int(timer.begin) == beginOld and int(
                timer.end) == endOld:
            timer.service_ref = ServiceReference(serviceref)
            # TODO: start end time check
            timer.begin = int(float(begin))
            timer.end = int(float(end))
            timer.name = name
            timer.description = description
            # TODO : EIT
            # timer.eit = eit
            timer.disabled = disabled
            timer.justplay = justplay
            timer.afterEvent = afterEvent
            timer.dirname = dirname
            timer.tags = tags
            timer.repeated = repeated
            timer.processRepeated()
            if vpsinfo is not None:
                timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"]
                timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"]
                timer.vpsplugin_time = vpsinfo["vpsplugin_time"]

            if always_zap != -1:
                if hasattr(timer, "always_zap"):
                    timer.always_zap = always_zap == 1
                if hasattr(timer, "zapbeforerecord"):
                    timer.zapbeforerecord = always_zap == 1

            if pipzap != -1:
                if hasattr(timer, "pipzap"):
                    timer.pipzap = pipzap == 1

            if hasattr(timer, "allow_duplicate"):
                timer.allow_duplicate = allow_duplicate

            if hasattr(timer, "autoadjust"):
                if autoadjust == -1:
                    autoadjust = config.recording.adjust_time_to_event.value and 1 or 0
                timer.autoadjust = autoadjust

            if recordingtype:
                timer.descramble = {
                    "normal": True,
                    "descrambled": True,
                    "scrambled": False,
                }[recordingtype]
                timer.record_ecm = {
                    "normal": False,
                    "descrambled": True,
                    "scrambled": True,
                }[recordingtype]

            # TODO: multi tuner test
            sanity = TimerSanityCheck(rt.timer_list, timer)
            conflicts = None
            if not sanity.check():
                conflicts = sanity.getSimulTimerList()
                if conflicts is not None:
                    for conflict in conflicts:
                        if conflict.setAutoincreaseEnd(timer):
                            rt.timeChanged(conflict)
                            if not sanity.check():
                                conflicts = sanity.getSimulTimerList()
            if conflicts is None:
                rt.timeChanged(timer)
                return {
                    "result": True,
                    "message": _("Timer '%s' changed") % name
                }
            else:
                errors = []
                conflictinfo = []
                for conflict in conflicts:
                    errors.append(conflict.name)
                    conflictinfo.append({
                        "serviceref":
                        str(conflict.service_ref),
                        "servicename":
                        removeBad(conflict.service_ref.getServiceName()),
                        "name":
                        conflict.name,
                        "begin":
                        conflict.begin,
                        "end":
                        conflict.end,
                        "realbegin":
                        strftime(_("%d.%m.%Y %H:%M"),
                                 (localtime(float(conflict.begin)))),
                        "realend":
                        strftime(_("%d.%m.%Y %H:%M"),
                                 (localtime(float(conflict.end))))
                    })

                return {
                    "result": False,
                    "message": _("Timer '%s' not saved while Conflict") % name,
                    "conflicts": conflictinfo
                }

    return {
        "result":
        False,
        "message":
        _("Could not find timer '%s' with given start and end time!") % name
    }
コード例 #14
0
        print "[GBIpboxRemoteTimer] web interface url: " + baseurl

        try:
            httprequest = urllib2.urlopen(baseurl + '/web/timeradd?' + args)
            xmldoc = minidom.parseString(httprequest.read())
            status = xmldoc.getElementsByTagName('e2simplexmlresult')[0]
            success = getValueFromNode(status, 'e2state') == "True"
        except Exception, e:
            print "[GBIpboxRemoteTimer]", e
            return None

        self.getTimers()

        if not success:
            timersanitycheck = TimerSanityCheck(self._timer_list, entry)
            if not timersanitycheck.check():
                print "timer conflict detected!"
                print timersanitycheck.getSimulTimerList()
                return timersanitycheck.getSimulTimerList()

        return None

    def timeChanged(self, entry):
        print "[GBIpboxRemoteTimer] timer changed ", str(entry)

        entry.service_ref = ServiceReference(":".join(
            str(entry.service_ref).split(":")[:10]))
        args = urllib.urlencode({
            'sRef': str(entry.service_ref),
            'begin': str(entry.begin),
コード例 #15
0
ファイル: Vps.py プロジェクト: grantor/enigma2-plugins
    def check(self):
        # Simulation ggf. stoppen
        if self.timer.state > TimerEntry.StateWaiting and self.simulate_recordService and self.timer.vpsplugin_overwrite == False:
            self.stop_simulation()

        # VPS wurde wieder deaktiviert oder Timer wurde beendet
        if self.timer is None or self.timer.state == TimerEntry.StateEnded or self.timer.cancelled:
            self.program_abort()
            self.stop_simulation()
            #print "[VPS-Plugin] Timer wurde beendet"
            return -1

        if self.timer.vpsplugin_enabled == False or config.plugins.vps.enabled.value == False:
            if self.activated_auto_increase:
                self.timer.autoincrease = False
            self.program_abort()
            self.stop_simulation()
            #print "[VPS-Plugin] VPS wurde bei Timer wieder deaktiviert"
            return -1

        self.nextExecution = 180

        if config.plugins.vps.initial_time.value < 2 and self.timer.vpsplugin_overwrite:
            initial_time = 120
        else:
            initial_time = config.plugins.vps.initial_time.value * 60

        if self.timer.vpsplugin_overwrite == True:
            if config.plugins.vps.allow_overwrite.value == True:
                if self.timer.state == TimerEntry.StateWaiting or self.timer.state == TimerEntry.StatePrepared:
                    # Startzeit verschieben
                    if (self.timer.begin - 60) < time():
                        if self.org_timer_begin == 0:
                            self.org_timer_begin = self.timer.begin
                        elif (self.org_timer_begin + (6 * 3600)) < time():
                            # Sendung begann immer noch nicht -> abbrechen
                            self.timer.abort()
                            self.session.nav.RecordTimer.doActivate(self.timer)
                            self.program_abort()
                            self.stop_simulation()
                            self.timer.log(
                                0,
                                "[VPS] abort timer, waited hours to find Event-ID"
                            )
                            return -1

                        self.timer.begin += 60
                        if (self.timer.end - self.timer.begin) < 300:
                            self.timer.end += 180
                            # auf Timer-Konflikt prüfen
                            timersanitycheck = TimerSanityCheck(
                                self.session.nav.RecordTimer.timer_list,
                                self.timer)
                            if not timersanitycheck.check():
                                self.timer.abort()
                                self.session.nav.RecordTimer.doActivate(
                                    self.timer)
                                self.program_abort()
                                self.stop_simulation()
                                self.timer.log(
                                    0,
                                    "[VPS] abort timer due to TimerSanityCheck"
                                )
                                return -1

                        self.timer.timeChanged()
                        #print "[VPS-Plugin] verschiebe Startzeit des Timers (overwrite)"

                    if 30 < self.nextExecution:
                        self.nextExecution = 30

            else:
                self.timer.vpsplugin_overwrite = False

        # Programm starten
        if not self.program_running:
            if self.timer.state == TimerEntry.StateRunning:
                self.program_start()

            elif initial_time > 0:
                if (self.timer.begin - initial_time) <= time():
                    self.program_start()
                else:
                    n = self.timer.begin - initial_time - time()
                    if n < self.nextExecution:
                        self.nextExecution = n

        if self.timer.state == TimerEntry.StateRunning:
            if self.activated_auto_increase and self.org_timer_end != 0 and (
                    self.org_timer_end + (4 * 3600)) < time():
                # Aufnahme läuft seit 4 Stunden im Autoincrease -> abbrechen
                self.timer.autoincrease = False
                self.activated_auto_increase = False
                self.dont_restart_program = True
                self.program_abort()
                self.stop_simulation()
                self.timer.log(0,
                               "[VPS] stop recording, too much autoincrease")

            # suche nach weiteren Sendungen mit der VPS-Zeit
            if self.program_seek_vps_multiple_started == 0 and config.plugins.vps.allow_seeking_multiple_pdc.value == True:
                self.program_seek_vps_multiple_start()
            elif self.program_seek_vps_multiple_started > 0 and (
                (time() - self.program_seek_vps_multiple_started) > 60):
                self.program_seek_vps_multiple_abort()

        return self.nextExecution
コード例 #16
0
    def editTimer(self, param):
        print("[WebComponents.Timer] editTimer")

        #OK first we need to parse all of your Parameters
        #For some of them (like afterEvent or justplay) we can use default values
        #for others (the serviceReference or the Begin/End time of the timer
        #we have to quit if they are not set/have illegal values

        if 'sRef' not in param:
            return (False, _("Missing Parameter: sRef"))
        service_ref = ServiceReference(param['sRef'])

        repeated = int(param.get('repeated') or 0)

        if 'begin' not in param:
            return (False, _("Missing Parameter: begin"))
        begin = int(float(param['begin']))

        if 'end' not in param:
            return (False, _("Missing Parameter: end"))
        end = int(float(param['end']))

        tm = int(time())
        if tm <= begin:
            pass
        elif tm > begin and tm < end and repeated == 0:
            pass
        elif repeated == 0:
            return (False,
                    _("Illegal Parameter value for Parameter begin : '%s'") %
                    begin)

        if 'applyMargin' in param:
            if param['applyMargin'] == "1":
                begin -= config.recording.margin_before.value * 60
                end += config.recording.margin_after.value * 60

        if 'name' not in param:
            return (False, _("Missing Parameter: name"))
        name = param['name']

        if 'description' not in param:
            return (False, _("Missing Parameter: description"))
        description = param['description'].replace("\n", " ")

        eit = param.get("eit", None)
        if eit is None or eit.strip() == "":
            eit = 0
        else:
            try:
                eit = int(eit)
            except ValueError:
                return (False,
                        _("Illegal Parameter value for Parameter eit : '%s'") %
                        eit)

        print("[WebComponents.Sources.Timer]: eit=%d" % eit)
        if eit != 0:
            #check if the given event exists, if it doesn't the timer may be already running
            epgcache = eEPGCache.getInstance()
            event = epgcache.lookupEventId(eServiceReference(param['sRef']),
                                           eit)
            if event:
                eit = event.getEventId()
                #TODO add some subservice handling
            else:
                print(
                    "[WebComponents.Sources.Timer] event not found, will be ignored"
                )

        disabled = False  #Default to: Enabled
        if 'disabled' in param:
            if param['disabled'] == "1":
                disabled = True
            else:
                #TODO - maybe we can give the user some useful hint here
                pass

        justplay = False  #Default to: Record
        if 'justplay' in param:
            if param['justplay'] == "1":
                justplay = True

        afterEvent = 3  #Default to Afterevent: Auto
        if 'afterevent' in param:
            if (param['afterevent'] == "0") or (param['afterevent']
                                                == "1") or (param['afterevent']
                                                            == "2"):
                afterEvent = int(param['afterevent'])

        dirname = preferredTimerPath()
        if 'dirname' in param and param['dirname']:
            dirname = param['dirname']

        tags = []
        if 'tags' in param and param['tags']:
            tags = unescape(param['tags']).split(' ')

        delold = 0
        if 'deleteOldOnSave' in param:
            delold = int(param['deleteOldOnSave'])

        #Try to edit an existing Timer
        if delold:
            if 'channelOld' in param and param['channelOld']:
                channelOld = ServiceReference(param['channelOld'])
            else:
                return (False, _("Missing Parameter: channelOld"))
            # We do need all of the following Parameters, too, for being able of finding the Timer.
            # Therefore so we can neither use default values in this part nor can we
            # continue if a parameter is missing
            if 'beginOld' not in param:
                return (False, _("Missing Parameter: beginOld"))
            beginOld = int(param['beginOld'])

            if 'endOld' not in param:
                return (False, _("Missing Parameter: endOld"))
            endOld = int(param['endOld'])

            #let's try to find the timer
            try:
                for timer in self.recordtimer.timer_list + self.recordtimer.processed_timers:
                    if str(timer.service_ref) == str(channelOld):
                        if int(timer.begin) == beginOld:
                            if int(
                                    timer.end
                            ) == endOld:  #we've found the timer we've been searching for
                                #set the new data
                                timer.service_ref = service_ref
                                timer.begin = begin
                                timer.end = end
                                timer.name = name
                                timer.description = description
                                timer.eit = eit
                                timer.disabled = disabled
                                timer.justplay = justplay
                                timer.afterEvent = afterEvent
                                timer.dirname = dirname
                                timer.tags = tags
                                timer.repeated = repeated
                                timer.processRepeated()

                                #sanity check
                                timersanitycheck = TimerSanityCheck(
                                    self.session.nav.RecordTimer.timer_list,
                                    timer)
                                conflicts = None
                                if not timersanitycheck.check():
                                    conflicts = timersanitycheck.getSimulTimerList(
                                    )
                                    if conflicts is not None:
                                        for x in conflicts:
                                            if x.setAutoincreaseEnd(entry):
                                                self.session.nav.RecordTimer.timeChanged(
                                                    x)
                                        if not timersanitycheck.check():
                                            conflicts = timersanitycheck.getSimulTimerList(
                                            )

                                if conflicts is None:
                                    self.recordtimer.timeChanged(
                                        timer)  #go and save it
                                    print(
                                        "[WebComponents.Timer] editTimer: Timer changed!"
                                    )
                                    return (True, "Timer '%s' changed" %
                                            (timer.name))
                                else:
                                    print(
                                        "[WebComponents.Timer] editTimer conflicting Timers: %s"
                                        % (conflicts))
                                    msg = ""
                                    for t in conflicts:
                                        msg = "%s / %s" % (msg, t.name)

                                    return (
                                        False,
                                        _("Conflicting Timer(s) detected! %s")
                                        % (msg))

            except Exception as e:
                #obviously some value was not good, return an error
                import traceback
                print(traceback.format_exc())
                return (False, _("Changing the timer for '%s' failed!") % name)

            return (
                False,
                _("Could not find timer '%s' with given start and end time!") %
                name)

        #Try adding a new Timer

        try:
            #Create a new instance of recordtimerentry
            timer = RecordTimerEntry(service_ref,
                                     begin,
                                     end,
                                     name,
                                     description,
                                     eit,
                                     disabled,
                                     justplay,
                                     afterEvent,
                                     dirname=dirname,
                                     tags=tags)
            timer.repeated = repeated
            #add the new timer
            conflicts = self.recordtimer.record(timer)
            if conflicts is None:
                return (True, _("Timer '%s' added") % (timer.name))
            else:
                print(
                    "[WebComponents.Timer] editTimer conflicting Timers: %s" %
                    (conflicts))
                msg = ""
                for timer in conflicts:
                    msg = "%s / %s" % (msg, timer.name)

                return (False, _("Conflicting Timer(s) detected! %s") % (msg))

        except Exception as e:
            #something went wrong, most possibly one of the given paramater-values was wrong
            print("[WebComponents.Timer] editTimer exception: %s" % (e))
            return (False, _("Could not add timer '%s'!") % name)

        return (False, "Unexpected Error")
コード例 #17
0
def editTimer(session, serviceref, begin, end, name, description, disabled,
              justplay, afterEvent, dirname, tags, repeated, channelOld,
              beginOld, endOld, vpsinfo, always_zap):
    # TODO: exception handling
    channelOld_str = ':'.join(str(channelOld).split(':')[:11])
    rt = session.nav.RecordTimer
    for timer in rt.timer_list + rt.processed_timers:
        needed_ref = ':'.join(
            timer.service_ref.ref.toString().split(':')[:11]) == channelOld_str
        if needed_ref and int(timer.begin) == beginOld and int(
                timer.end) == endOld:
            timer.service_ref = ServiceReference(serviceref)
            # TODO: start end time check
            timer.begin = int(float(begin))
            timer.end = int(float(end))
            timer.name = name
            timer.description = description
            # TODO : EIT
            # timer.eit = eit
            timer.disabled = disabled
            timer.justplay = justplay
            timer.afterEvent = afterEvent
            timer.dirname = dirname
            timer.tags = tags
            timer.repeated = repeated
            timer.processRepeated()
            if vpsinfo is not None:
                timer.vpsplugin_enabled = vpsinfo["vpsplugin_enabled"]
                timer.vpsplugin_overwrite = vpsinfo["vpsplugin_overwrite"]
                timer.vpsplugin_time = vpsinfo["vpsplugin_time"]

            if always_zap != -1:
                if hasattr(timer, "always_zap"):
                    timer.always_zap = always_zap == 1

            # TODO: multi tuner test
            sanity = TimerSanityCheck(rt.timer_list, timer)
            conflicts = None
            if not sanity.check():
                conflicts = sanity.getSimulTimerList()
                if conflicts is not None:
                    for conflict in conflicts:
                        if conflict.setAutoincreaseEnd(entry):
                            rt.timeChanged(conflict)
                            if not sanity.check():
                                conflicts = sanity.getSimulTimerList()
            if conflicts is None:
                rt.timeChanged(timer)
                return {
                    "result": True,
                    "message": _("Timer '%s' changed") % name
                }
            else:
                errors = []
                conflictinfo = []
                for conflict in conflicts:
                    errors.append(conflict.name)
                    conflictinfo.append({
                        "serviceref":
                        str(conflict.service_ref),
                        "servicename":
                        mangle_epg_text(conflict.service_ref.getServiceName()),
                        "name":
                        conflict.name,
                        "begin":
                        conflict.begin,
                        "end":
                        conflict.end,
                        "realbegin":
                        strftime("%d.%m.%Y %H:%M",
                                 (localtime(float(conflict.begin)))),
                        "realend":
                        strftime("%d.%m.%Y %H:%M",
                                 (localtime(float(conflict.end))))
                    })

                return {
                    "result": False,
                    "message": _("Timer '%s' not saved while Conflict") % name,
                    "conflicts": conflictinfo
                }

    msg = _("Could not find timer '%s' with given start and end time!") % name
    return {"result": False, "message": msg}