Update index.js
Verbesserter String für export und import
This commit is contained in:
parent
d4ce358e1b
commit
c77103a391
1 changed files with 49 additions and 27 deletions
72
index.js
72
index.js
|
|
@ -294,27 +294,32 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||
}
|
||||
}
|
||||
|
||||
// Export nach Base64-Code
|
||||
window.copyExportCode = function() {
|
||||
const field = document.getElementById('export-string-field');
|
||||
field.select();
|
||||
field.setSelectionRange(0, 99999);
|
||||
|
||||
// Export String mit Kompression (Gzip)
|
||||
window.generateExportCode = async function() {
|
||||
try {
|
||||
if (navigator.clipboard) {
|
||||
navigator.clipboard.writeText(field.value)
|
||||
.catch(err => {
|
||||
console.error("Kopieren mit Clipboard-API fehlgeschlagen:", err);
|
||||
document.execCommand('copy');
|
||||
});
|
||||
} else {
|
||||
document.execCommand('copy');
|
||||
}
|
||||
} catch (err) {
|
||||
console.error("Kopieren fehlgeschlagen:", err);
|
||||
showAlert("Fehler", "Kopieren fehlgeschlagen. Bitte manuell kopieren: " + field.value);
|
||||
if (!presets || presets.length === 0) return;
|
||||
|
||||
// 1. Struktur-Diät: Nur Werte speichern [["Name","URL"],["Name","URL"]]
|
||||
const compactData = presets.map(p => [p.name, p.url]);
|
||||
const jsonString = JSON.stringify(compactData);
|
||||
|
||||
// 2. Kompression mittels Gzip
|
||||
const stream = new Blob([jsonString]).stream();
|
||||
const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));
|
||||
const response = new Response(compressedStream);
|
||||
const buffer = await response.arrayBuffer();
|
||||
|
||||
// 3. In Base64 umwandeln
|
||||
const base64String = btoa(String.fromCharCode(...new Uint8Array(buffer)));
|
||||
|
||||
const exportField = document.getElementById('export-string-field');
|
||||
if (exportField) exportField.value = base64String;
|
||||
|
||||
console.log("Kompression erfolgreich. Länge:", base64String.length);
|
||||
} catch (e) {
|
||||
console.error("Export-Fehler:", e);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
// Export nach JSON-Datei
|
||||
window.exportPreset = function() {
|
||||
|
|
@ -330,24 +335,41 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||
URL.revokeObjectURL(url);
|
||||
};
|
||||
|
||||
// Import aus Base64-Code mit Warnung
|
||||
// Import String mit Dekomprimierung
|
||||
window.importFromString = function() {
|
||||
const field = document.getElementById('import-string-field');
|
||||
const code = field.value.trim();
|
||||
if (!code) return showAlert("Fehler", "Bitte Code einfügen.");
|
||||
|
||||
showConfirm("Vorsicht", "Es werden alle bestehenden Sender überschrieben. Möchtest du fortfahren?", function(confirmed) {
|
||||
showConfirm("Vorsicht", "Es werden alle bestehenden Sender überschrieben. Möchtest du fortfahren?", async function(confirmed) {
|
||||
if (!confirmed) return;
|
||||
|
||||
try {
|
||||
const data = JSON.parse(decodeURIComponent(escape(atob(code))));
|
||||
if (Array.isArray(data)) {
|
||||
presets = data;
|
||||
// 1. Base64 zurück in Bytes
|
||||
const binary = atob(code);
|
||||
const bytes = Uint8Array.from(binary, c => c.charCodeAt(0));
|
||||
|
||||
// 2. Dekomprimieren (Gzip)
|
||||
const stream = new Blob([bytes]).stream();
|
||||
const decompressedStream = stream.pipeThrough(new DecompressionStream('gzip'));
|
||||
const response = new Response(decompressedStream);
|
||||
const resultText = await response.text();
|
||||
|
||||
// 3. Struktur wiederherstellen (Array zu Objekten)
|
||||
const importedArray = JSON.parse(resultText);
|
||||
const restoredPresets = importedArray.map(item => ({
|
||||
name: item[0],
|
||||
url: item[1]
|
||||
}));
|
||||
|
||||
if (Array.isArray(restoredPresets)) {
|
||||
presets = restoredPresets;
|
||||
savePresets();
|
||||
location.reload();
|
||||
}
|
||||
} catch (e) {
|
||||
showAlert("Fehler", "Code ungültig!");
|
||||
console.error("Import-Fehler:", e);
|
||||
showAlert("Fehler", "Code ungültig oder beschädigt!");
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue