add ability to download a full backup

This commit is contained in:
thelamer 2022-01-07 20:27:07 -08:00
parent e923fb4b36
commit 2285047e4e
3 changed files with 51 additions and 0 deletions

View File

@ -4,9 +4,13 @@
<link rel="stylesheet" href="css/filebrowser.css">
<script type="text/javascript" src="js/vendor/jquery.min.js"></script>
<script type="text/javascript" src="js/vendor/browserfs.min.js"></script>
<script type="text/javascript" src="js/vendor/jszip.min.js"></script>
<script type="text/javascript" src="js/filebrowser.js"></script>
</head>
<body>
<span id="buttons">
<button onclick="downloadBackup()">DL Full Backup</button>
</span>
<div id="filebrowser"></div>
</body>
</html>

View File

@ -51,6 +51,40 @@ async function downloadFile(file) {
$("body").remove(a);
}
// Download a full backup of all files
async function downloadBackup() {
var zip = new JSZip();
let items = await fs.readdirSync('/');
async function addToZip(item) {
if (fs.lstatSync(item).isDirectory()) {
let items = await fs.readdirSync(item);
if (items.length > 0) {
for await (let subPath of items) {
await addToZip(item + '/' + subPath);
}
}
} else {
let data = fs.readFileSync(item);
let zipPath = item.replace(/^\//,'');
zip.file(zipPath, data);
}
return ''
}
for await (let item of items) {
await addToZip(item);
}
zip.generateAsync({type:"blob"}).then(function callback(blob) {
let url = window.URL || window.webkitURL;
link = url.createObjectURL(blob);
let a = $("<a />");
a.attr("download", 'emulatorjs.zip');
a.attr("href", link);
$("body").append(a);
a[0].click();
$("body").remove(a);
});
}
// Create IndexDB filestore
async function setupFileSystem() {
var imfs = new BrowserFS.FileSystem.InMemory();

13
frontend/js/vendor/jszip.min.js vendored Normal file

File diff suppressed because one or more lines are too long