diff options
| author | kali <kali@leap.se> | 2013-02-15 09:31:51 +0900 | 
|---|---|---|
| committer | kali <kali@leap.se> | 2013-02-15 09:31:51 +0900 | 
| commit | 9cea9c8a34343f8792d65b96f93ae22bd8685878 (patch) | |
| tree | 9f512367b1d47ced5614702a00f3ff0a8fe746d7 /src/leap/app.py | |
| parent | 7159734ec6c0b76fc7f3737134cd22fdaaaa7d58 (diff) | |
| parent | 1032e07a50c8bb265ff9bd31b3bb00e83ddb451e (diff) | |
Merge branch 'release/v0.2.0'
Conflicts:
	README.txt
Diffstat (limited to 'src/leap/app.py')
| -rw-r--r-- | src/leap/app.py | 99 | 
1 files changed, 92 insertions, 7 deletions
| diff --git a/src/leap/app.py b/src/leap/app.py index 0a61fd4f..1b2ccd61 100644 --- a/src/leap/app.py +++ b/src/leap/app.py @@ -1,12 +1,27 @@ +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 +from functools import partial  import logging +import platform +import signal +  # This is only needed for Python v2 but is harmless for Python v3.  import sip  sip.setapi('QVariant', 2) +sip.setapi('QString', 2)  from PyQt4.QtGui import (QApplication, QSystemTrayIcon, QMessageBox) +from PyQt4 import QtCore +from leap import __version__ as VERSION  from leap.baseapp.mainwindow import LeapWindow +from leap.util import polkit +from leap.gui import locale_rc + -logger = logging.getLogger(name=__name__) +def sigint_handler(*args, **kwargs): +    logger = kwargs.get('logger', None) +    logger.debug('SIGINT catched. shutting down...') +    mainwindow = args[0] +    mainwindow.shutdownSignal.emit()  def main(): @@ -15,26 +30,96 @@ def main():      long live to the (hidden) leap window!      """      import sys -    from leap.utils import leap_argparse +    from leap.util import leap_argparse      parser, opts = leap_argparse.init_leapc_args()      debug = getattr(opts, 'debug', False) -    #XXX get debug level and set logger accordingly +    # XXX get severity from command line args      if debug: -        logger.debug('args: ', opts) +        level = logging.DEBUG +    else: +        level = logging.WARNING + +    logger = logging.getLogger(name='leap') +    logger.setLevel(level) +    console = logging.StreamHandler() +    console.setLevel(level) +    formatter = logging.Formatter( +        '%(asctime)s ' +        '- %(name)s - %(levelname)s - %(message)s') +    console.setFormatter(formatter) +    logger.addHandler(console) + +    logger.info('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') +    logger.info('LEAP client version %s', VERSION) +    logger.info('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') +    logfile = getattr(opts, 'log_file', False) +    if logfile: +        logger.debug('setting logfile to %s ', logfile) +        fileh = logging.FileHandler(logfile) +        fileh.setLevel(logging.DEBUG) +        fileh.setFormatter(formatter) +        logger.addHandler(fileh) +    logger.info('Starting app')      app = QApplication(sys.argv) +    # launch polkit-auth agent if needed +    if platform.system() == "Linux": +        polkit.check_if_running_polkit_auth() + +    # To test: +    # $ LANG=es ./app.py +    locale = QtCore.QLocale.system().name() +    qtTranslator = QtCore.QTranslator() +    if qtTranslator.load("qt_%s" % locale, ":/translations"): +        app.installTranslator(qtTranslator) +    appTranslator = QtCore.QTranslator() +    if appTranslator.load("leap_client_%s" % locale, ":/translations"): +        app.installTranslator(appTranslator) + +    # needed for initializing qsettings +    # it will write .config/leap/leap.conf +    # top level app settings +    # in a platform independent way +    app.setOrganizationName("leap") +    app.setApplicationName("leap") +    app.setOrganizationDomain("leap.se") + +    # XXX we could check here +    # if leap-client is already running, and abort +    # gracefully in that case. +      if not QSystemTrayIcon.isSystemTrayAvailable():          QMessageBox.critical(None, "Systray", -                             "I couldn't detect any \ -system tray on this system.") +                             "I couldn't detect" +                             "any system tray on this system.")          sys.exit(1)      if not debug:          QApplication.setQuitOnLastWindowClosed(False)      window = LeapWindow(opts) -    window.show() + +    # this dummy timer ensures that +    # control is given to the outside loop, so we +    # can hook our sigint handler. +    timer = QtCore.QTimer() +    timer.start(500) +    timer.timeout.connect(lambda: None) + +    sigint_window = partial(sigint_handler, window, logger=logger) +    signal.signal(signal.SIGINT, sigint_window) + +    if debug: +        # we only show the main window +        # if debug mode active. +        # if not, it will be set visible +        # from the systray menu. +        window.show() +        if sys.platform == "darwin": +            window.raise_() + +    # run main loop      sys.exit(app.exec_())  if __name__ == "__main__": | 
