/** * meta-handler.js * Verwaltet das Abrufen und Anzeigen von Stream-Metadaten (Songtitel) */ const MetaHandler = { proxyPath: 'metadata.php', updateInterval: 20000, intervalId: null, proxyActive: false, async init() { try { const response = await fetch(this.proxyPath, { method: 'HEAD' }); this.proxyActive = response.ok; } catch (e) { this.proxyActive = false; } }, async fetchTitle(streamUrl) { if (!this.proxyActive || !streamUrl) return; try { const res = await fetch(`${this.proxyPath}?url=${encodeURIComponent(streamUrl)}`); const data = await res.json(); if (data && data.title) { this.updateUI(data.title); } } catch (e) { console.error("Metadaten-Fehler:", e); } }, updateUI(title) { const stationDisplay = document.getElementById('current-station-name'); if (!stationDisplay) return; // 1. Alles vor dem Titel extrahieren (enthält das Sender-Icon + Name) let currentContent = stationDisplay.innerHTML; // Wir isolieren den Sender-Teil, indem wir alles nach dem Music-Icon oder Trenner-Span abschneiden let stationPart = currentContent.split(' ${title}`; }, start(streamUrl) { this.stop(); // Erster Aufruf sofort this.fetchTitle(streamUrl); this.intervalId = setInterval(() => { this.fetchTitle(streamUrl); }, this.updateInterval); }, stop() { if (this.intervalId) { clearInterval(this.intervalId); this.intervalId = null; } const stationDisplay = document.getElementById('current-station-name'); if (stationDisplay) { // Entfernt alles ab dem Musik-Icon oder dem alten Bindestrich if (stationDisplay.innerHTML.includes('