Jump to content


orti-otto

Member Since 17 Oct 2011
Offline Last Active 24 Oct 2011 21:32
-----

Topics I've Started

Fehler in selbst erstelltem plugin(Image neu 15.10)

17 October 2011 - 18:51

ich will in einem eigenen plugin folgende messagebox mit callBack ausführen, und bekomme immer die weiter unten stehende Fehlermeldung nachdem ich ok auswähle.

Wo muss ich suchen?
Wenn ich es richtig verstehe, dann kann irgendetwas in einer Liste beim Beenden des Dialogs nicht gefunden werden.
Aber was?

mfg
Dietmar

   def askDeepStandby(self):
		self.session.openWithCallback(
			self.choiceCallbackYN,
			MessageBox,
			_("Go to sleep now?"),
			type = MessageBox.TYPE_YESNO,
			timeout = 60)
	def choiceCallbackYN(self, result):
	 print pluginPrintname, "result", result
		if result:
			self.doDeepStandby(1)
		else:
			result = 60 # 60 Minuten spaeter
			config_wakeup = self.clkToDatetime(config.plugins.simplepowersaver.wakeup)
			config_sleep  = self.clkToDatetime(config.plugins.simplepowersaver.sleep)
			if config_sleep < config_wakeup:
				config_sleep += timedelta(days=1)
			print pluginPrintname, "config_wakeup", config_wakeup
			print pluginPrintname, "config_sleep", config_sleep
			self.DeepStandbyVerzoegerung = self.total_seconds(datetime.now() - config_sleep) / 60
			print pluginPrintname, "self.DeepStandbyVerzoegerung", self.DeepStandbyVerzoegerung
			self.DeepStandbyVerzoegerung += result
			print pluginPrintname, "self.DeepStandbyVerzoegerung", self.DeepStandbyVerzoegerung

Traceback (most recent call last):
  File "/usr/lib/*******/python/mytest.py", line 185, in processDelay
	self.current_dialog.doClose()
  File "/usr/lib/*******/python/Screens/Screen.py", line 113, in doClose
  File "/usr/lib/*******/python/Screens/InfoBarGenerics.py", line 1814, in __removeNotifications
ValueError: list.remove(x):

eigentlich habe ich vor die Idee des Timers der Messagebox in eine Klasse ChoiceBoxTimer zu integrieren: s.u.
Dazu habe ich von Klasse ChoiceBox folgendermaßen abgeleitet. Kompilieren ist möglich. Ich habe aber Probleme mit dem Aufruf: ChoiceBox wird so aufgerufen:

		lst	 = [(' At once',			 0)]
		lst.append((' 30 ' + _('minutes'), 30))
		lst.append((' 60 ' + _('minutes'), 60))
		lst.append(('120 ' + _('minutes'),120))
  
		dei = self.session.openWithCallback(self.choiceCallback, ChoiceBox, title=_("Deepstandby now or go down later?"), list=lst)
		dei.setTitle(_("Simple Power Saver"))

da dachte ich, dass ChoiceBoxTimer dann einfach so aufgerufen werden kann (zusätzlicher Parameter timeout): Der Aufruf endet mit einem Greenscreen. Kann jemand bestätigen, dass meine Gedanken richtig sind? Ich glaube, ich habe das mit den *arguments und **kwargs in enigma2 noch nicht richtig verstanden. Wenn ich das Problem hier richtig verstehe, kann in mytest.py die Klasse ChoiceBoxTimer nicht instanziert werden und dann kommt die Fehlermeldung ,dass

dlg.isTmp = True

kein Attribut isTmp hat. Ich habe im Moment keinen Chrash-log. Liefere ich nach. Vielleich kann ja auch so jemand helfen.

		lst	 = [(' At once',			 0)]
		lst.append((' 30 ' + _('minutes'), 30))
		lst.append((' 60 ' + _('minutes'), 60))
		lst.append(('120 ' + _('minutes'),120))
  
		dei = self.session.openWithCallback(self.choiceCallback, ChoiceBox, title=_("Deepstandby now or go down later?"), list=lst, timeout=60)
		dei.setTitle(_("Simple Power Saver"))

Code der Klasse ChoiceBoxTimer:

from Screens.ChoiceBox import ChoiceBox
class ChoiceBoxTimer(ChoiceBox):
	def __init__(self, session, title = "", list = [], keys = None, selection = 0, skin_name = [], timeout = -1):
  
		ChoiceBox.__init__(self, session, title, list, keys, selection, skin_name)
		self.initTimeout(timeout)
	def initTimeout(self, timeout):
		self.timeout = timeout
		if timeout > 0:
				self.timer = eTimer()
				self.timer.callback.append(self.timerTick)
				self.onExecBegin.append(self.startTimer)
				self.origTitle = None
				if self.execing:
						self.timerTick()
				else:
						self.onShown.append(self.__onShown)
				self.timerRunning = True
		else:
				self.timerRunning = False
	def __onShown(self):
		self.onShown.remove(self.__onShown)
		self.timerTick()
	def startTimer(self):
		self.timer.start(1000)
	def stopTimer(self):
		if self.timerRunning:
			del self.timer
			self.onExecBegin.remove(self.startTimer)
			self.setTitle(self.origTitle)
			self.timerRunning = False
	def timerTick(self):
		if self.execing:
			self.timeout -= 1
			if self.origTitle is None:
				self.origTitle = self.instance.getTitle()
			self.setTitle(self.origTitle + " (" + str(self.timeout) + ")")
			if self.timeout == 0:
				self.timer.stop()
				self.timerRunning = False
				self.timeoutCallback()
	def timeoutCallback(self):
		print "Timeout!"
		self.ok()