feat: add desktop ui foundation
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
"""Qt worker objects for non-blocking model generation and approval."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import threading
|
||||
|
||||
from PySide6.QtCore import QObject, Signal, Slot
|
||||
|
||||
from javis.security.privacy import PrivacyDecision
|
||||
from javis.ui.chat_controller import DesktopController
|
||||
|
||||
|
||||
class ApprovalBridge(QObject):
|
||||
approval_requested = Signal(object)
|
||||
notice_received = Signal(str)
|
||||
|
||||
def __init__(self) -> None:
|
||||
super().__init__()
|
||||
self._lock = threading.Lock()
|
||||
self._event: threading.Event | None = None
|
||||
self._result = False
|
||||
|
||||
def request(self, decision: PrivacyDecision) -> bool:
|
||||
event = threading.Event()
|
||||
with self._lock:
|
||||
self._event = event
|
||||
self._result = False
|
||||
self.approval_requested.emit(decision)
|
||||
event.wait()
|
||||
with self._lock:
|
||||
result = self._result
|
||||
self._event = None
|
||||
return result
|
||||
|
||||
def resolve(self, allowed: bool) -> None:
|
||||
with self._lock:
|
||||
self._result = allowed
|
||||
event = self._event
|
||||
if event is not None:
|
||||
event.set()
|
||||
|
||||
def cancel_pending(self) -> None:
|
||||
self.resolve(False)
|
||||
|
||||
|
||||
class StreamWorker(QObject):
|
||||
event_received = Signal(object)
|
||||
completed = Signal()
|
||||
|
||||
def __init__(self, controller: DesktopController, text: str) -> None:
|
||||
super().__init__()
|
||||
self._controller = controller
|
||||
self._text = text
|
||||
self._cancel_event = threading.Event()
|
||||
|
||||
@Slot()
|
||||
def run(self) -> None:
|
||||
try:
|
||||
for event in self._controller.stream_message(
|
||||
self._text,
|
||||
self._cancel_event,
|
||||
):
|
||||
self.event_received.emit(event)
|
||||
finally:
|
||||
self.completed.emit()
|
||||
|
||||
def request_cancel(self) -> None:
|
||||
self._cancel_event.set()
|
||||
Reference in New Issue
Block a user