🧩 Single file unzip refactor

This commit is contained in:
2021-04-21 15:22:35 -07:00
parent aabaebaa7c
commit 844447f1c7

View File

@@ -128,7 +128,6 @@ export const unzip = async (
| IExtractedComicBookCoverFile | IExtractedComicBookCoverFile
| IExtractComicBookCoverErrorResponse | IExtractComicBookCoverErrorResponse
> => { > => {
const extractedFiles: IExtractedComicBookCoverFile[] = [];
const directoryOptions = { const directoryOptions = {
mode: 0o2775, mode: 0o2775,
}; };
@@ -145,10 +144,6 @@ export const unzip = async (
extractionOptions.folderDetails.name + extractionOptions.folderDetails.name +
extractionOptions.folderDetails.extension; extractionOptions.folderDetails.extension;
const zip = createReadStream(inputFilePath).pipe(
unzipper.Parse({ forceStream: true }),
);
try { try {
await fse.ensureDir(targetPath, directoryOptions); await fse.ensureDir(targetPath, directoryOptions);
logger.info(`${targetPath} was created or already exists.`); logger.info(`${targetPath} was created or already exists.`);
@@ -156,36 +151,52 @@ export const unzip = async (
logger.error(`${error} Couldn't create directory.`); 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) { switch (extractionOptions.extractTarget) {
case "all": case "all":
const extractedFiles: IExtractedComicBookCoverFile[] = [];
const zip = createReadStream(inputFilePath).pipe(
unzipper.Parse({ forceStream: true }),
);
for await (const entry of zip) { for await (const entry of zip) {
const writeableFileName = explodePath(entry.path).fileName; const fileName = explodePath(entry.path).fileName;
entry.pipe(createWriteStream(targetPath + "/" + writeableFileName)); 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(); entry.autodrain();
} }
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
logger.info(""); logger.info("");
resolve(extractedFiles); resolve(extractedFiles);
}); });
case "cover": case "cover":
console.log(zip); const extractedFile: IExtractedComicBookCoverFile[] = [];
createWriteStream(targetPath + "/" + extractedFiles[0].name); 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) => { return new Promise((resolve, reject) => {
resolve(extractedFiles[0]); resolve(extractedFile[0]);
}); });
default: default: