Files

60 lines
1.8 KiB
Python
Raw Permalink Normal View History

import queue
import threading
from PySide6.QtCore import QObject, Signal
class SignalTransferItem:
def __init__(self):
self.result_queue = queue.Queue()
self.wait_event = threading.Event()
def wait(self, timeout: int | None = 10):
return self.wait_event.wait(timeout)
def result(self):
try:
return self.result_queue.get_nowait()
except queue.Empty:
return None
class AskForRequest(SignalTransferItem):
def __init__(self, title, message):
super(AskForRequest, self).__init__()
self.title = title
self.message = message
self.result_queue = queue.Queue(maxsize=1)
self.details = None # Set this if flag use_plain_text is enabled
# flags
self.use_plain_text = True
class SelectPathRequest(AskForRequest):
def __init__(self, title, message, filter_raw=None):
super().__init__(title, message)
self.filter = filter_raw
class WidgetManager(QObject):
def __init__(self):
super(WidgetManager, self).__init__()
self.signal = self.WidgetSignal(self)
self.download_signal = self.DownloadSignal(self)
class DownloadSignal(QObject):
started = Signal(str, str) # task_id, display_name
progress = Signal(str, str, float) # task_id, status, percent
finished = Signal(str) # task_id
failed = Signal(str, str) # task_id, error
removed = Signal(str) # task_id
log = Signal(str)
class WidgetSignal(QObject):
show_error_message = Signal(str)
show_and_print_error_message = Signal(dict)
show_warning_message = Signal(str)
show_info_message = Signal(str)
enable_widget = Signal(object)
disable_widget = Signal(object)
askyesno = Signal(object)
ask_for_path = Signal(object)