From 844447f1c7649527c3f1965cf6082e83dac41c15 Mon Sep 17 00:00:00 2001 From: Rishi Ghan Date: Wed, 21 Apr 2021 15:22:35 -0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=A9=20Single=20file=20unzip=20refactor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/server/utils/fs.utils.ts | 57 +++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/src/server/utils/fs.utils.ts b/src/server/utils/fs.utils.ts index c6504f9..17d0b63 100644 --- a/src/server/utils/fs.utils.ts +++ b/src/server/utils/fs.utils.ts @@ -128,7 +128,6 @@ export const unzip = async ( | IExtractedComicBookCoverFile | IExtractComicBookCoverErrorResponse > => { - const extractedFiles: IExtractedComicBookCoverFile[] = []; const directoryOptions = { mode: 0o2775, }; @@ -145,10 +144,6 @@ export const unzip = async ( extractionOptions.folderDetails.name + extractionOptions.folderDetails.extension; - const zip = createReadStream(inputFilePath).pipe( - unzipper.Parse({ forceStream: true }), - ); - try { await fse.ensureDir(targetPath, directoryOptions); logger.info(`${targetPath} was created or already exists.`); @@ -156,36 +151,52 @@ export const unzip = async ( logger.error(`${error} Couldn't create directory.`); } - for await (const entry of zip) { - const fileName = explodePath(entry.path).fileName; - const size = entry.vars.uncompressedSize; - if (fileName !== "" && entry.type !== "Directory") { - extractedFiles.push({ - name: fileName, - fileSize: size, - path: targetPath, - }); - } - entry.autodrain(); - } - switch (extractionOptions.extractTarget) { case "all": + const extractedFiles: IExtractedComicBookCoverFile[] = []; + const zip = createReadStream(inputFilePath).pipe( + unzipper.Parse({ forceStream: true }), + ); for await (const entry of zip) { - const writeableFileName = explodePath(entry.path).fileName; - entry.pipe(createWriteStream(targetPath + "/" + writeableFileName)); + const fileName = explodePath(entry.path).fileName; + const size = entry.vars.uncompressedSize; + entry.pipe(createWriteStream(targetPath + "/" + fileName)); + if (fileName !== "" && entry.type !== "Directory") { + extractedFiles.push({ + name: fileName, + fileSize: size, + path: targetPath, + }); + } entry.autodrain(); } + return new Promise(async (resolve, reject) => { logger.info(""); resolve(extractedFiles); }); case "cover": - console.log(zip); - createWriteStream(targetPath + "/" + extractedFiles[0].name); + const extractedFile: IExtractedComicBookCoverFile[] = []; + const singleZip = createReadStream(inputFilePath).pipe( + unzipper.Parse({ forceStream: true }), + ); + for await (const item of singleZip) { + const writeableFileName = explodePath(item.path).fileName; + if (extractedFile.length === 1) { + break; + } + if (writeableFileName !== "" && item.type !== "Directory") { + item.pipe(createWriteStream(targetPath + "/" + writeableFileName)); + extractedFile.push({ + name: writeableFileName, + fileSize: item.size, + path: targetPath, + }); + } + } return new Promise((resolve, reject) => { - resolve(extractedFiles[0]); + resolve(extractedFile[0]); }); default: