diff --git a/server/core/ZipStreamer.js b/server/core/ZipStreamer.js index 7c6b1a30..50eec0c7 100644 --- a/server/core/ZipStreamer.js +++ b/server/core/ZipStreamer.js @@ -52,7 +52,26 @@ class ZipStreamer { })().catch(reject); }); } - unpack(zipFile, entryCallback) { + unpack(zipFile, outputDir, entryCallback) { + return new Promise((resolve, reject) => { + entryCallback = (entryCallback ? entryCallback : () => {}); + const unzip = new unzipStream({file: zipFile}); + + let files = []; + unzip.on('extract', (en) => { + const entry = {path: en.name, size: en.size, compressedSize: en.compressedSize}; + entryCallback(entry); + files.push(entry); + }); + + unzip.on('ready', () => { + unzip.extract(null, outputDir, (err) => { + if (err) reject(err); + unzip.close(); + resolve(files); + }); + }); + }); } }