/**
* 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 Songtitel isolieren
let currentContent = stationDisplay.innerHTML;
// Wir suchen nach dem Icon oder dem geschützten Leerzeichen und schneiden dort ab
let stationPart = currentContent.split(' ')[0].split(' ${title}`;
},
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) {
// Beim Stoppen alles nach dem Sender-Teil entfernen
if (stationDisplay.innerHTML.includes(' ')) {
stationDisplay.innerHTML = stationDisplay.innerHTML.split(' ')[0].trim();
} else if (stationDisplay.innerHTML.includes('