summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2020-12-01 22:21:25 -0800
committerGitHub <noreply@github.com>2020-12-01 22:21:25 -0800
commit5f612a94a0356b797a1811f3898e5b4345b6952d (patch)
treeaa8e3a4184ae5361b5a7c0090f8a52a2b9a19e1b /desktop
parentb0b552931ac371fe3f3dc1b2a69572009143e4c9 (diff)
parentedaa8bd073382027bcb2042c4b14358c17c0a725 (diff)
downloadonionshare-5f612a94a0356b797a1811f3898e5b4345b6952d.tar.gz
onionshare-5f612a94a0356b797a1811f3898e5b4345b6952d.zip
Merge pull request #1239 from micahflee/1214_onion_error_translations
Translate Tor-related error messages
Diffstat (limited to 'desktop')
-rw-r--r--desktop/src/onionshare/gui_common.py51
-rw-r--r--desktop/src/onionshare/resources/locale/en.json3
-rw-r--r--desktop/src/onionshare/settings_dialog.py36
-rw-r--r--desktop/src/onionshare/threads.py16
-rw-r--r--desktop/src/onionshare/tor_connection_dialog.py41
5 files changed, 132 insertions, 15 deletions
diff --git a/desktop/src/onionshare/gui_common.py b/desktop/src/onionshare/gui_common.py
index f488a740..017fd6b7 100644
--- a/desktop/src/onionshare/gui_common.py
+++ b/desktop/src/onionshare/gui_common.py
@@ -24,7 +24,22 @@ import shutil
from pkg_resources import resource_filename
from . import strings
-from onionshare_cli.onion import Onion
+from onionshare_cli.onion import (
+ Onion,
+ TorErrorInvalidSetting,
+ TorErrorAutomatic,
+ TorErrorSocketPort,
+ TorErrorSocketFile,
+ TorErrorMissingPassword,
+ TorErrorUnreadableCookieFile,
+ TorErrorAuthError,
+ TorErrorProtocolError,
+ BundledTorTimeout,
+ BundledTorBroken,
+ TorTooOldEphemeral,
+ TorTooOldStealth,
+ PortNotAvailable,
+)
class GuiCommon:
@@ -377,3 +392,37 @@ class GuiCommon:
Returns the absolute path of a resource
"""
return resource_filename("onionshare", os.path.join("resources", filename))
+
+ @staticmethod
+ def get_translated_tor_error(e):
+ """
+ Takes an exception defined in onion.py and returns a translated error message
+ """
+ if type(e) is TorErrorInvalidSetting:
+ return strings._("settings_error_unknown")
+ elif type(e) is TorErrorAutomatic:
+ return strings._("settings_error_automatic")
+ elif type(e) is TorErrorSocketPort:
+ return strings._("settings_error_socket_port").format(e.args[0], e.args[1])
+ elif type(e) is TorErrorSocketFile:
+ return strings._("settings_error_socket_file").format(e.args[0])
+ elif type(e) is TorErrorMissingPassword:
+ return strings._("settings_error_missing_password")
+ elif type(e) is TorErrorUnreadableCookieFile:
+ return strings._("settings_error_unreadable_cookie_file")
+ elif type(e) is TorErrorAuthError:
+ return strings._("settings_error_auth").format(e.args[0], e.args[1])
+ elif type(e) is TorErrorProtocolError:
+ return strings._("error_tor_protocol_error").format(e.args[0])
+ elif type(e) is BundledTorTimeout:
+ return strings._("settings_error_bundled_tor_timeout")
+ elif type(e) is BundledTorBroken:
+ return strings._("settings_error_bundled_tor_broken").format(e.args[0])
+ elif type(e) is TorTooOldEphemeral:
+ return strings._("error_ephemeral_not_supported")
+ elif type(e) is TorTooOldStealth:
+ return strings._("error_stealth_not_supported")
+ elif type(e) is PortNotAvailable:
+ return strings._("error_port_not_available")
+
+ return None
diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json
index 1f98d7a7..9617e9c4 100644
--- a/desktop/src/onionshare/resources/locale/en.json
+++ b/desktop/src/onionshare/resources/locale/en.json
@@ -187,5 +187,6 @@
"settings_error_unreadable_cookie_file": "Connected to the Tor controller, but password may be wrong, or your user is not permitted to read the cookie file.",
"settings_error_bundled_tor_not_supported": "Using the Tor version that comes with OnionShare does not work in developer mode on Windows or macOS.",
"settings_error_bundled_tor_timeout": "Taking too long to connect to Tor. Maybe you aren't connected to the Internet, or have an inaccurate system clock?",
- "settings_error_bundled_tor_broken": "OnionShare could not connect to Tor:\n{}"
+ "settings_error_bundled_tor_broken": "OnionShare could not connect to Tor:\n{}",
+ "error_port_not_available": "OnionShare port not available"
} \ No newline at end of file
diff --git a/desktop/src/onionshare/settings_dialog.py b/desktop/src/onionshare/settings_dialog.py
index 40de8648..974b7008 100644
--- a/desktop/src/onionshare/settings_dialog.py
+++ b/desktop/src/onionshare/settings_dialog.py
@@ -27,11 +27,31 @@ import os
from onionshare_cli import common
from onionshare_cli.settings import Settings
-from onionshare_cli.onion import *
+from onionshare_cli.onion import (
+ Onion,
+ TorErrorInvalidSetting,
+ TorErrorAutomatic,
+ TorErrorSocketPort,
+ TorErrorSocketFile,
+ TorErrorMissingPassword,
+ TorErrorUnreadableCookieFile,
+ TorErrorAuthError,
+ TorErrorProtocolError,
+ BundledTorTimeout,
+ BundledTorBroken,
+ TorTooOldEphemeral,
+ TorTooOldStealth,
+ PortNotAvailable,
+)
from . import strings
from .widgets import Alert
-from .update_checker import *
+from .update_checker import (
+ UpdateCheckerCheckError,
+ UpdateCheckerInvalidLatestVersion,
+ UpdateChecker,
+ UpdateThread,
+)
from .tor_connection_dialog import TorConnectionDialog
from .gui_common import GuiCommon
@@ -698,10 +718,18 @@ class SettingsDialog(QtWidgets.QDialog):
TorErrorUnreadableCookieFile,
TorErrorAuthError,
TorErrorProtocolError,
- BundledTorNotSupported,
BundledTorTimeout,
+ BundledTorBroken,
+ TorTooOldEphemeral,
+ TorTooOldStealth,
+ PortNotAvailable,
) as e:
- Alert(self.common, e.args[0], QtWidgets.QMessageBox.Warning)
+ message = self.common.gui.get_translated_tor_error(e)
+ Alert(
+ self.common,
+ message,
+ QtWidgets.QMessageBox.Warning,
+ )
if settings.get("connection_type") == "bundled":
self.tor_status.hide()
self._enable_buttons()
diff --git a/desktop/src/onionshare/threads.py b/desktop/src/onionshare/threads.py
index 338bbf27..285b51b9 100644
--- a/desktop/src/onionshare/threads.py
+++ b/desktop/src/onionshare/threads.py
@@ -24,7 +24,6 @@ import os
from PySide2 import QtCore
from onionshare_cli.onion import (
- TorTooOld,
TorErrorInvalidSetting,
TorErrorAutomatic,
TorErrorSocketPort,
@@ -34,6 +33,10 @@ from onionshare_cli.onion import (
TorErrorAuthError,
TorErrorProtocolError,
BundledTorTimeout,
+ BundledTorBroken,
+ TorTooOldEphemeral,
+ TorTooOldStealth,
+ PortNotAvailable,
)
from . import strings
@@ -93,7 +96,6 @@ class OnionThread(QtCore.QThread):
self.success.emit()
except (
- TorTooOld,
TorErrorInvalidSetting,
TorErrorAutomatic,
TorErrorSocketPort,
@@ -103,9 +105,13 @@ class OnionThread(QtCore.QThread):
TorErrorAuthError,
TorErrorProtocolError,
BundledTorTimeout,
- OSError,
+ BundledTorBroken,
+ TorTooOldEphemeral,
+ TorTooOldStealth,
+ PortNotAvailable,
) as e:
- self.error.emit(e.args[0])
+ message = self.mode.common.gui.get_translated_tor_error(e)
+ self.error.emit(message)
return
@@ -174,7 +180,7 @@ class AutoStartTimer(QtCore.QThread):
class EventHandlerThread(QtCore.QThread):
"""
- To trigger an event, write a JSON line to the events file. When that file changes,
+ To trigger an event, write a JSON line to the events file. When that file changes,
each line will be handled as an event. Valid events are:
{"type": "new_tab"}
{"type": "new_share_tab", "filenames": ["file1", "file2"]}
diff --git a/desktop/src/onionshare/tor_connection_dialog.py b/desktop/src/onionshare/tor_connection_dialog.py
index d5fa72a0..a9201aed 100644
--- a/desktop/src/onionshare/tor_connection_dialog.py
+++ b/desktop/src/onionshare/tor_connection_dialog.py
@@ -18,9 +18,25 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
+import time
from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare_cli.onion import *
+from onionshare_cli.onion import (
+ BundledTorCanceled,
+ TorErrorInvalidSetting,
+ TorErrorAutomatic,
+ TorErrorSocketPort,
+ TorErrorSocketFile,
+ TorErrorMissingPassword,
+ TorErrorUnreadableCookieFile,
+ TorErrorAuthError,
+ TorErrorProtocolError,
+ BundledTorTimeout,
+ BundledTorBroken,
+ TorTooOldEphemeral,
+ TorTooOldStealth,
+ PortNotAvailable,
+)
from . import strings
from .gui_common import GuiCommon
@@ -156,9 +172,26 @@ class TorConnectionThread(QtCore.QThread):
)
self.canceled_connecting_to_tor.emit()
- except Exception as e:
- self.common.log("TorConnectionThread", "run", f"caught exception: {e}")
- self.error_connecting_to_tor.emit(str(e))
+ except (
+ TorErrorInvalidSetting,
+ TorErrorAutomatic,
+ TorErrorSocketPort,
+ TorErrorSocketFile,
+ TorErrorMissingPassword,
+ TorErrorUnreadableCookieFile,
+ TorErrorAuthError,
+ TorErrorProtocolError,
+ BundledTorTimeout,
+ BundledTorBroken,
+ TorTooOldEphemeral,
+ TorTooOldStealth,
+ PortNotAvailable,
+ ) as e:
+ message = self.common.gui.get_translated_tor_error(e)
+ self.common.log(
+ "TorConnectionThread", "run", f"caught exception: {message}"
+ )
+ self.error_connecting_to_tor.emit(message)
def _tor_status_update(self, progress, summary):
self.tor_status_update.emit(progress, summary)