// preset-manager.js - Verwaltung der Radio-Sender window.PresetManager = { presets: [], // Lädt Presets aus LocalStorage oder der JSON-Datei async load(callback) { this.presets = JSON.parse(localStorage.getItem('presets')) || []; if (this.presets.length === 0) { try { const response = await fetch('webradio_presets.json'); if (!response.ok) throw new Error('Datei konnte nicht geladen werden'); this.presets = await response.json(); this.save(); } catch (error) { if (window.UI) window.UI.showAlert("Fehler", 'Fehler beim Laden der Presets: ' + error.message); } } if (callback) callback(this.presets); }, save() { localStorage.setItem('presets', JSON.stringify(this.presets)); }, // --- EXPORT/IMPORT (Gzip/Base64) --- async generateExportCode() { try { if (!this.presets || this.presets.length === 0) return; const compactData = this.presets.map(p => [p.name, p.url]); const jsonString = JSON.stringify(compactData); const stream = new Blob([jsonString]).stream(); const compressedStream = stream.pipeThrough(new CompressionStream('gzip')); const response = new Response(compressedStream); const buffer = await response.arrayBuffer(); const base64String = btoa(String.fromCharCode(...new Uint8Array(buffer))); const exportField = document.getElementById('export-string-field'); if (exportField) exportField.value = base64String; } catch (e) { console.error("Export-Fehler:", e); } }, async importFromString(code) { try { const binary = atob(code); const bytes = Uint8Array.from(binary, c => c.charCodeAt(0)); const stream = new Blob([bytes]).stream(); const decompressedStream = stream.pipeThrough(new DecompressionStream('gzip')); const response = new Response(decompressedStream); const resultText = await response.text(); const importedArray = JSON.parse(resultText); this.presets = importedArray.map(item => ({ name: item[0], url: item[1] })); this.save(); location.reload(); } catch (e) { console.error("Import-Fehler:", e); if (window.UI) window.UI.showAlert("Fehler", "Code ungültig oder beschädigt!"); } }, exportToFile() { const presetsJSON = JSON.stringify(this.presets, null, 2); const blob = new Blob([presetsJSON], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'radio_presets.json'; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); } };