refactor: add typed decoder plugin runtime

This commit is contained in:
sjg
2026-08-01 13:02:54 +02:00
parent 6a83e2e90a
commit 508cf2ba87
23 changed files with 438 additions and 324 deletions
@@ -165,14 +165,14 @@
}
vdesWindow.updateVdesBar = updateVdesBar;
vdesWindow.clearVdesBar = function() {
vdesWindow.resetVdesHistoryView?.();
resetVdesHistoryView();
};
vdesWindow.resetVdesHistoryView = function() {
function resetVdesHistoryView() {
if (vdesMessagesEl) vdesMessagesEl.innerHTML = "";
vdesMessageHistory = [];
updateVdesBar();
renderVdesHistory();
};
}
function renderVdesHistory() {
pruneVdesMessageHistory();
if (!vdesMessagesEl) {
@@ -205,7 +205,7 @@
rig_id: msg.rig_id || null
};
}
vdesWindow.onServerVdesBatch = function(messages) {
function onServerVdesBatch(messages) {
if (!Array.isArray(messages) || messages.length === 0) return;
if (vdesStatus) vdesStatus.textContent = "Receiving";
const normalized = [];
@@ -228,16 +228,13 @@
pruneVdesMessageHistory();
scheduleVdesBarUpdate();
scheduleVdesHistoryRender();
};
vdesWindow.restoreVdesHistory = function(messages) {
vdesWindow.onServerVdesBatch?.(messages);
};
}
document.getElementById("settings-clear-vdes-history")?.addEventListener("click", () => {
void (async () => {
if (!await vdesWindow.trxUi.confirm({ title: "Clear VDES history?", message: "All stored VDES decodes will be permanently removed.", confirmLabel: "Clear history" })) return;
try {
await vdesWindow.postPath?.("/clear_vdes_decode");
vdesWindow.resetVdesHistoryView?.();
resetVdesHistoryView();
} catch (e) {
console.error("VDES history clear failed", e);
}
@@ -249,19 +246,26 @@
renderVdesHistory();
});
}
vdesWindow.onServerVdes = function(msg) {
function onServerVdes(msg) {
if (vdesStatus) vdesStatus.textContent = "Receiving";
const next = normalizeServerVdesMessage(msg);
addVdesMessage(next);
if (next.lat != null && next.lon != null && vdesWindow.vdesMapAddPoint) {
vdesWindow.vdesMapAddPoint(next);
}
};
vdesWindow.pruneVdesHistoryView = function() {
}
function pruneVdesHistoryView() {
pruneVdesMessageHistory();
updateVdesBar();
renderVdesHistory();
};
}
updateVdesSummary();
vdesWindow._trxDrainPendingDecode?.("vdes");
window.trxPluginRuntime.registerDecoder({
id: "vdes",
onMessage: onServerVdes,
onBatch: onServerVdesBatch,
restore: onServerVdesBatch,
reset: resetVdesHistoryView,
prune: pruneVdesHistoryView
});
})();