platform: modularize api/gui, add docs-tests-web foundation, and refresh root config
This commit is contained in:
63
selective-vpn-gui/main_window/workers.py
Normal file
63
selective-vpn-gui/main_window/workers.py
Normal file
@@ -0,0 +1,63 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import time
|
||||
|
||||
from PySide6 import QtCore
|
||||
|
||||
from dashboard_controller import DashboardController
|
||||
|
||||
|
||||
class EventThread(QtCore.QThread):
|
||||
eventReceived = QtCore.Signal(object)
|
||||
error = QtCore.Signal(str)
|
||||
|
||||
def __init__(self, controller: DashboardController, parent=None) -> None:
|
||||
super().__init__(parent)
|
||||
self.ctrl = controller
|
||||
self._stop = False
|
||||
self._since = 0
|
||||
|
||||
def stop(self) -> None:
|
||||
self._stop = True
|
||||
|
||||
def run(self) -> None: # pragma: no cover - thread
|
||||
while not self._stop:
|
||||
try:
|
||||
for ev in self.ctrl.iter_events(since=self._since, stop=lambda: self._stop):
|
||||
if self._stop:
|
||||
break
|
||||
try:
|
||||
self._since = int(getattr(ev, "id", self._since))
|
||||
except Exception:
|
||||
pass
|
||||
self.eventReceived.emit(ev)
|
||||
time.sleep(0.5)
|
||||
except Exception as e:
|
||||
self.error.emit(str(e))
|
||||
time.sleep(1.5)
|
||||
|
||||
|
||||
class LocationsThread(QtCore.QThread):
|
||||
loaded = QtCore.Signal(object)
|
||||
error = QtCore.Signal(str)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
controller: DashboardController,
|
||||
force_refresh: bool = False,
|
||||
parent=None,
|
||||
) -> None:
|
||||
super().__init__(parent)
|
||||
self.ctrl = controller
|
||||
self.force_refresh = bool(force_refresh)
|
||||
|
||||
def run(self) -> None: # pragma: no cover - thread
|
||||
try:
|
||||
if self.force_refresh:
|
||||
self.ctrl.vpn_locations_refresh_trigger()
|
||||
self.loaded.emit(self.ctrl.vpn_locations_state_view())
|
||||
except Exception as e:
|
||||
self.error.emit(str(e))
|
||||
|
||||
|
||||
__all__ = ["EventThread", "LocationsThread"]
|
||||
Reference in New Issue
Block a user