mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-11-08 05:23:41 +08:00
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
"""Keeps Jetlink's status polled for the native large screen only while its widget is showing."""
|
|
|
|
from openpilot.starpilot.models.jetlink_status import JetlinkStatusFeed
|
|
from openpilot.starpilot.ui.onroad_customization import JETLINK_WIDGET
|
|
from openpilot.system.ui.lib.application import gui_app
|
|
|
|
|
|
class NativeJetlinkLayer:
|
|
def __init__(self, widget, ui_state):
|
|
self.widget, self.ui = widget, ui_state
|
|
self.feed = JetlinkStatusFeed()
|
|
self.pending = None
|
|
gui_app.add_render_prepare(self.prepare, self.close)
|
|
|
|
@staticmethod
|
|
def placement(state):
|
|
placed = state.customization["layouts"]["large"].get(JETLINK_WIDGET)
|
|
return placed if placed is not None and placed["enabled"] else None
|
|
|
|
def prepare(self):
|
|
# The preceding rendered frame asks for the next poll; hidden pages stop asking.
|
|
state, self.pending = self.pending, None
|
|
self.feed.set_enabled(state is not None and bool(self.ui.started) and self.placement(state) is not None)
|
|
|
|
def render(self, state):
|
|
if self.placement(state) is None:
|
|
self.pending = None
|
|
return
|
|
self.pending = state
|
|
self.widget.status = self.feed.snapshot()
|
|
self.widget.render(state)
|
|
|
|
def close(self):
|
|
gui_app.remove_render_prepare(self.prepare)
|
|
self.pending = None
|
|
self.feed.set_enabled(False)
|
|
self.feed.close()
|