Commit 577a698fe3864aa59ab2427546a468faf760f221

Authored by Thiago Franco de Moraes
1 parent a26fd3c8

Using thread instead of a new process to verify invesalius new versions

invesalius/gui/dialogs.py
... ... @@ -373,6 +373,67 @@ class MessageDialog(wx.Dialog):
373 373  
374 374 self.Centre()
375 375  
  376 +
  377 +class UpdateMessageDialog(wx.Dialog):
  378 + def __init__(self, url):
  379 + msg=_("A new version of InVesalius is available. Do you want to open the download website now?")
  380 + title=_("Invesalius Update")
  381 + self.url = url
  382 +
  383 + pre = wx.PreDialog()
  384 + pre.Create(None, -1, title, size=(360, 370), pos=wx.DefaultPosition,
  385 + style=wx.DEFAULT_DIALOG_STYLE|wx.ICON_INFORMATION)
  386 + self.PostCreate(pre)
  387 +
  388 + # Static text which contains message to user
  389 + label = wx.StaticText(self, -1, msg)
  390 +
  391 + # Buttons
  392 + btn_yes = wx.Button(self, wx.ID_YES)
  393 + btn_yes.SetHelpText("")
  394 + btn_yes.SetDefault()
  395 +
  396 + btn_no = wx.Button(self, wx.ID_NO)
  397 + btn_no.SetHelpText("")
  398 +
  399 + btnsizer = wx.StdDialogButtonSizer()
  400 + btnsizer.AddButton(btn_yes)
  401 + btnsizer.AddButton(btn_no)
  402 + btnsizer.Realize()
  403 +
  404 + sizer = wx.BoxSizer(wx.VERTICAL)
  405 + sizer.Add(label, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
  406 + sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|
  407 + wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5)
  408 + self.SetSizer(sizer)
  409 + sizer.Fit(self)
  410 + self.Centre()
  411 +
  412 + btn_yes.Bind(wx.EVT_BUTTON, self._OnYes)
  413 + btn_no.Bind(wx.EVT_BUTTON, self._OnNo)
  414 +
  415 + # Subscribing to the pubsub event which happens when InVesalius is
  416 + # closed.
  417 + Publisher.subscribe(self._OnCloseInV, 'Exit')
  418 +
  419 + def _OnYes(self, evt):
  420 + # Launches the default browser with the url to download the new
  421 + # InVesalius version.
  422 + wx.LaunchDefaultBrowser(self.url)
  423 + self.Close()
  424 + self.Destroy()
  425 +
  426 + def _OnNo(self, evt):
  427 + # Closes and destroy this dialog.
  428 + self.Close()
  429 + self.Destroy()
  430 +
  431 + def _OnCloseInV(self, pubsub_evt):
  432 + # Closes and destroy this dialog.
  433 + self.Close()
  434 + self.Destroy()
  435 +
  436 +
376 437 def SaveChangesDialog__Old(filename):
377 438 message = _("The project %s has been modified.\nSave changes?")%filename
378 439 dlg = MessageDialog(message)
... ...
invesalius/invesalius.py
... ... @@ -68,6 +68,7 @@ class InVesalius(wx.App):
68 68 self.splash = SplashScreen()
69 69 self.splash.Show()
70 70 wx.CallLater(1000,self.Startup2)
  71 +
71 72 return True
72 73  
73 74 def MacOpenFile(self, filename):
... ... @@ -180,6 +181,11 @@ class SplashScreen(wx.SplashScreen):
180 181 self.fc = wx.FutureCall(1, self.ShowMain)
181 182 wx.FutureCall(1, parse_comand_line)
182 183  
  184 + # Check for updates
  185 + from threading import Thread
  186 + p = Thread(target=utils.UpdateCheck, args=())
  187 + p.start()
  188 +
183 189 def OnClose(self, evt):
184 190 # Make sure the default handler runs too so this window gets
185 191 # destroyed
... ... @@ -300,11 +306,6 @@ if __name__ == '__main__':
300 306 # import modules as they were on root invesalius folder
301 307 sys.path.append(".")
302 308  
303   - # Check for updates
304   - from multiprocessing import Process
305   - p = Process(target=utils.UpdateCheck, args=())
306   - p.daemon=True
307   - p.start()
308 309  
309 310 # Init application
310 311 main()
... ...
invesalius/utils.py
... ... @@ -369,20 +369,31 @@ def get_system_encoding():
369 369 def UpdateCheck():
370 370 import urllib
371 371 import urllib2
  372 + import wx
  373 + def _show_update_info():
  374 + from gui import dialogs
  375 + msg=_("A new version of InVesalius is available. Do you want to open the download website now?")
  376 + title=_("Invesalius Update")
  377 + msgdlg = dialogs.UpdateMessageDialog(url)
  378 + #if (msgdlg.Show()==wx.ID_YES):
  379 + #wx.LaunchDefaultBrowser(url)
  380 + msgdlg.Show()
  381 + #msgdlg.Destroy()
  382 +
372 383 print "Checking updates..."
373 384  
374 385 # Check if there is a language set
375   - import i18n
  386 + #import i18n
376 387 import session as ses
377 388 session = ses.Session()
378 389 install_lang = 0
379 390 if session.ReadLanguage():
380 391 lang = session.GetLanguage()
381   - if (lang != "False"):
382   - _ = i18n.InstallLanguage(lang)
383   - install_lang = 1
384   - if (install_lang==0):
385   - return
  392 + #if (lang != "False"):
  393 + #_ = i18n.InstallLanguage(lang)
  394 + #install_lang = 1
  395 + #if (install_lang==0):
  396 + #return
386 397 if session.ReadRandomId():
387 398 random_id = session.GetRandomId()
388 399  
... ... @@ -406,18 +417,4 @@ def UpdateCheck():
406 417 url = response.readline().rstrip()
407 418 if (last!=const.INVESALIUS_VERSION):
408 419 print " ...New update found!!! -> version:", last #, ", url=",url
409   - from time import sleep
410   - sleep(2)
411   - import wx
412   - app=wx.App()
413   - import i18n
414   - _ = i18n.InstallLanguage(lang)
415   - msg=_("A new version of InVesalius is available. Do you want to open the download website now?")
416   - title=_("Invesalius Update")
417   - msgdlg = wx.MessageDialog(None,msg,title, wx.YES_NO | wx.ICON_INFORMATION)
418   - if (msgdlg.ShowModal()==wx.ID_YES):
419   - wx.LaunchDefaultBrowser(url)
420   - msgdlg.Destroy()
421   - app.MainLoop()
422   -
423   -
  420 + wx.CallAfter(wx.CallLater, 1000, _show_update_info)
... ...