granularity info and minor fixes

This commit is contained in:
Maxim Devaev 2024-11-02 18:06:45 +02:00
parent d4fb640418
commit 0fd1174bc5
8 changed files with 84 additions and 12 deletions

View File

@ -65,6 +65,15 @@ class InfoManager:
])
async def poll_state(self) -> AsyncGenerator[dict, None]:
# ==== Granularity table ====
# - system -- Partial
# - auth -- Partial
# - meta -- Partial, nullable
# - extras -- Partial, nullable
# - hw -- Partial
# - fan -- Partial
# ===========================
while True:
(field, value) = await self.__queue.get()
yield {field: value}

View File

@ -129,6 +129,11 @@ class Ocr:
self.__notifier.notify()
async def poll_state(self) -> AsyncGenerator[dict, None]:
# ===== Granularity table =====
# - enabled -- Full
# - langs -- Partial
# =============================
while True:
await self.__notifier.wait()
yield (await self.get_state())

View File

@ -287,6 +287,14 @@ class Streamer: # pylint: disable=too-many-instance-attributes
self.__notifier.notify(self.__ST_FULL)
async def poll_state(self) -> AsyncGenerator[dict, None]:
# ==== Granularity table ====
# - features -- Full
# - limits -- Partial, paired with params
# - params -- Partial, paired with limits
# - streamer -- Partial, nullable
# - snapshot -- Partial
# ===========================
def signal_handler(*_: Any) -> None:
get_logger(0).info("Got SIGUSR2, checking the stream state ...")
self.__notifier.notify(self.__ST_STREAMER)

View File

@ -271,6 +271,12 @@ class UserGpio:
self.__notifier.notify(1)
async def poll_state(self) -> AsyncGenerator[dict, None]:
# ==== Granularity table ====
# - model -- Full
# - state.inputs -- Partial
# - state.outputs -- Partial
# ===========================
prev: dict = {"inputs": {}, "outputs": {}}
while True: # pylint: disable=too-many-nested-blocks
if (await self.__notifier.wait()) > 0:

View File

@ -52,6 +52,12 @@ class BaseAtx(BasePlugin):
raise NotImplementedError
async def poll_state(self) -> AsyncGenerator[dict, None]:
# ==== Granularity table ====
# - enabled -- Full
# - busy -- Partial
# - leds -- Partial
# ===========================
yield {}
raise NotImplementedError

View File

@ -121,6 +121,18 @@ class BaseMsd(BasePlugin):
raise NotImplementedError()
async def poll_state(self) -> AsyncGenerator[dict, None]:
# ==== Granularity table ====
# - enabled -- Full
# - online -- Partial
# - busy -- Partial
# - drive -- Partial, nullable
# - storage -- Partial, nullable
# - storage.parts -- Partial
# - storage.images -- Partial
# - storage.downloading -- Partial, nullable
# - storage.uploading -- Partial, nullable
# ===========================
if self is not None: # XXX: Vulture and pylint hack
raise NotImplementedError()
yield

View File

@ -32,6 +32,8 @@ export function Atx(__recorder) {
/************************************************************************/
var __state = null;
var __init__ = function() {
$("atx-power-led").title = "Power Led";
$("atx-hdd-led").title = "Disk Activity Led";
@ -46,18 +48,38 @@ export function Atx(__recorder) {
/************************************************************************/
self.setState = function(state) {
let buttons_enabled = false;
if (state) {
tools.feature.setEnabled($("atx-dropdown"), state.enabled);
$("atx-power-led").className = (state.busy ? "led-yellow" : (state.leds.power ? "led-green" : "led-gray"));
$("atx-hdd-led").className = (state.leds.hdd ? "led-red" : "led-gray");
buttons_enabled = !state.busy;
if (!__state) {
__state = {"leds": {}};
}
if (state.enabled !== undefined) {
tools.feature.setEnabled($("atx-dropdown"), state.enabled);
__state.enabled = state.enabled;
}
if (__state.enabled !== undefined) {
if (state.busy !== undefined) {
__updateButtons(!state.busy);
__state.busy = state.busy;
}
if (state.leds !== undefined) {
__state.leds = state.leds;
}
if (state.busy !== undefined || state.leds !== undefined) {
let busy = __state.busy;
let leds = __state.leds;
$("atx-power-led").className = (busy ? "led-yellow" : (leds.power ? "led-green" : "led-gray"));
$("atx-hdd-led").className = (leds.hdd ? "led-red" : "led-gray");
}
}
} else {
$("atx-power-led").className = "led-gray";
$("atx-hdd-led").className = "led-gray";
__state = null;
__updateButtons(false);
}
};
var __updateButtons = function(enabled) {
for (let id of ["atx-power-button", "atx-power-button-long", "atx-reset-button"]) {
tools.el.setEnabled($(id), buttons_enabled);
tools.el.setEnabled($(id), enabled);
}
};

View File

@ -32,6 +32,8 @@ export function Ocr(__getGeometry) {
/************************************************************************/
var __enabled = null;
var __start_pos = null;
var __end_pos = null;
var __sel = null;
@ -71,8 +73,10 @@ export function Ocr(__getGeometry) {
/************************************************************************/
self.setState = function(state) {
let enabled = (state && state.enabled && !tools.browser.is_mobile);
if (enabled) {
if (state.enabled !== undefined) {
__enabled = (state.enabled && !tools.browser.is_mobile);
}
if (__enabled) {
let el = $("stream-ocr-lang-selector");
el.options.length = 0;
for (let lang of state.langs.available) {
@ -80,8 +84,8 @@ export function Ocr(__getGeometry) {
}
el.value = tools.storage.get("stream.ocr.lang", state.langs["default"]);
}
tools.feature.setEnabled($("stream-ocr"), enabled);
$("stream-ocr-led").className = (enabled ? "led-gray" : "hidden");
tools.feature.setEnabled($("stream-ocr"), __enabled);
$("stream-ocr-led").className = (__enabled ? "led-gray" : "hidden");
};
var __startSelection = function(event) {