forked from Support/sp-hydra-veil-gui
97 lines
4.2 KiB
Python
Executable file
97 lines
4.2 KiB
Python
Executable file
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 observer_message(topic, event):
|
|
subject = getattr(event, 'subject', None)
|
|
meta = getattr(event, 'meta', None)
|
|
if subject is not None:
|
|
return str(subject)
|
|
if meta:
|
|
return str(meta)
|
|
return str(topic)
|
|
|
|
|
|
def subscribe_observer_messages(observer, post_status):
|
|
for attr in dir(observer):
|
|
if not attr.startswith('on_'):
|
|
continue
|
|
callbacks = getattr(observer, attr, None)
|
|
if not isinstance(callbacks, list):
|
|
continue
|
|
topic = attr[3:]
|
|
observer.subscribe(
|
|
topic,
|
|
lambda event, topic=topic: post_status(observer_message(topic, event)))
|
|
|
|
|
|
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'))
|
|
|
|
subscribe_observer_messages(client_observer, post_status)
|
|
|
|
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}'))
|
|
|
|
subscribe_observer_messages(connection_observer, post_status)
|
|
|
|
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,
|
|
}
|