summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkali <kali@leap.se>2012-10-08 09:32:34 +0900
committerkali <kali@leap.se>2012-10-08 09:32:34 +0900
commit479710e977327774b9ba9e1839f75b4a38b51e5f (patch)
tree120019de26461534c32c39f19777ed3be5084082
parentbf8c6b19b05e73a6e59b8884e1d26a730df6188b (diff)
add leap-status to main window in non-debug mode
not very DRY but just to have it ready for rc cut.
-rw-r--r--src/leap/baseapp/eip.py1
-rw-r--r--src/leap/baseapp/leap_app.py42
-rw-r--r--src/leap/baseapp/mainwindow.py37
-rw-r--r--src/leap/baseapp/systray.py41
-rw-r--r--src/leap/eip/eipconnection.py26
5 files changed, 91 insertions, 56 deletions
diff --git a/src/leap/baseapp/eip.py b/src/leap/baseapp/eip.py
index e291de34..311470f2 100644
--- a/src/leap/baseapp/eip.py
+++ b/src/leap/baseapp/eip.py
@@ -36,6 +36,7 @@ class EIPConductorAppMixin(object):
self.conductor = EIPConnection(
watcher_cb=self.newLogLine.emit,
config_file=config_file,
+ checker_signals=(self.changeLeapStatus.emit, ),
status_signals=(self.statusChange.emit, ),
debug=self.debugmode,
ovpn_verbosity=opts.openvpn_verb)
diff --git a/src/leap/baseapp/leap_app.py b/src/leap/baseapp/leap_app.py
index 460d1269..f9eb3bb1 100644
--- a/src/leap/baseapp/leap_app.py
+++ b/src/leap/baseapp/leap_app.py
@@ -31,6 +31,8 @@ class MainWindowMixin(object):
# add widgets to layout
#self.createWindowHeader()
#mainLayout.addWidget(self.headerBox)
+
+ # created in systray
mainLayout.addWidget(self.statusIconBox)
if self.debugmode:
mainLayout.addWidget(self.statusBox)
@@ -87,26 +89,26 @@ class MainWindowMixin(object):
icon = QtGui.QIcon(APP_LOGO)
self.setWindowIcon(icon)
- def createWindowHeader(self):
- """
- description lines for main window
- """
- self.headerBox = QtGui.QGroupBox()
- self.headerLabel = QtGui.QLabel(
- "<font size=40>LEAP Encryption Access Project</font>")
- self.headerLabelSub = QtGui.QLabel(
- "<br><i>your internet encryption toolkit</i>")
-
- pixmap = QtGui.QPixmap(APP_LOGO)
- leap_lbl = QtGui.QLabel()
- leap_lbl.setPixmap(pixmap)
-
- headerLayout = QtGui.QHBoxLayout()
- headerLayout.addWidget(leap_lbl)
- headerLayout.addWidget(self.headerLabel)
- headerLayout.addWidget(self.headerLabelSub)
- headerLayout.addStretch()
- self.headerBox.setLayout(headerLayout)
+ #def createWindowHeader(self):
+ #"""
+ #description lines for main window
+ #"""
+ #self.headerBox = QtGui.QGroupBox()
+ #self.headerLabel = QtGui.QLabel(
+ #"<font size=40>LEAP Encryption Access Project</font>")
+ #self.headerLabelSub = QtGui.QLabel(
+ #"<br><i>your internet encryption toolkit</i>")
+#
+ #pixmap = QtGui.QPixmap(APP_LOGO)
+ #leap_lbl = QtGui.QLabel()
+ #leap_lbl.setPixmap(pixmap)
+#
+ #headerLayout = QtGui.QHBoxLayout()
+ #headerLayout.addWidget(leap_lbl)
+ #headerLayout.addWidget(self.headerLabel)
+ #headerLayout.addWidget(self.headerLabelSub)
+ #headerLayout.addStretch()
+ #self.headerBox.setLayout(headerLayout)
def set_statusbarMessage(self, msg):
self.statusBar().showMessage(msg)
diff --git a/src/leap/baseapp/mainwindow.py b/src/leap/baseapp/mainwindow.py
index 09e0c0bb..bf42f0e7 100644
--- a/src/leap/baseapp/mainwindow.py
+++ b/src/leap/baseapp/mainwindow.py
@@ -10,7 +10,6 @@ from leap.baseapp.log import LogPaneMixin
from leap.baseapp.systray import StatusAwareTrayIconMixin
from leap.baseapp.network import NetworkCheckerAppMixin
from leap.baseapp.leap_app import MainWindowMixin
-from leap.baseapp import dialogs
logger = logging.getLogger(name=__name__)
@@ -28,11 +27,16 @@ class LeapWindow(QtGui.QMainWindow,
"""
newLogLine = QtCore.pyqtSignal([str])
- statusChange = QtCore.pyqtSignal([object])
mainappReady = QtCore.pyqtSignal([])
initReady = QtCore.pyqtSignal([])
networkError = QtCore.pyqtSignal([object])
+ # XXX fix nomenclature here
+ # this is eip status change got from vpn management
+ statusChange = QtCore.pyqtSignal([object])
+ # this is global leap status
+ changeLeapStatus = QtCore.pyqtSignal([str])
+
def __init__(self, opts):
logger.debug('init leap window')
self.debugmode = getattr(opts, 'debug', False)
@@ -59,13 +63,18 @@ class LeapWindow(QtGui.QMainWindow,
self.trayIcon.activated.connect(self.iconActivated)
self.newLogLine.connect(
lambda line: self.onLoggerNewLine(line))
- self.statusChange.connect(
- lambda status: self.onStatusChange(status))
self.timer.timeout.connect(
lambda: self.onTimerTick())
self.networkError.connect(
lambda exc: self.onNetworkError(exc))
+ # status change.
+ # TODO unify
+ self.statusChange.connect(
+ lambda status: self.onStatusChange(status))
+ self.changeLeapStatus.connect(
+ lambda newstatus: self.onChangeLeapConnStatus(newstatus))
+
# do frwizard and init signals
self.mainappReady.connect(self.do_first_run_wizard_check)
self.initReady.connect(self.runchecks_and_eipconnect)
@@ -100,25 +109,5 @@ class InitChecksThread(QtCore.QThread):
def run(self):
self.fun()
-#<<<<<<< HEAD
def begin(self):
self.start()
-#=======
- # could send "ready" signal instead
- # eipapp should catch that
- #if self.conductor.autostart:
- #self.start_or_stopVPN()
-#
- #TODO: Put all Dialogs in one place
- #@QtCore.pyqtSlot()
- #def raise_Network_Error(self, exc):
- #message = exc.message
-#
- # XXX
- # check headless = False before
- # launching dialog.
- # (so Qt tests can assert stuff)
-#
- #dialog = dialogs.ErrorDialog()
- #dialog.warningMessage(message, 'error')
-#>>>>>>> feature/network_check
diff --git a/src/leap/baseapp/systray.py b/src/leap/baseapp/systray.py
index 1939bc09..d5d44f61 100644
--- a/src/leap/baseapp/systray.py
+++ b/src/leap/baseapp/systray.py
@@ -41,7 +41,7 @@ class StatusAwareTrayIconMixin(object):
self.createIconGroupBox()
self.createActions()
self.createTrayIcon()
- logger.debug('showing tray icon................')
+ #logger.debug('showing tray icon................')
self.trayIcon.show()
# not sure if this really belongs here, but...
@@ -75,6 +75,10 @@ class StatusAwareTrayIconMixin(object):
statusIconLayout.addWidget(self.ConnectionWidgets['connected'])
statusIconLayout.itemAt(1).widget().hide()
statusIconLayout.itemAt(2).widget().hide()
+
+ self.leapConnStatus = QtGui.QLabel("<b>disconnected</b>")
+ statusIconLayout.addWidget(self.leapConnStatus)
+
self.statusIconBox.setLayout(statusIconLayout)
def createTrayIcon(self):
@@ -84,9 +88,6 @@ class StatusAwareTrayIconMixin(object):
self.trayIconMenu = QtGui.QMenu(self)
self.trayIconMenu.addAction(self.connAct)
- #self.trayIconMenu.addAction(self.minimizeAction)
- #self.trayIconMenu.addAction(self.maximizeAction)
- #self.trayIconMenu.addAction(self.restoreAction)
self.trayIconMenu.addSeparator()
self.trayIconMenu.addAction(self.detailsAct)
self.trayIconMenu.addSeparator()
@@ -113,12 +114,6 @@ class StatusAwareTrayIconMixin(object):
self.detailsAct = QtGui.QAction("&Details...",
self,
triggered=self.detailsWin)
- #self.minimizeAction = QtGui.QAction("Mi&nimize", self,
- #triggered=self.hide)
- #self.maximizeAction = QtGui.QAction("Ma&ximize", self,
- #triggered=self.showMaximized)
- #self.restoreAction = QtGui.QAction("&Restore", self,
- #triggered=self.showNormal)
self.aboutAct = QtGui.QAction("&About", self,
triggered=self.about)
self.aboutQtAct = QtGui.QAction("About Q&t", self,
@@ -197,10 +192,32 @@ class StatusAwareTrayIconMixin(object):
@QtCore.pyqtSlot(object)
def onStatusChange(self, status):
"""
- slot for status changes. triggers new signals for
- updating icon, status bar, etc.
+ updates icon
"""
icon_name = self.conductor.get_icon_name()
+
+ # XXX refactor. Use QStateMachine
+
+ if icon_name in ("disconnected", "connected"):
+ self.changeLeapStatus.emit(icon_name)
+
+ if icon_name in ("connecting"):
+ # let's see how it matches
+ leap_status_name = self.conductor.get_leap_status()
+ self.changeLeapStatus.emit(leap_status_name)
+
self.setIcon(icon_name)
# change connection pixmap widget
self.setConnWidget(icon_name)
+
+ @QtCore.pyqtSlot(str)
+ def onChangeLeapConnStatus(self, newstatus):
+ """
+ slot for LEAP status changes
+ not to be confused with onStatusChange.
+ this only updates the non-debug LEAP Status line
+ next to the connection icon.
+ """
+ # XXX move bold to style sheet
+ self.leapConnStatus.setText(
+ "<b>%s</b>" % newstatus)
diff --git a/src/leap/eip/eipconnection.py b/src/leap/eip/eipconnection.py
index f0a98d8c..a5b59892 100644
--- a/src/leap/eip/eipconnection.py
+++ b/src/leap/eip/eipconnection.py
@@ -35,6 +35,9 @@ class EIPConnection(OpenVPNConnection):
status_signals = kwargs.pop('status_signals', None)
self.status = EIPConnectionStatus(callbacks=status_signals)
+ checker_signals = kwargs.pop('checker_signals', None)
+ self.checker_signals = checker_signals
+
self.provider_cert_checker = provider_cert_checker()
self.config_checker = config_checker()
@@ -59,10 +62,14 @@ class EIPConnection(OpenVPNConnection):
try:
# network (1)
+ for signal in self.checker_signals:
+ signal('checking encryption keys')
self.provider_cert_checker.run_all(skip_verify=skip_verify)
except Exception as exc:
push_err(exc)
try:
+ for signal in self.checker_signals:
+ signal('checking provider config')
self.config_checker.run_all(skip_download=skip_download)
except Exception as exc:
push_err(exc)
@@ -125,6 +132,9 @@ class EIPConnection(OpenVPNConnection):
"""
return self.status.get_state_icon()
+ def get_leap_status(self):
+ return self.status.get_leap_status()
+
#
# private methods
#
@@ -231,6 +241,22 @@ class EIPConnectionStatus(object):
}
return human_status[self.current]
+ def get_leap_status(self):
+ # XXX improve nomenclature
+ leap_status = {
+ 1: 'connecting to gateway',
+ 2: 'connecting to gateway',
+ 3: 'authenticating',
+ 4: 'establishing network encryption',
+ 5: 'establishing network encryption',
+ 6: 'establishing network encryption',
+ 7: 'connected',
+ 8: 'reconnecting',
+ 9: 'exiting',
+ 11: 'unrecoverable error',
+ }
+ return leap_status[self.current]
+
def get_state_icon(self):
"""
returns the high level icon