1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
from functools import partial
import logging
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.gui import locale_rc
def sigint_handler(*args, **kwargs):
logger = kwargs.get('logger', None)
logger.debug('SIGINT catched. shutting down...')
mainwindow = args[0]
mainwindow.shutdownSignal.emit()
def main():
"""
launches the main event loop
long live to the (hidden) leap window!
"""
import sys
from leap.util import leap_argparse
parser, opts = leap_argparse.init_leapc_args()
debug = getattr(opts, 'debug', False)
# XXX get severity from command line args
if debug:
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.debug(opts)
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)
# To test:
# $ LANG=es ./app.py
locale = QtCore.QLocale.system().name()
print locale
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")
if not QSystemTrayIcon.isSystemTrayAvailable():
QMessageBox.critical(None, "Systray",
"I couldn't detect"
"any system tray on this system.")
sys.exit(1)
if not debug:
QApplication.setQuitOnLastWindowClosed(False)
window = LeapWindow(opts)
# 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__":
main()
|