summaryrefslogtreecommitdiff
path: root/src/leap/baseapp
diff options
context:
space:
mode:
Diffstat (limited to 'src/leap/baseapp')
-rw-r--r--src/leap/baseapp/eip.py33
-rw-r--r--src/leap/baseapp/leap_app.py26
-rw-r--r--src/leap/baseapp/systray.py74
3 files changed, 90 insertions, 43 deletions
diff --git a/src/leap/baseapp/eip.py b/src/leap/baseapp/eip.py
index 515ae58d..98ff7142 100644
--- a/src/leap/baseapp/eip.py
+++ b/src/leap/baseapp/eip.py
@@ -1,5 +1,7 @@
+from __future__ import print_function
import logging
import time
+import sys
from PyQt4 import QtCore
@@ -38,8 +40,9 @@ class EIPConductorAppMixin(object):
debug=self.debugmode,
ovpn_verbosity=opts.openvpn_verb)
- # XXX remove skip download when sample service is ready
- self.conductor.run_checks(skip_download=True)
+ # XXX get skip_download from cli flag
+ skip_download = False
+ self.conductor.run_checks(skip_download=skip_download)
self.error_check()
# XXX should receive "ready" signal
@@ -58,13 +61,11 @@ class EIPConductorAppMixin(object):
"""
logger.debug('error check')
- #####################################
- # XXX refactor in progress (by #504)
-
errq = self.conductor.error_queue
while errq.qsize() != 0:
logger.debug('%s errors left in conductor queue', errq.qsize())
- error = errq.get()
+ # we get exception and original traceback from queue
+ error, tb = errq.get()
# redundant log, debugging the loop.
logger.error('%s: %s', error.__class__.__name__, error.message)
@@ -73,10 +74,8 @@ class EIPConductorAppMixin(object):
self.handle_eip_error(error)
else:
- # This is not quite working. FIXME
- import traceback
- traceback.print_exc()
- raise error
+ # deprecated form of raising exception.
+ raise error, None, tb
if error.failfirst is True:
break
@@ -132,6 +131,8 @@ class EIPConductorAppMixin(object):
ErrorDialog(errtype="critical",
msg=message,
label="critical error")
+ elif error.warning:
+ logger.warning(error.message)
else:
dialog = ErrorDialog()
@@ -151,13 +152,18 @@ class EIPConductorAppMixin(object):
# from openvpn manager)
if not self.eip_service_started:
+ # there is a race condition
+ # going on here. Depending on how long we take
+ # to init the qt app, the management socket
+ # is not ready yet.
return
if self.conductor.with_errors:
#XXX how to wait on pkexec???
#something better that this workaround, plz!!
- time.sleep(5)
- logger.debug('timeout')
+ #I removed the pkexec pass authentication at all.
+ #time.sleep(5)
+ #logger.debug('timeout')
logger.error('errors. disconnect')
self.start_or_stopVPN() # is stop
@@ -210,12 +216,12 @@ class EIPConductorAppMixin(object):
if self.debugmode:
self.startStopButton.setText('&Disconnect')
self.eip_service_started = True
+ self.toggleEIPAct()
# XXX decouple! (timer is init by icons class).
# we could bring Timer Init to this Mixin
# or to its own Mixin.
self.timer.start(constants.TIMER_MILLISECONDS)
-
return
if self.eip_service_started is True:
@@ -223,5 +229,6 @@ class EIPConductorAppMixin(object):
if self.debugmode:
self.startStopButton.setText('&Connect')
self.eip_service_started = False
+ self.toggleEIPAct()
self.timer.stop()
return
diff --git a/src/leap/baseapp/leap_app.py b/src/leap/baseapp/leap_app.py
index f91b2329..208c4e7c 100644
--- a/src/leap/baseapp/leap_app.py
+++ b/src/leap/baseapp/leap_app.py
@@ -7,6 +7,9 @@ from leap.gui import mainwindow_rc
logger = logging.getLogger(name=__name__)
+APP_LOGO = ':/images/leap-color-small.png'
+
+
class MainWindowMixin(object):
"""
create the main window
@@ -32,25 +35,30 @@ class MainWindowMixin(object):
widget.setLayout(mainLayout)
self.setWindowTitle("LEAP Client")
+ self.set_app_icon()
self.resize(400, 300)
self.set_statusbarMessage('ready')
+ def set_app_icon(self):
+ 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><b>E</b>ncryption \
-<b>I</b>nternet <b>P</b>roxy</font>")
- self.headerLabelSub = QtGui.QLabel("<i>trust your \
-technolust</i>")
+ 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(':/images/leapfrog.jpg')
- frog_lbl = QtGui.QLabel()
- frog_lbl.setPixmap(pixmap)
+ pixmap = QtGui.QPixmap(APP_LOGO)
+ leap_lbl = QtGui.QLabel()
+ leap_lbl.setPixmap(pixmap)
headerLayout = QtGui.QHBoxLayout()
- headerLayout.addWidget(frog_lbl)
+ headerLayout.addWidget(leap_lbl)
headerLayout.addWidget(self.headerLabel)
headerLayout.addWidget(self.headerLabelSub)
headerLayout.addStretch()
@@ -85,5 +93,5 @@ technolust</i>")
# XXX send signal instead?
logger.info('Shutting down')
self.conductor.cleanup()
- logger.info('Exiting')
+ logger.info('Exiting. Bye.')
QtGui.qApp.quit()
diff --git a/src/leap/baseapp/systray.py b/src/leap/baseapp/systray.py
index 762dac13..39a23f49 100644
--- a/src/leap/baseapp/systray.py
+++ b/src/leap/baseapp/systray.py
@@ -1,9 +1,15 @@
+import logging
+
from PyQt4 import QtCore
from PyQt4 import QtGui
+from leap import __branding as BRANDING
from leap import __version__ as VERSION
+
from leap.gui import mainwindow_rc
+logger = logging.getLogger(__name__)
+
class StatusAwareTrayIconMixin(object):
"""
@@ -61,7 +67,7 @@ class StatusAwareTrayIconMixin(object):
self.iconpath['connected'])),
self.ConnectionWidgets = con_widgets
- self.statusIconBox = QtGui.QGroupBox("Connection Status")
+ self.statusIconBox = QtGui.QGroupBox("EIP Connection Status")
statusIconLayout = QtGui.QHBoxLayout()
statusIconLayout.addWidget(self.ConnectionWidgets['disconnected'])
statusIconLayout.addWidget(self.ConnectionWidgets['connecting'])
@@ -76,12 +82,12 @@ class StatusAwareTrayIconMixin(object):
"""
self.trayIconMenu = QtGui.QMenu(self)
- self.trayIconMenu.addAction(self.connectVPNAction)
- self.trayIconMenu.addAction(self.dis_connectAction)
+ 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.minimizeAction)
- self.trayIconMenu.addAction(self.maximizeAction)
- self.trayIconMenu.addAction(self.restoreAction)
+ self.trayIconMenu.addAction(self.detailsAct)
self.trayIconMenu.addSeparator()
self.trayIconMenu.addAction(self.aboutAct)
self.trayIconMenu.addAction(self.aboutQtAct)
@@ -92,22 +98,26 @@ class StatusAwareTrayIconMixin(object):
self.setIcon('disconnected')
self.trayIcon.setContextMenu(self.trayIconMenu)
+ def bad(self):
+ logger.error('this should not be called')
+
def createActions(self):
"""
creates actions to be binded to tray icon
"""
- self.connectVPNAction = QtGui.QAction("Connect to &VPN", self,
- triggered=self.hide)
# XXX change action name on (dis)connect
- self.dis_connectAction = QtGui.QAction(
- "&(Dis)connect", self,
- triggered=lambda: self.start_or_stopVPN())
- 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.connAct = QtGui.QAction("Encryption ON turn &off", self,
+ triggered=lambda: self.start_or_stopVPN())
+
+ 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,
@@ -115,11 +125,33 @@ class StatusAwareTrayIconMixin(object):
self.quitAction = QtGui.QAction("&Quit", self,
triggered=self.cleanupAndQuit)
+ def toggleEIPAct(self):
+ # this is too simple by now.
+ # XXX We need to get the REAL info for Encryption state.
+ # (now is ON as soon as vpn launched)
+ if self.eip_service_started is True:
+ self.connAct.setText('Encryption ON turn o&ff')
+ else:
+ self.connAct.setText('Encryption OFF turn &on')
+
+ def detailsWin(self):
+ visible = self.isVisible()
+ if visible:
+ self.hide()
+ else:
+ self.show()
+
def about(self):
# move to widget
- QtGui.QMessageBox.about(self, "About",
- "Running LEAP client<br>"
- "version <b>%s</b>" % VERSION)
+ flavor = BRANDING.get('short_name', None)
+ content = ("LEAP client<br>"
+ "(version <b>%s</b>)<br>" % VERSION)
+ if flavor:
+ content = content + ('<br>Flavor: <i>%s</i><br>' % flavor)
+ content = content + (
+ "<br><a href='https://leap.se/'>"
+ "https://leap.se</a>")
+ QtGui.QMessageBox.about(self, "About", content)
def setConnWidget(self, icon_name):
oldlayout = self.statusIconBox.layout()
@@ -132,7 +164,7 @@ class StatusAwareTrayIconMixin(object):
def setIcon(self, name):
icon = self.Icons.get(name)(self)
self.trayIcon.setIcon(icon)
- self.setWindowIcon(icon)
+ #self.setWindowIcon(icon)
def getIcon(self, icon_name):
return self.states.get(icon_name, None)