diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index 60674a12..00c0aeec 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -25,6 +25,7 @@ from onionshare.settings import Settings from onionshare.onion import * from .tor_connection_dialog import TorConnectionDialog +from .settings_dialog import SettingsDialog from .menu import Menu from .file_selection import FileSelection from .server_status import ServerStatus @@ -59,6 +60,7 @@ class OnionShareGui(QtWidgets.QMainWindow): # Start the "Connecting to Tor" dialog, which calls onion.connect() tor_con = TorConnectionDialog(self.settings, self.onion) tor_con.canceled.connect(self._tor_connection_canceled) + tor_con.open_settings.connect(self._tor_connection_open_settings) tor_con.start() # Menu bar @@ -146,9 +148,19 @@ class OnionShareGui(QtWidgets.QMainWindow): def quit(): self.qtapp.quit() - # Wait 1ms for the event loop to finish closing the TorConnectionDialog before quitting + # Wait 1ms for the event loop to finish closing the TorConnectionDialog QtCore.QTimer.singleShot(1, quit) + def _tor_connection_open_settings(self): + """ + The TorConnectionDialog wants to open the Settings dialog + """ + def open_settings(): + SettingsDialog(self.qtapp) + + # Wait 1ms for the event loop to finish closing the TorConnectionDialog + QtCore.QTimer.singleShot(1, open_settings) + def start_server(self): """ Start the onionshare server. This uses multiple threads to start the Tor onion diff --git a/onionshare_gui/tor_connection_dialog.py b/onionshare_gui/tor_connection_dialog.py index ab5c6583..96bb2f60 100644 --- a/onionshare_gui/tor_connection_dialog.py +++ b/onionshare_gui/tor_connection_dialog.py @@ -22,10 +22,14 @@ from PyQt5 import QtCore, QtWidgets, QtGui from onionshare import strings, helpers from onionshare.onion import * +from .alert import Alert + class TorConnectionDialog(QtWidgets.QProgressDialog): """ Connecting to Tor dialog. """ + open_settings = QtCore.pyqtSignal() + def __init__(self, settings, onion): super(TorConnectionDialog, self).__init__(None) self.settings = settings @@ -62,10 +66,16 @@ class TorConnectionDialog(QtWidgets.QProgressDialog): except BundledTorCanceled as e: self.cancel() + except Exception as e: - print(e.args[0]) - # TODO: Open settings to connect to Tor properly - sys.exit() + # Cancel connecting to Tor + self.cancel() + + # Display the exception in an alert box + Alert("{}\n\nTry adjusting how OnionShare connects to the Tor network in Settings.".format(e.args[0]), QtWidgets.QMessageBox.Warning) + + # Open settings + self.open_settings.emit() def tor_status_update(self, progress, summary): self.setValue(int(progress))