diff options
Diffstat (limited to 'desktop/onionshare/tor_connection.py')
-rw-r--r-- | desktop/onionshare/tor_connection.py | 140 |
1 files changed, 16 insertions, 124 deletions
diff --git a/desktop/onionshare/tor_connection.py b/desktop/onionshare/tor_connection.py index 30cd1814..839757fd 100644 --- a/desktop/onionshare/tor_connection.py +++ b/desktop/onionshare/tor_connection.py @@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. """ import time -from PySide2 import QtCore, QtWidgets, QtGui +from PySide2 import QtCore, QtWidgets from onionshare_cli.onion import ( BundledTorCanceled, @@ -39,122 +39,6 @@ from onionshare_cli.onion import ( ) from . import strings -from .gui_common import GuiCommon -from .widgets import Alert - - -class TorConnectionDialog(QtWidgets.QProgressDialog): - """ - Connecting to Tor dialog. - """ - - open_tor_settings = QtCore.Signal() - success = QtCore.Signal() - - def __init__( - self, common, custom_settings=False, testing_settings=False, onion=None - ): - super(TorConnectionDialog, self).__init__(None) - - self.common = common - self.testing_settings = testing_settings - - if custom_settings: - self.settings = custom_settings - else: - self.settings = self.common.settings - - self.common.log("TorConnectionDialog", "__init__") - - if self.testing_settings: - self.title = strings._("gui_settings_connection_type_test_button") - self.onion = onion - else: - self.title = "OnionShare" - self.onion = self.common.gui.onion - - self.setWindowTitle(self.title) - - self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) - self.setModal(True) - self.setFixedSize(400, 150) - - # Label - self.setLabelText(strings._("connecting_to_tor")) - - # Progress bar ticks from 0 to 100 - self.setRange(0, 100) - # Don't show if connection takes less than 100ms (for non-bundled tor) - self.setMinimumDuration(100) - - # Start displaying the status at 0 - self._tor_status_update(0, "") - - def start(self): - self.common.log("TorConnectionDialog", "start") - - t = TorConnectionThread(self.common, self.settings, self) - t.tor_status_update.connect(self._tor_status_update) - t.connected_to_tor.connect(self._connected_to_tor) - t.canceled_connecting_to_tor.connect(self._canceled_connecting_to_tor) - t.error_connecting_to_tor.connect(self._error_connecting_to_tor) - t.start() - - # The main thread needs to remain active, and checking for Qt events, - # until the thread is finished. Otherwise it won't be able to handle - # accepting signals. - self.active = True - while self.active: - time.sleep(0.1) - self.common.gui.qtapp.processEvents() - - def _tor_status_update(self, progress, summary): - self.setValue(int(progress)) - self.setLabelText( - f"<strong>{strings._('connecting_to_tor')}</strong><br>{summary}" - ) - - def _connected_to_tor(self): - self.common.log("TorConnectionDialog", "_connected_to_tor") - self.active = False - # Close the dialog after connecting - self.setValue(self.maximum()) - self.success.emit() - - def _canceled_connecting_to_tor(self): - self.common.log("TorConnectionDialog", "_canceled_connecting_to_tor") - self.active = False - self.onion.cleanup() - - # Cancel connecting to Tor - QtCore.QTimer.singleShot(1, self.cancel) - - def _error_connecting_to_tor(self, msg): - self.common.log("TorConnectionDialog", "_error_connecting_to_tor") - self.active = False - - if self.testing_settings: - # If testing, just display the error but don't open settings - def alert(): - Alert(self.common, msg, QtWidgets.QMessageBox.Warning, title=self.title) - - else: - # If not testing, open settings after displaying the error - def alert(): - Alert( - self.common, - f"{msg}\n\n{strings._('gui_tor_connection_error_settings')}", - QtWidgets.QMessageBox.Warning, - title=self.title, - ) - - # Open settings - self.open_tor_settings.emit() - - QtCore.QTimer.singleShot(1, alert) - - # Cancel connecting to Tor - QtCore.QTimer.singleShot(1, self.cancel) class TorConnectionWidget(QtWidgets.QWidget): @@ -165,6 +49,7 @@ class TorConnectionWidget(QtWidgets.QWidget): open_tor_settings = QtCore.Signal() success = QtCore.Signal() fail = QtCore.Signal(str) + update_progress = QtCore.Signal(int) def __init__(self, common, status_bar): super(TorConnectionWidget, self).__init__(None) @@ -186,14 +71,10 @@ class TorConnectionWidget(QtWidgets.QWidget): progress_layout.addWidget(self.progress) progress_layout.addWidget(self.cancel_button) - inner_layout = QtWidgets.QVBoxLayout() - inner_layout.addWidget(self.label) - inner_layout.addLayout(progress_layout) + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self.label) + layout.addLayout(progress_layout) - layout = QtWidgets.QHBoxLayout() - layout.addStretch() - layout.addLayout(inner_layout) - layout.addStretch() self.setLayout(layout) # Start displaying the status at 0 @@ -233,12 +114,14 @@ class TorConnectionWidget(QtWidgets.QWidget): def cancel_clicked(self): self.was_canceled = True self.fail.emit("") + self._reset() def wasCanceled(self): return self.was_canceled def _tor_status_update(self, progress, summary): self.progress.setValue(int(progress)) + self.update_progress.emit(int(progress)) self.label.setText( f"<strong>{strings._('connecting_to_tor')}</strong><br>{summary}" ) @@ -250,8 +133,10 @@ class TorConnectionWidget(QtWidgets.QWidget): # Close the dialog after connecting self.progress.setValue(self.progress.maximum()) + self.update_progress.emit(int(self.progress.maximum())) self.success.emit() + self._reset() def _canceled_connecting_to_tor(self): self.common.log("TorConnectionWidget", "_canceled_connecting_to_tor") @@ -260,11 +145,18 @@ class TorConnectionWidget(QtWidgets.QWidget): # Cancel connecting to Tor QtCore.QTimer.singleShot(1, self.cancel_clicked) + self._reset() def _error_connecting_to_tor(self, msg): self.common.log("TorConnectionWidget", "_error_connecting_to_tor") self.active = False self.fail.emit(msg) + self._reset() + + def _reset(self): + self.label.setText("") + self.progress.setValue(0) + self.update_progress.emit(0) class TorConnectionThread(QtCore.QThread): |