/** * meta-handler.js * Verwaltet das Abrufen und Anzeigen von Stream-Metadaten (Songtitel) */ const MetaHandler = { proxyPath: 'php/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 Songtitel isolieren let currentContent = stationDisplay.innerHTML; let stationPart = currentContent.split(' ')[0].split(' ${title}`; } // --- LAUFSCHRIFT-ÜBERPRÜFUNG --- setTimeout(() => this.checkMarqueeOverflow(), 50); }, checkMarqueeOverflow() { const senderContainer = document.getElementById('aktueller-sender'); const textElement = document.getElementById('current-station-name'); if (textElement && senderContainer) { textElement.classList.remove('marquee-active'); // Wir messen die verfügbare Breite im Container abzüglich des Paddings const availableWidth = senderContainer.clientWidth - 20; // 20px Abzug für das seitliche Padding (15px links/rechts) // Wenn der Text breiter ist als der verfügbare Platz innen if (textElement.scrollWidth > availableWidth) { textElement.classList.add('marquee-active'); } } }, start(streamUrl) { this.stop(); 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) { stationDisplay.classList.remove('marquee-active'); // Hinweis: Der Inhalt wird beim Stoppen meist durch die main.js auf "Wähle einen Sender" zurückgesetzt } } }; window.MetaHandler = MetaHandler; MetaHandler.init();