Radioplayer-with-Presets/preset-manager.js
simonpipe 6c1b185fc6 Upload files to "/"
Neu aufgeteilter Code
2025-12-18 17:17:16 +01:00

76 lines
No EOL
2.9 KiB
JavaScript

// 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);
}
};