diff --git a/system/ui/lib/wrapper.py b/system/ui/lib/wrapper.py index 4c4e86c7e2..5ec9316ce0 100644 --- a/system/ui/lib/wrapper.py +++ b/system/ui/lib/wrapper.py @@ -1,29 +1,29 @@ import threading import time -from typing import Generic, TypeVar +from typing import Any from openpilot.system.ui.lib.application import gui_app -class Renderer: - def render(self): ... +class Wrapper: + _renderer: Any -T = TypeVar("T", bound=Renderer) - -class Wrapper(Generic[T]): - def __init__(self, title: str, renderer_cls: type[T], *args): + def __init__(self, title: str, renderer_cls, *renderer_args): self._title = title - self._renderer_class = renderer_cls - self._renderer_args = args - self._renderer: T | None = None + self._renderer_cls = renderer_cls + self._renderer_args = renderer_args self._stop_event = threading.Event() - self._thread = threading.Thread(target=self._run, args=(self._stop_event,), daemon=True) + self._thread = threading.Thread(target=self._run, daemon=True) self._thread.start() - def _run(self, stop_event: threading.Event): + # wait for renderer to be initialized + while self._renderer is None and self._thread is not None and self._thread.is_alive(): + time.sleep(0.01) + + def _run(self): gui_app.init_window(self._title) - self._renderer = self._renderer_class(*self._renderer_args) + self._renderer = self._renderer_cls(*self._renderer_args) try: for _ in gui_app.render(): - if stop_event.is_set(): + if self._stop_event.is_set(): break self._renderer.render() finally: @@ -32,11 +32,6 @@ class Wrapper(Generic[T]): def __enter__(self): return self - def wait(self): - """wait for renderer to be initialized""" - while self._renderer is None and self._thread is not None and self._thread.is_alive(): - time.sleep(0.01) - def close(self): if self._thread is not None and self._thread.is_alive(): self._stop_event.set() diff --git a/system/ui/spinner.py b/system/ui/spinner.py index 50c95684a7..44afbf5857 100755 --- a/system/ui/spinner.py +++ b/system/ui/spinner.py @@ -73,9 +73,7 @@ class Spinner(Wrapper): super().__init__("Spinner", Renderer) def update(self, spinner_text: str): - self.wait() - if self._renderer: - self._renderer.set_text(spinner_text) + self._renderer.set_text(spinner_text) def update_progress(self, cur: float, total: float): self.update(str(round(100 * cur / total)))