from core.observers.ApplicationVersionObserver import ApplicationVersionObserver from core.observers.ClientObserver import ClientObserver from core.observers.ConnectionObserver import ConnectionObserver from core.observers.InvoiceObserver import InvoiceObserver from core.observers.ProfileObserver import ProfileObserver from core.observers.TicketObserver import TicketObserver from core.controllers.ApplicationController import ApplicationController from PyQt6.QtCore import QObject, pyqtSignal class StatusRelay(QObject): status_requested = pyqtSignal(object, bool) def __init__(self, update_status): super().__init__() self.update_status = update_status self.status_requested.connect(self.apply_status) def post(self, text, clear=False): self.status_requested.emit(text, clear) def apply_status(self, text, clear=False): self.update_status(text, clear=clear) application_version_observer = ApplicationVersionObserver() client_observer = ClientObserver() connection_observer = ConnectionObserver() invoice_observer = InvoiceObserver() profile_observer = ProfileObserver() ticket_observer = TicketObserver() def setup_observers(update_status): relay = StatusRelay(update_status) post_status = relay.post profile_observer.subscribe( 'created', lambda event: post_status('Profile Created')) profile_observer.subscribe( 'destroyed', lambda event: post_status('Profile destroyed')) # client_observer.subscribe( # 'synchronizing', lambda event: update_status('Sync in progress...')) client_observer.subscribe( 'synchronizing', lambda event: post_status(f'{event.subject if event.subject else "Sync in progress..."}')) client_observer.subscribe( 'synchronized', lambda event: post_status('Sync complete')) client_observer.subscribe( 'updating', lambda event: post_status('Updating client...')) client_observer.subscribe('update_progressing', lambda event: post_status( f'Current progress: {event.meta.get('progress'):.2f}%')) client_observer.subscribe('updated', lambda event: post_status( 'Restart client to apply update.')) client_observer.subscribe( 'custom_message', lambda event: post_status(f'{event.subject if event.subject else "Error, check logs"}')) application_version_observer.subscribe('downloading', lambda event: post_status( f'Downloading {ApplicationController.get(event.subject.application_code).name}')) application_version_observer.subscribe('download_progressing', lambda event: post_status( f'Downloading {ApplicationController.get(event.subject.application_code).name} {event.meta.get('progress'):.2f}%')) application_version_observer.subscribe('downloaded', lambda event: post_status( f'Downloaded {ApplicationController.get(event.subject.application_code).name}')) connection_observer.subscribe('connecting', lambda event: post_status( f'[{event.subject.get("attempt_count")}/{event.subject.get("maximum_number_of_attempts")}] Performing connection attempt...')) connection_observer.subscribe('tor_bootstrapping', lambda event: post_status( 'Establishing Tor connection...')) connection_observer.subscribe( 'tor_bootstrap_progressing', lambda event: post_status(f'{event.subject if event.subject else "Tor Bootstrapping.."}')) # original replaced version: # connection_observer.subscribe('tor_bootstrap_progressing', lambda event: update_status( # f'Bootstrapping Tor {event.meta.get('progress'):.2f}%')) connection_observer.subscribe( 'tor_bootstrapped', lambda event: post_status('Tor connection established.')) client_observer.subscribe( 'custom_message', lambda event: post_status(f'{event.subject if event.subject else ""}')) ticket_observer.subscribe('connecting', lambda event: post_status('Connecting to ticket server...')) ticket_observer.subscribe('sync_done', lambda event: post_status('Ticket prices synced.')) ticket_observer.subscribe('waiting', lambda event: post_status('Waiting for payment...')) ticket_observer.subscribe('paid', lambda event: post_status('Payment received.')) ticket_observer.subscribe('ticket_ready', lambda event: post_status('Ticket ready.')) ticket_observer.subscribe('used', lambda event: post_status('Ticket used.')) ticket_observer.subscribe('connection_error', lambda event: post_status('Ticket server connection error.')) ticket_observer.subscribe('failed_output', lambda event: post_status(f'{event.subject if event.subject else ""}')) ticket_observer.subscribe('failed_input', lambda event: post_status(f'{event.subject if event.subject else ""}')) ticket_observer.subscribe('unknown_error', lambda event: post_status('Unknown ticket error.')) ticket_observer.subscribe('error', lambda event: post_status(f'Ticket error: {event.subject if event.subject else ""}')) return { 'status_relay': relay, 'application_version_observer': application_version_observer, 'client_observer': client_observer, 'connection_observer': connection_observer, 'invoice_observer': invoice_observer, 'profile_observer': profile_observer, 'ticket_observer': ticket_observer, }