I added a func creating the messages (# old lines). Same problem. mmmhhh
Looking at the func open in mytest.py i think that the second message (session) is called before the first is totally destroyed.
Is it possible?
# Session.open:
# * push current active dialog ('current_dialog') onto stack
# * call execEnd for this dialog
# * clear in_exec flag
# * hide screen
# * instantiate new dialog into 'current_dialog'
# * create screens, components
# * read, apply skin
# * create GUI for screen
# * call execBegin for new dialog
# * set in_exec
# * show gui screen
# * call components' / screen's onExecBegin
# ... screen is active, until it calls 'close'...
# Session.close:
# * assert in_exec
# * save return value
# * start deferred close handler ('onClose')
# * execEnd
# * clear in_exec
# * hide screen
# .. a moment later: <<<<<<<< is this the problem?????
# Session.doClose:
# * destroy screen
the code:
def runMessage(self, text, msgtype, timeout=-1):
self.msg = self.session.open(MessageBox, text, msgtype, timeout)
self.msg.setTitle(_("Package installer"))
def installFinished(self, data):
if data:
self.msg.close()
self.checkServiceListStatus([self.installpkg])
if self.installpkg['status']:
text = _("Package %s installed.") % self.installpkg['name']
self["status"].setText(text)
---->>> here raises error self.runMessage(text, MessageBox.TYPE_INFO, 2)
# self.msg = self.session.open(MessageBox, _("Package %s installed.") % self.installpkg['name'], MessageBox.TYPE_INFO, timeout=2)
# self.msg.setTitle(_("Package installer"))
self.getPkgInfo()
self.updateServiceListState()
self.updateEntryList()
else:
text = _("Could not install %s package...") % self.installpkg['name']
self.runMessage(text, MessageBox.TYPE_ERROR, 5)
# self.msg = self.session.open(MessageBox, _("Could not install %s package...") % self.installpkg['name'], MessageBox.TYPE_ERROR, timeout=4)
#self.msg.setTitle(_("Package installer"))
# self["status"].setText( _("Could not install %s package!") % self.installpkg['name'])
self["status"].setText(text)
def installConfirm(self, confirmed):
if confirmed:
text = _("Installling %s...") % self.installpkg['name']
self["status"].setText(text)
# self["status"].setText(_("Installling %s...") % self.installpkg['name'])
# self.msg = self.session.open(MessageBox, _("Installing %s...") % self.installpkg['name'], MessageBox.TYPE_INFO, enable_input=False)
# self.msg.setTitle(_("Package installer"))
self.runMessage(text, MessageBox.TYPE_INFO)
self.sc.runCmd("opkg install %s" % self["list"].getCurrent()[5]['package'], self.installFinished)
def selectService(self):
current = self["list"].getCurrent()[5]
if current is not None:
if not current['status']:
self.installpkg = current
---->>>> start here self.session.openWithCallback(self.installConfirm, MessageBox, _("Do you want to install %s package?") % current['name'], MessageBox.TYPE_YESNO, timeout = 10, default = False)
return
self.curstate = current['state']
self.session.openWithCallback(self.stateCallback, ServiceControlPanel, current)