summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/bug_improve_signal_handling1
-rw-r--r--changes/bug_update_ui_when_fails_at_config1
-rw-r--r--src/leap/bitmask/gui/eip_status.py40
-rw-r--r--src/leap/bitmask/gui/mainwindow.py14
4 files changed, 25 insertions, 31 deletions
diff --git a/changes/bug_improve_signal_handling b/changes/bug_improve_signal_handling
new file mode 100644
index 00000000..4f88747f
--- /dev/null
+++ b/changes/bug_improve_signal_handling
@@ -0,0 +1 @@
+- Improve signal handling in the mainwindow and wizard. \ No newline at end of file
diff --git a/changes/bug_update_ui_when_fails_at_config b/changes/bug_update_ui_when_fails_at_config
new file mode 100644
index 00000000..84f19401
--- /dev/null
+++ b/changes/bug_update_ui_when_fails_at_config
@@ -0,0 +1 @@
+- Update EIP UI if it fails to download the config. \ No newline at end of file
diff --git a/src/leap/bitmask/gui/eip_status.py b/src/leap/bitmask/gui/eip_status.py
index ba041968..e7795083 100644
--- a/src/leap/bitmask/gui/eip_status.py
+++ b/src/leap/bitmask/gui/eip_status.py
@@ -526,6 +526,14 @@ class EIPStatusWidget(QtGui.QWidget):
self.ui.lblEIPMessage.setText(
self.tr("Route traffic through: {0}").format(self._provider))
+ def aborted(self):
+ """
+ Notify the state machine that EIP was aborted for some reason.
+ """
+ # signal connection_aborted to state machine:
+ qtsigs = self.eipconnection.qtsigs
+ qtsigs.connection_aborted_signal.emit()
+
#
# Slots for signals
#
@@ -544,9 +552,7 @@ class EIPStatusWidget(QtGui.QWidget):
self.eip_conductor.eip_name)
self.set_eip_status(eip_status_label, error=True)
- # signal connection_aborted to state machine:
- qtsigs = self.eipconnection.qtsigs
- qtsigs.connection_aborted_signal.emit()
+ self.aborted()
def _on_eip_openvpn_already_running(self):
self.set_eip_status(
@@ -555,9 +561,7 @@ class EIPStatusWidget(QtGui.QWidget):
error=True)
self.set_eipstatus_off()
- # signal connection_aborted to state machine:
- qtsigs = self.eipconnection.qtsigs
- qtsigs.connection_aborted_signal.emit()
+ self.aborted()
def _on_eip_alien_openvpn_already_running(self):
self.set_eip_status(
@@ -567,9 +571,7 @@ class EIPStatusWidget(QtGui.QWidget):
error=True)
self.set_eipstatus_off()
- # signal connection_aborted to state machine:
- qtsigs = self.eipconnection.qtsigs
- qtsigs.connection_aborted_signal.emit()
+ self.aborted()
def _on_eip_openvpn_not_found_error(self):
self.set_eip_status(
@@ -577,9 +579,7 @@ class EIPStatusWidget(QtGui.QWidget):
error=True)
self.set_eipstatus_off()
- # signal connection_aborted to state machine:
- qtsigs = self.eipconnection.qtsigs
- qtsigs.connection_aborted_signal.emit()
+ self.aborted()
def _on_eip_vpn_launcher_exception(self):
# XXX We should implement again translatable exceptions so
@@ -587,9 +587,7 @@ class EIPStatusWidget(QtGui.QWidget):
self.set_eip_status("VPN Launcher error.", error=True)
self.set_eipstatus_off()
- # signal connection_aborted to state machine:
- qtsigs = self.eipconnection.qtsigs
- qtsigs.connection_aborted_signal.emit()
+ self.aborted()
def _on_eip_no_polkit_agent_error(self):
self.set_eip_status(
@@ -602,9 +600,7 @@ class EIPStatusWidget(QtGui.QWidget):
error=True)
self.set_eipstatus_off()
- # signal connection_aborted to state machine:
- qtsigs = self.eipconnection.qtsigs
- qtsigs.connection_aborted_signal.emit()
+ self.aborted()
def _on_eip_no_pkexec_error(self):
self.set_eip_status(
@@ -612,9 +608,7 @@ class EIPStatusWidget(QtGui.QWidget):
error=True)
self.set_eipstatus_off()
- # signal connection_aborted to state machine:
- qtsigs = self.eipconnection.qtsigs
- qtsigs.connection_aborted_signal.emit()
+ self.aborted()
def _on_eip_no_tun_kext_error(self):
self.set_eip_status(
@@ -623,9 +617,7 @@ class EIPStatusWidget(QtGui.QWidget):
"system.").format(self.eip_conductor.eip_name))
self.set_eipstatus_off()
- # signal connection_aborted to state machine:
- qtsigs = self.eipconnection.qtsigs
- qtsigs.connection_aborted_signal.emit()
+ self.aborted()
@QtCore.Slot()
def _on_eip_network_unreachable(self):
diff --git a/src/leap/bitmask/gui/mainwindow.py b/src/leap/bitmask/gui/mainwindow.py
index d46ef863..e7406106 100644
--- a/src/leap/bitmask/gui/mainwindow.py
+++ b/src/leap/bitmask/gui/mainwindow.py
@@ -186,7 +186,7 @@ class MainWindow(QtGui.QMainWindow):
# timeout object used to trigger quit
self._quit_timeout_callater = None
- self._backend_connected_signals = {}
+ self._backend_connected_signals = []
self._backend_connect()
self.ui.action_preferences.triggered.connect(self._show_preferences)
@@ -318,7 +318,7 @@ class MainWindow(QtGui.QMainWindow):
:param method: the method to call when the signal is triggered.
:type method: callable, Slot or Signal
"""
- self._backend_connected_signals[signal] = method
+ self._backend_connected_signals.append((signal, method))
signal.connect(method)
def _backend_bad_call(self, data):
@@ -355,12 +355,12 @@ class MainWindow(QtGui.QMainWindow):
conntrack(sig.prov_download_ca_cert, self._intermediate_stage)
conntrack(sig.prov_download_provider_info, self._load_provider_config)
conntrack(sig.prov_check_api_certificate, self._provider_config_loaded)
+ conntrack(sig.prov_check_api_certificate, self._get_provider_details)
conntrack(sig.prov_problem_with_provider, self._login_problem_provider)
conntrack(sig.prov_cancelled_setup, self._set_login_cancelled)
- self._connect_and_track(sig.prov_get_details,
- self._provider_get_details)
+ conntrack(sig.prov_get_details, self._provider_get_details)
# Login signals
conntrack(sig.srp_auth_ok, self._authentication_finished)
@@ -399,7 +399,6 @@ class MainWindow(QtGui.QMainWindow):
sig.backend_bad_call.connect(self._backend_bad_call)
- sig.prov_check_api_certificate.connect(self._get_provider_details)
sig.prov_unsupported_client.connect(self._needs_update)
sig.prov_unsupported_api.connect(self._incompatible_api)
sig.prov_get_all_services.connect(self._provider_get_all_services)
@@ -435,13 +434,13 @@ class MainWindow(QtGui.QMainWindow):
Some signals are emitted from the wizard, and we want to
ignore those.
"""
- for signal, method in self._backend_connected_signals.items():
+ for signal, method in self._backend_connected_signals:
try:
signal.disconnect(method)
except RuntimeError:
pass # Signal was not connected
- self._backend_connected_signals = {}
+ self._backend_connected_signals = []
@QtCore.Slot()
def _rejected_wizard(self):
@@ -1627,6 +1626,7 @@ class MainWindow(QtGui.QMainWindow):
self.tr("Unable to connect: Problem with provider"))
logger.error(data[self._backend.ERROR_KEY])
self._already_started_eip = False
+ self._eip_status.aborted()
# end of EIP methods ---------------------------------------------