1
0
Fork 0
mirror of https://github.com/codedread/bitjs synced 2025-10-03 09:39:16 +02:00
bitjs/tests/zipper-test.js

64 lines
1.8 KiB
JavaScript

import { Zipper } from '../archive/compress.js';
const result = document.querySelector('#result');
const fileInputEl = document.querySelector('#zip-tester');
const saveButtonEl = document.querySelector('#save');
let byteArray = null;
/**
* @typedef FileInfo An object that is sent to this worker to represent a file.
* @property {string} fileName The name of this file. TODO: Includes the path?
* @property {number} lastModTime The number of ms since the Unix epoch (1970-01-01 at midnight).
* @property {Uint8Array} fileData The bytes of the file.
*/
/**
* @returns {Promise<}
*/
async function getFiles(fileChangeEvt) {
result.innerHTML = `Starting to load files`;
const files = fileChangeEvt.target.files;
const fileInfos = [];
for (const file of files) {
fileInfos.push(await new Promise((resolve, reject) => {
const fr = new FileReader();
fr.onload = () => {
resolve({
fileName: file.name,
lastModTime: file.lastModified,
fileData: new Uint8Array(fr.result),
});
};
fr.readAsArrayBuffer(file);
}));
}
result.innerHTML = `Loaded files`;
const zipper = new Zipper({ pathToBitJS: '../' });
byteArray = await zipper.start(fileInfos, true);
result.innerHTML = `Zipping done`;
saveButtonEl.style.display = '';
}
async function saveFile(evt) {
/** @type {FileSystemFileHandle} */
const fileHandle = await window['showSaveFilePicker']({
types: [
{
accept: {
'application/zip': ['.zip', '.cbz'],
},
},
],
});
/** @type {FileSystemWritableFileStream} */
const writableStream = await fileHandle.createWritable();
writableStream.write(byteArray);
writableStream.close();
}
fileInputEl.addEventListener('change', getFiles, false);
saveButtonEl.addEventListener('click', saveFile, false);