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: