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 application_version_observer = ApplicationVersionObserver() client_observer = ClientObserver() connection_observer = ConnectionObserver() invoice_observer = InvoiceObserver() profile_observer = ProfileObserver() ticket_observer = TicketObserver() def setup_observers(update_status): profile_observer.subscribe( 'created', lambda event: update_status('Profile Created')) profile_observer.subscribe( 'destroyed', lambda event: update_status('Profile destroyed')) client_observer.subscribe( 'synchronizing', lambda event: update_status('Sync in progress...')) client_observer.subscribe( 'synchronized', lambda event: update_status('Sync complete')) client_observer.subscribe( 'updating', lambda event: update_status('Updating client...')) client_observer.subscribe('update_progressing', lambda event: update_status( f'Current progress: {event.meta.get('progress'):.2f}%')) client_observer.subscribe('updated', lambda event: update_status( 'Restart client to apply update.')) application_version_observer.subscribe('downloading', lambda event: update_status( f'Downloading {ApplicationController.get(event.subject.application_code).name}')) application_version_observer.subscribe('download_progressing', lambda event: update_status( f'Downloading {ApplicationController.get(event.subject.application_code).name} {event.meta.get('progress'):.2f}%')) application_version_observer.subscribe('downloaded', lambda event: update_status( f'Downloaded {ApplicationController.get(event.subject.application_code).name}')) 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'Bootstrapping Tor {event.meta.get('progress'):.2f}%')) connection_observer.subscribe( 'tor_bootstrapped', lambda event: update_status('Tor connection established.')) ticket_observer.subscribe('connecting', lambda event: update_status('Connecting to ticket server...')) ticket_observer.subscribe('sync_done', lambda event: update_status('Ticket prices synced.')) ticket_observer.subscribe('waiting', lambda event: update_status('Waiting for payment...')) ticket_observer.subscribe('paid', lambda event: update_status('Payment received.')) ticket_observer.subscribe('ticket_ready', lambda event: update_status('Ticket ready.')) ticket_observer.subscribe('used', lambda event: update_status('Ticket used.')) ticket_observer.subscribe('connection_error', lambda event: update_status('Ticket server connection error.')) ticket_observer.subscribe('failed_output', lambda event: update_status(f'{event.subject if event.subject else ""}')) ticket_observer.subscribe('failed_input', lambda event: update_status(f'{event.subject if event.subject else ""}')) ticket_observer.subscribe('unknown_error', lambda event: update_status('Unknown ticket error.')) ticket_observer.subscribe('error', lambda event: update_status(f'Ticket error: {event.subject if event.subject else ""}')) return { '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, }