From 56b2836ecf37f048aab7ed0c64f9086c24e79855 Mon Sep 17 00:00:00 2001 From: SimplifiedPrivacy Date: Thu, 13 Aug 2026 08:22:25 -0400 Subject: [PATCH] Improved Connection Observer support for Tor bootstrap feedback, and error handling of the sudo setup --- cli/sudo_setup.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/cli/sudo_setup.py b/cli/sudo_setup.py index 2f73170..0c5a749 100644 --- a/cli/sudo_setup.py +++ b/cli/sudo_setup.py @@ -2,6 +2,7 @@ from core.services.helpers.setup_sudo_scripts import auto_install_sudo_script, t from core.services.helpers.install_dependencies import setup_singbox_binary from core.services.helpers.manage_assets import sudo_assets_folder_setup from core.observers.ApplicationVersionObserver import ApplicationVersionObserver +from core.observers.ConnectionObserver import ConnectionObserver from core.models.Result import Result, ResultError import sys @@ -73,24 +74,38 @@ b) Get an automated installer. print("Now we are now setting up the singbox binary, also in a sudo folder.") - # OBSERVER + # OBSERVERS application_version_observer = ApplicationVersionObserver() + connection_observer = ConnectionObserver() application_version_observer.subscribe('downloading', lambda event: update_status( f'{event.subject if event.subject else "Downloading.."}')) application_version_observer.subscribe('download_progressing', lambda event: update_status( f'{event.subject if event.subject else "Downloading.."}')) application_version_observer.subscribe('downloaded', lambda event: update_status( f'{event.subject if event.subject else "Downloaded"}')) + connection_observer.subscribe('connecting', lambda event: update_status( + f'[{event.subject.get("attempt_count")}/{event.subject.get("maximum_number_of_attempts")}] Performing connection attempt...')) + connection_observer.subscribe('tor_bootstrapping', lambda event: update_status( + 'Establishing Tor connection...')) + connection_observer.subscribe( + 'tor_bootstrap_progressing', lambda event: update_status(f'{event.subject if event.subject else "Tor Bootstrapping.."}')) + connection_observer.subscribe( + 'message', lambda event: update_status(f'{event.subject if event.subject else "Connecting.."}')) + connection_observer.subscribe( + 'tor_bootstrapped', lambda event: update_status('Tor connection established.')) # Actual Binary Setup: try: - setup_result = setup_singbox_binary(application_version_observer) + setup_result = setup_singbox_binary(application_version_observer, connection_observer) except ConnectionError as e: print(f"{connection_error}: {str(e)}") + sys.exit() except ValueError as e: print(f"Your configuration files may be corrupted, or a server-side error giving bad data: {str(e)}") + sys.exit() except Exception as e: print(f"Unknown error: {str(e)}") + sys.exit() # Error handling: if not setup_result.valid: