Skip to content

Commit 01e2cdd

Browse files
Tidy up zipper functions
1 parent c50f63b commit 01e2cdd

File tree

2 files changed

+48
-59
lines changed

2 files changed

+48
-59
lines changed

public/scripts/ui.js

Lines changed: 15 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,23 +1231,25 @@ class ReceiveFileDialog extends ReceiveDialog {
12311231
}
12321232

12331233
async _processDataAsZip() {
1234-
let zipFileUrl, zipFileName;
1234+
let zipObjectUrl = "";
1235+
let zipName = "";
12351236
let sendAsZip = false;
12361237

12371238
const tooBigToZip = window.iOS && this._data.totalSize > 256000000;
1239+
12381240
if (this._data.files.length > 1 && !tooBigToZip) {
1239-
zipFileUrl = await this._createZipFile(this._data.files, zipProgress => {
1240-
Events.fire('set-progress', {
1241-
peerId: this._data.peerId,
1242-
progress: zipProgress / this._data.totalSize,
1243-
status: 'process'
1244-
})
1245-
});
1246-
zipFileName = this._createZipFilename()
1241+
zipObjectUrl = await zipper.getObjectUrlOfZipFile(this._data.files,zipProgress => {
1242+
Events.fire('set-progress', {
1243+
peerId: this._data.peerId,
1244+
progress: zipProgress / this._data.totalSize,
1245+
status: 'process'
1246+
});
1247+
});
1248+
zipName = this._createZipFilename();
12471249

1248-
sendAsZip = !!zipFileUrl;
1250+
sendAsZip = !!zipObjectUrl;
12491251
}
1250-
return {sendAsZip, zipFileUrl, zipFileName};
1252+
return {sendAsZip, zipObjectUrl, zipName};
12511253
}
12521254

12531255
_setDownloadButtonToZip(zipFileUrl, zipFileName) {
@@ -1318,27 +1320,6 @@ class ReceiveFileDialog extends ReceiveDialog {
13181320
}
13191321
}
13201322

1321-
async _createZipFile(files, onProgressCallback) {
1322-
try {
1323-
let bytesCompleted = 0;
1324-
1325-
zipper.createNewZipWriter();
1326-
1327-
for (let i = 0; i < files.length; i++) {
1328-
await zipper.addFile(files[i], {
1329-
onprogress: (progress) => onProgressCallback(bytesCompleted + progress)
1330-
});
1331-
bytesCompleted += files[i].size;
1332-
}
1333-
1334-
return await zipper.getBlobURL();
1335-
}
1336-
catch (e) {
1337-
Logger.error(e);
1338-
return false;
1339-
}
1340-
}
1341-
13421323
_createZipFilename() {
13431324
let now = new Date(Date.now());
13441325
let year = now.getFullYear().toString();
@@ -1373,11 +1354,11 @@ class ReceiveFileDialog extends ReceiveDialog {
13731354
this.$downloadBtn.removeAttribute('disabled');
13741355
this.$downloadBtn.removeAttribute('hidden');
13751356

1376-
let {sendAsZip, zipFileUrl, zipFileName} = await this._processDataAsZip();
1357+
let {sendAsZip, zipObjectUrl, zipName} = await this._processDataAsZip();
13771358

13781359
// If single file or zipping failed -> download files individually -> else download zip
13791360
if (sendAsZip) {
1380-
this._setDownloadButtonToZip(zipFileUrl, zipFileName);
1361+
this._setDownloadButtonToZip(zipObjectUrl, zipName);
13811362
} else {
13821363
this._setDownloadButtonToFiles(this._data.files);
13831364
}

public/scripts/util.js

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -82,39 +82,47 @@ const audioPlayer = (() => {
8282

8383
const zipper = (() => {
8484

85-
let zipWriter;
8685
return {
87-
createNewZipWriter() {
88-
zipWriter = new zip.ZipWriter(new zip.BlobWriter("application/zip"), { bufferedWrite: true, level: 0 });
89-
},
90-
addFile(file, options) {
91-
return zipWriter.add(file.name, new zip.BlobReader(file), options);
92-
},
93-
async getBlobURL() {
94-
if (zipWriter) {
95-
const blobURL = URL.createObjectURL(await zipWriter.close());
96-
zipWriter = null;
97-
return blobURL;
86+
async getObjectUrlOfZipFile(files, onZipProgressCallback){
87+
try {
88+
const zipWriter = new zip.ZipWriter(new zip.BlobWriter("application/zip"));
89+
90+
let bytesProcessed = 0;
91+
for (let i = 0; i < files.length; i++) {
92+
await zipWriter.add(
93+
files[i].name,
94+
new zip.BlobReader(files[i]),
95+
{
96+
onprogress: (progress) => onZipProgressCallback(bytesProcessed + progress)
97+
}
98+
);
99+
bytesProcessed += files[i].size;
100+
}
101+
102+
return URL.createObjectURL(await zipWriter.close());
98103
}
99-
else {
100-
throw new Error("Zip file closed");
104+
catch (e) {
105+
Logger.error(e);
106+
return false;
101107
}
102108
},
103-
async getZipFile(filename = "archive.zip") {
104-
if (zipWriter) {
105-
const file = new File([await zipWriter.close()], filename, {type: "application/zip"});
106-
zipWriter = null;
107-
return file;
109+
async getEntries(file, options) {
110+
try {
111+
return await (new zip.ZipReader(new zip.BlobReader(file))).getEntries(options);
108112
}
109-
else {
110-
throw new Error("Zip file closed");
113+
catch (e) {
114+
Logger.error(e);
115+
return false;
111116
}
112117
},
113-
async getEntries(file, options) {
114-
return await (new zip.ZipReader(new zip.BlobReader(file))).getEntries(options);
115-
},
116118
async getData(entry, options) {
117-
return await entry.getData(new zip.BlobWriter(), options);
119+
try {
120+
return await entry.getData(new zip.BlobWriter(), options);
121+
}
122+
catch (e) {
123+
Logger.error(e);
124+
return false;
125+
}
118126
},
119127
};
120128

0 commit comments

Comments
 (0)