mirror of
https://github.com/schlagmichdoch/PairDrop.git
synced 2025-04-26 17:56:16 -04:00
Tidy up zipper functions
This commit is contained in:
parent
65936a4d7d
commit
1df8fe258e
2 changed files with 56 additions and 61 deletions
|
@ -1231,23 +1231,31 @@ class ReceiveFileDialog extends ReceiveDialog {
|
|||
}
|
||||
|
||||
async _processDataAsZip() {
|
||||
let zipFileUrl, zipFileName;
|
||||
let zipObjectUrl = "";
|
||||
let zipName = "";
|
||||
let sendAsZip = false;
|
||||
|
||||
const tooBigToZip = window.iOS && this._data.totalSize > 256000000;
|
||||
if (this._data.files.length > 1 && !tooBigToZip) {
|
||||
zipFileUrl = await this._createZipFile(this._data.files, zipProgress => {
|
||||
Events.fire('set-progress', {
|
||||
peerId: this._data.peerId,
|
||||
progress: zipProgress / this._data.totalSize,
|
||||
status: 'process'
|
||||
})
|
||||
});
|
||||
zipFileName = this._createZipFilename()
|
||||
|
||||
sendAsZip = !!zipFileUrl;
|
||||
if (this._data.files.length > 1 && !tooBigToZip) {
|
||||
Events.fire('set-progress', {
|
||||
peerId: this._data.peerId,
|
||||
progress: 0,
|
||||
status: 'process'
|
||||
});
|
||||
|
||||
zipObjectUrl = await zipper.getObjectUrlOfZipFile(this._data.files,zipProgress => {
|
||||
Events.fire('set-progress', {
|
||||
peerId: this._data.peerId,
|
||||
progress: zipProgress / this._data.totalSize,
|
||||
status: 'process'
|
||||
});
|
||||
});
|
||||
zipName = this._createZipFilename();
|
||||
|
||||
sendAsZip = !!zipObjectUrl;
|
||||
}
|
||||
return {sendAsZip, zipFileUrl, zipFileName};
|
||||
return {sendAsZip, zipObjectUrl, zipName};
|
||||
}
|
||||
|
||||
_setDownloadButtonToZip(zipFileUrl, zipFileName) {
|
||||
|
@ -1318,27 +1326,6 @@ class ReceiveFileDialog extends ReceiveDialog {
|
|||
}
|
||||
}
|
||||
|
||||
async _createZipFile(files, onProgressCallback) {
|
||||
try {
|
||||
let bytesCompleted = 0;
|
||||
|
||||
zipper.createNewZipWriter();
|
||||
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
await zipper.addFile(files[i], {
|
||||
onprogress: (progress) => onProgressCallback(bytesCompleted + progress)
|
||||
});
|
||||
bytesCompleted += files[i].size;
|
||||
}
|
||||
|
||||
return await zipper.getBlobURL();
|
||||
}
|
||||
catch (e) {
|
||||
Logger.error(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
_createZipFilename() {
|
||||
let now = new Date(Date.now());
|
||||
let year = now.getFullYear().toString();
|
||||
|
@ -1373,11 +1360,11 @@ class ReceiveFileDialog extends ReceiveDialog {
|
|||
this.$downloadBtn.removeAttribute('disabled');
|
||||
this.$downloadBtn.removeAttribute('hidden');
|
||||
|
||||
let {sendAsZip, zipFileUrl, zipFileName} = await this._processDataAsZip();
|
||||
let {sendAsZip, zipObjectUrl, zipName} = await this._processDataAsZip();
|
||||
|
||||
// If single file or zipping failed -> download files individually -> else download zip
|
||||
if (sendAsZip) {
|
||||
this._setDownloadButtonToZip(zipFileUrl, zipFileName);
|
||||
this._setDownloadButtonToZip(zipObjectUrl, zipName);
|
||||
} else {
|
||||
this._setDownloadButtonToFiles(this._data.files);
|
||||
}
|
||||
|
|
|
@ -82,39 +82,47 @@ const audioPlayer = (() => {
|
|||
|
||||
const zipper = (() => {
|
||||
|
||||
let zipWriter;
|
||||
return {
|
||||
createNewZipWriter() {
|
||||
zipWriter = new zip.ZipWriter(new zip.BlobWriter("application/zip"), { bufferedWrite: true, level: 0 });
|
||||
},
|
||||
addFile(file, options) {
|
||||
return zipWriter.add(file.name, new zip.BlobReader(file), options);
|
||||
},
|
||||
async getBlobURL() {
|
||||
if (zipWriter) {
|
||||
const blobURL = URL.createObjectURL(await zipWriter.close());
|
||||
zipWriter = null;
|
||||
return blobURL;
|
||||
async getObjectUrlOfZipFile(files, onZipProgressCallback){
|
||||
try {
|
||||
const zipWriter = new zip.ZipWriter(new zip.BlobWriter("application/zip"));
|
||||
|
||||
let bytesProcessed = 0;
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
await zipWriter.add(
|
||||
files[i].name,
|
||||
new zip.BlobReader(files[i]),
|
||||
{
|
||||
onprogress: (progress) => onZipProgressCallback(bytesProcessed + progress)
|
||||
}
|
||||
);
|
||||
bytesProcessed += files[i].size;
|
||||
}
|
||||
|
||||
return URL.createObjectURL(await zipWriter.close());
|
||||
}
|
||||
else {
|
||||
throw new Error("Zip file closed");
|
||||
}
|
||||
},
|
||||
async getZipFile(filename = "archive.zip") {
|
||||
if (zipWriter) {
|
||||
const file = new File([await zipWriter.close()], filename, {type: "application/zip"});
|
||||
zipWriter = null;
|
||||
return file;
|
||||
}
|
||||
else {
|
||||
throw new Error("Zip file closed");
|
||||
catch (e) {
|
||||
Logger.error(e);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
async getEntries(file, options) {
|
||||
return await (new zip.ZipReader(new zip.BlobReader(file))).getEntries(options);
|
||||
try {
|
||||
return await (new zip.ZipReader(new zip.BlobReader(file))).getEntries(options);
|
||||
}
|
||||
catch (e) {
|
||||
Logger.error(e);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
async getData(entry, options) {
|
||||
return await entry.getData(new zip.BlobWriter(), options);
|
||||
try {
|
||||
return await entry.getData(new zip.BlobWriter(), options);
|
||||
}
|
||||
catch (e) {
|
||||
Logger.error(e);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue