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
76
index.js
76
index.js
|
|
@ -294,27 +294,32 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Export nach Base64-Code
|
// Export String mit Kompression (Gzip)
|
||||||
window.copyExportCode = function() {
|
window.generateExportCode = async function() {
|
||||||
const field = document.getElementById('export-string-field');
|
|
||||||
field.select();
|
|
||||||
field.setSelectionRange(0, 99999);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (navigator.clipboard) {
|
if (!presets || presets.length === 0) return;
|
||||||
navigator.clipboard.writeText(field.value)
|
|
||||||
.catch(err => {
|
// 1. Struktur-Diät: Nur Werte speichern [["Name","URL"],["Name","URL"]]
|
||||||
console.error("Kopieren mit Clipboard-API fehlgeschlagen:", err);
|
const compactData = presets.map(p => [p.name, p.url]);
|
||||||
document.execCommand('copy');
|
const jsonString = JSON.stringify(compactData);
|
||||||
});
|
|
||||||
} else {
|
// 2. Kompression mittels Gzip
|
||||||
document.execCommand('copy');
|
const stream = new Blob([jsonString]).stream();
|
||||||
}
|
const compressedStream = stream.pipeThrough(new CompressionStream('gzip'));
|
||||||
} catch (err) {
|
const response = new Response(compressedStream);
|
||||||
console.error("Kopieren fehlgeschlagen:", err);
|
const buffer = await response.arrayBuffer();
|
||||||
showAlert("Fehler", "Kopieren fehlgeschlagen. Bitte manuell kopieren: " + field.value);
|
|
||||||
|
// 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
|
// Export nach JSON-Datei
|
||||||
window.exportPreset = function() {
|
window.exportPreset = function() {
|
||||||
|
|
@ -330,24 +335,41 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Import aus Base64-Code mit Warnung
|
// Import String mit Dekomprimierung
|
||||||
window.importFromString = function() {
|
window.importFromString = function() {
|
||||||
const field = document.getElementById('import-string-field');
|
const field = document.getElementById('import-string-field');
|
||||||
const code = field.value.trim();
|
const code = field.value.trim();
|
||||||
if (!code) return showAlert("Fehler", "Bitte Code einfügen.");
|
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;
|
if (!confirmed) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const data = JSON.parse(decodeURIComponent(escape(atob(code))));
|
// 1. Base64 zurück in Bytes
|
||||||
if (Array.isArray(data)) {
|
const binary = atob(code);
|
||||||
presets = data;
|
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();
|
savePresets();
|
||||||
location.reload();
|
location.reload();
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} 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