52
52
except ImportError:
56
from elisa.core.utils.update_checker import UpdateChecker
58
# could happen if the elisa http client plugin is missing
56
62
from distutils.version import LooseVersion
58
UPDATES_URL = "http://elisa.fluendo.com/updates/update.php?install_date=%(date)s&version=%(version)s&os=%(os)s&user_id=%(user_id)s"
59
64
CONFIG_DIR = os.path.join(os.path.expanduser('~'), ".elisa-0.5")
61
66
# We add to the configuration file name the version number in order to bypass
266
272
self.interface_controller = interface_controller.InterfaceController()
267
273
self.options = options
269
def _check_updates(self):
270
distro = misc.get_os_name()
271
url = UPDATES_URL % {'date': self._install_date, 'version': __version__,
272
'os': distro, 'user_id': self._user_id}
273
dfr = client.getPage(url)
275
def got_result(result):
277
splitted = result.splitlines()
278
if len(splitted) == 1:
279
# hey, looks like new elisaweb hasn't been deployed yet.
284
user_id, version, installer_url = splitted
286
if version and LooseVersion(version) > LooseVersion(__version__):
287
msg = NewElisaVersionMessage(version, installer_url)
288
self.bus.send_message(msg)
290
# store user_id in config
291
self.config.set_option('user_id', user_id, section='general')
292
self._user_id = user_id
294
# re-check for updates one day later
295
reactor.callLater(86400, threads.deferToThread, self._check_updates)
297
dfr.addCallback(got_result)
275
def _update_check_callback(self, results):
277
version = results['version']
282
user_id = results['user_id']
287
installer_url = results['installer_url']
291
if version and LooseVersion(version) > LooseVersion(__version__):
292
msg = NewElisaVersionMessage(version, installer_url)
293
self.bus.send_message(msg)
295
# store user_id in config
296
self.config.set_option('user_id', user_id, section='general')
297
self._user_id = user_id
299
# store the country code
301
self.config.set_option('country_code', results['country_code'],
304
# country code not given in the response
299
307
def _load_exception_hook(self):
300
308
""" Override the default system exception hook with our own
453
461
self.resource_manager.start()
454
462
self.service_manager.start()
456
# FIXME: use the http client for this
457
threads.deferToThread(self._check_updates)
465
self.update_checker = UpdateChecker(self._install_date,
466
self._user_id, __version__)
467
self.update_checker.start(self._update_check_callback)
459
469
def stop(self, stop_reactor=True):
460
470
"""Stop the application.
466
476
self._close_splash_screen()
478
if self.update_checker is not None:
479
self.update_checker.stop()
468
481
def interface_controller_stopped(result):
469
482
self.info("Stopping managers")