hydraveil-gui/gui/v2/workers/ticketing_worker_thread.py
2026-06-13 16:19:11 -04:00

83 lines
3.5 KiB
Python
Executable file

from PyQt6.QtCore import QThread, pyqtSignal
from core.controllers.tickets.TicketSyncController import sync_ticket_prices
from core.controllers.tickets.TicketPayController import initiate_payment, check_if_paid
from core.controllers.tickets.TicketPrepController import prepare_tickets
from core.controllers.tickets.FailedVerificationController import (
evaluate_if_its_the_key,
prepare_tickets_with_saved_blind_sigs,
)
from core.controllers.tickets.UseTicketController import use_ticket
from gui.v2.infrastructure.setup_observers import (
connection_observer,
ticket_observer,
)
class TicketingWorkerThread(QThread):
sync_done = pyqtSignal(object)
invoice_ready = pyqtSignal(object)
paid = pyqtSignal()
not_paid = pyqtSignal()
paid_check_failed = pyqtSignal(str)
prep_done = pyqtSignal(object)
use_done = pyqtSignal(object)
failed_verification_evaluated = pyqtSignal(object)
saved_blind_prep_done = pyqtSignal(object)
error = pyqtSignal(str)
def __init__(self, action, params=None):
super().__init__()
self.action = action
self.params = params or {}
def run(self):
try:
if self.action == 'SYNC_PRICES':
result = sync_ticket_prices(ticket_observer, connection_observer)
self.sync_done.emit(result)
elif self.action == 'INITIATE_PAYMENT':
result = initiate_payment(
self.params['how_many_profiles'],
self.params['which_key'],
self.params['which_cryptocurrency'],
ticket_observer,
connection_observer,
self.params.get('bypass_existing', False),
)
self.invoice_ready.emit(result)
elif self.action == 'CHECK_PAID':
result = check_if_paid(self.params['temp_billing_code'], ticket_observer, connection_observer)
if isinstance(result, dict) and result.get('valid') and result.get('payment_status') == 'paid':
self.paid.emit()
elif isinstance(result, dict) and result.get('valid'):
self.not_paid.emit()
else:
err = 'unknown'
if isinstance(result, dict):
err = str(result.get('error_code') or result.get('message') or 'unknown')
self.paid_check_failed.emit(err)
elif self.action == 'PREPARE_TICKETS':
result = prepare_tickets(self.params['how_many_profiles'], ticket_observer, connection_observer)
self.prep_done.emit(result)
elif self.action == 'EVALUATE_FAILED_VERIFICATION':
result = evaluate_if_its_the_key(
self.params['failed_validations'],
ticket_observer,
connection_observer,
)
self.failed_verification_evaluated.emit(result)
elif self.action == 'PREPARE_SAVED_BLIND_SIGS':
result = prepare_tickets_with_saved_blind_sigs(ticket_observer, connection_observer)
self.saved_blind_prep_done.emit(result)
elif self.action == 'USE_TICKET':
result = use_ticket(
self.params['which_ticket'],
self.params['which_location'],
ticket_observer,
connection_observer,
)
self.use_done.emit(result)
except Exception as e:
self.error.emit(str(e))