Fix Volumio startup and online updates

This commit is contained in:
Mikei386
2026-07-25 12:30:35 +02:00
parent 22444ff5bd
commit 00fb59f643
8 changed files with 264 additions and 22 deletions
+38 -9
View File
@@ -1,16 +1,45 @@
// Aktiviert den bestehenden Tab mit Ziel-URL (ohne Reload). Falls nicht offen, wird er geöffnet.
const ANALYZER_URL = 'http://localhost:8088/';
const VOLUMIO_URL = 'http://localhost:3000/';
function matchingTabs(tabs, url) {
return tabs.filter(tab => tab.url && tab.url.startsWith(url));
}
// Keep one Analyzer and one Volumio tab. Chromium starts on Analyzer, so
// Volumio can load in the background without delaying the first visible UI.
function ensureDualTabs() {
chrome.tabs.query({ currentWindow: true }, tabs => {
const analyzerTabs = matchingTabs(tabs, ANALYZER_URL);
const volumioTabs = matchingTabs(tabs, VOLUMIO_URL);
const duplicates = [...analyzerTabs.slice(1), ...volumioTabs.slice(1)]
.map(tab => tab.id)
.filter(id => Number.isInteger(id));
if (duplicates.length > 0) chrome.tabs.remove(duplicates);
if (analyzerTabs.length === 0) chrome.tabs.create({ url: ANALYZER_URL, active: true });
if (volumioTabs.length === 0) chrome.tabs.create({ url: VOLUMIO_URL, active: false });
});
}
// Activate an existing application tab without reloading it.
function activateOrCreate(url) {
chrome.tabs.query({}, tabs => {
const t = tabs.find(tt => tt.url && tt.url.startsWith(url));
if (t) { chrome.tabs.update(t.id, {active: true}); }
else { chrome.tabs.create({url}); }
chrome.tabs.query({ currentWindow: true }, tabs => {
const tab = matchingTabs(tabs, url)[0];
if (tab) chrome.tabs.update(tab.id, { active: true });
else chrome.tabs.create({ url, active: true });
});
}
chrome.runtime.onMessage.addListener((msg, _sender, sendResponse) => {
if (msg && msg.cmd === 'toggle') {
if (msg.from === 'volumio') activateOrCreate('http://localhost:8088/');
else activateOrCreate('http://localhost:3000/');
sendResponse({ok:true});
if (!msg) return;
if (msg.cmd === 'bootstrap') {
ensureDualTabs();
sendResponse({ ok: true });
return;
}
if (msg.cmd === 'toggle') {
if (msg.from === 'volumio') activateOrCreate(ANALYZER_URL);
else activateOrCreate(VOLUMIO_URL);
sendResponse({ ok: true });
}
});