diff --git a/preset-manager.js b/preset-manager.js deleted file mode 100644 index 12cf775..0000000 --- a/preset-manager.js +++ /dev/null @@ -1,97 +0,0 @@ -// preset-manager.js - Verwaltung der Radio-Sender -window.PresetManager = { - presets: [], - - // Lädt Presets: URL-Hash hat Vorrang vor LocalStorage - async load(callback) { - // 1. Check: Ist ein Hash in der URL vorhanden? - const hash = window.location.hash.substring(1); - if (hash && hash.length > 30) { - const success = await this.importFromString(hash, false); // false = kein Reload - if (success) { - if (callback) callback(this.presets); - return; - } - } - - // 2. Check: LocalStorage laden - const stored = localStorage.getItem('presets'); - if (stored) { - try { - this.presets = JSON.parse(stored); - } catch (e) { - console.error("Fehler beim Parsen von LocalStorage", e); - this.presets = []; - } - } else { - // 3. Fallback: Leere Liste, wenn gar nichts gefunden wurde - this.presets = []; - } - - if (callback) callback(this.presets); - }, - - save() { - localStorage.setItem('presets', JSON.stringify(this.presets)); - }, - - // Generiert den Code und gibt ihn zurück - async generateExportCode(updateField = true) { - 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))); - - if (updateField) { - const exportField = document.getElementById('export-string-field'); - if (exportField) exportField.value = base64String; - } - return base64String; - } catch (e) { - console.error("Export-Fehler:", e); - return ""; - } - }, - - // Importiert von einem String - async importFromString(code, shouldReload = true) { - 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(); - - if (shouldReload) { - // Seite ohne den langen Hash neu laden für eine saubere URL - location.href = window.location.origin + window.location.pathname; - } - return true; - } catch (e) { - console.error("Import-Fehler:", e); - return false; - } - }, - - 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'; - a.click(); - URL.revokeObjectURL(url); - } -}; \ No newline at end of file