fix: support multiple keys per action and harden runtime/parsing

This commit is contained in:
2026-08-14 10:59:25 -06:00
parent 7e3377f932
commit 733bc2b4f9
10 changed files with 180 additions and 87 deletions
+29 -26
View File
@@ -7,36 +7,39 @@ type DataSourceItem = { label: string; value: string };
export function registerDataSources(): void {
streamDeck.ui.onSendToPlugin(async (ev) => {
const request = ev.payload as { event?: string } | undefined;
const event = request?.event;
if (!event) return;
const settings = await ev.action.getSettings<CfgSettings>();
try {
const request = ev.payload as { event?: string } | undefined;
const event = request?.event;
if (!event) return;
const settings = await ev.action.getSettings<CfgSettings>();
if (event === "models") {
let items: DataSourceItem[] = [];
try {
const models = await fetchModels(cfgFromSettings(settings));
items = models.map((m) => ({ label: `${m.id} (${m.status})`, value: m.id }));
} catch {
items = [];
if (event === "models") {
let items: DataSourceItem[] = [];
try {
const models = await fetchModels(cfgFromSettings(settings));
items = models.map((m) => ({ label: `${m.id} (${m.status})`, value: m.id }));
} catch {
items = [];
}
await streamDeck.ui.sendToPropertyInspector({ event, items });
return;
}
await streamDeck.ui.sendToPropertyInspector({ event, items });
return;
}
if (event === "gpus") {
let items: DataSourceItem[] = [];
try {
const text = await fetchMetrics(cfgFromSettings(settings));
const gpus = gpuInfos(parseGpuMetrics(text));
items = [
{ label: "All GPUs", value: "all" },
...gpus.map((g) => ({ label: `GPU ${g.id} · ${g.name}`, value: g.id })),
];
} catch {
items = [{ label: "All GPUs", value: "all" }];
if (event === "gpus") {
let items: DataSourceItem[] = [];
try {
const text = await fetchMetrics(cfgFromSettings(settings));
const gpus = gpuInfos(parseGpuMetrics(text));
items = [
{ label: "All GPUs", value: "all" },
...gpus.map((g) => ({ label: `GPU ${g.id} · ${g.name}`, value: g.id })),
];
} catch {
items = [{ label: "All GPUs", value: "all" }];
}
await streamDeck.ui.sendToPropertyInspector({ event, items });
}
await streamDeck.ui.sendToPropertyInspector({ event, items });
} catch {
}
});
}