Delete preset-manager.js
This commit is contained in:
parent
a34754a95b
commit
e2369bf6bf
1 changed files with 0 additions and 97 deletions
|
|
@ -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);
|
||||
}
|
||||
};
|
||||
Loading…
Reference in a new issue