🖇 Refactorting

This commit is contained in:
2021-04-20 14:00:11 -07:00
parent de6cdfd418
commit a21b51f0ae
2 changed files with 33 additions and 19 deletions

View File

@@ -12,9 +12,9 @@ import { Request, Response } from "express";
router.route("/getComicCovers").get(async (req: Request, res: Response) => { router.route("/getComicCovers").get(async (req: Request, res: Response) => {
const foo = await extractArchive({ const foo = await extractArchive({
name: "Dollar Bill 001.cbr", name: "Neonomicon 01 (of 04) (2010) (Project Comic Con cover) (Minutemen-DTs).cbz",
extension: ".cbr", extension: ".cbz",
containedIn: "comics/(2012) Before Watchmen - Dollar Bill", containedIn: "comics/Neonomicon",
isFile: true, isFile: true,
isLink: false, isLink: false,
}); });

View File

@@ -2,7 +2,6 @@ import { default as unzipper } from "unzipper";
const sharp = require("sharp"); const sharp = require("sharp");
const unrarer = require("node-unrar-js"); const unrarer = require("node-unrar-js");
const Walk = require("@root/walk"); const Walk = require("@root/walk");
const mkdirp = require("mkdirp");
const fse = require("fs-extra"); const fse = require("fs-extra");
const fs = require("fs").promises; const fs = require("fs").promises;
import path from "path"; import path from "path";
@@ -134,24 +133,39 @@ export const extractMetadataFromImage = async (
}; };
export const unzip = async ( export const unzip = async (
filePath: string, extractionOptions: IExtractionOptions,
): Promise<IExtractedComicBookCoverFile[]> => { ): Promise<IExtractedComicBookCoverFile[]> => {
const extractedFiles: IExtractedComicBookCoverFile[] = []; const extractedFiles: IExtractedComicBookCoverFile[] = [];
const zip = fs const directoryOptions = {
mode: 0o2775,
};
const targetPath =
extractionOptions.sourceFolder +
"/" +
extractionOptions.targetExtractionFolder;
const zip = await fs
.createReadStream( .createReadStream(
"./comics/Lovecraft - The Myth of Cthulhu (2018) (Maroto) (fylgja).cbz", extractionOptions.sourceFolder +
"/" +
extractionOptions.folderDetails.name,
) )
.pipe(unzipper.Parse({ forceStream: true })); .pipe(unzipper.Parse({ forceStream: true }));
for await (const entry of zip) { for await (const entry of zip) {
const fileName = entry.path; try {
const size = entry.vars.uncompressedSize; // There is also compressedSize; await fse.ensureDir(targetPath, directoryOptions);
extractedFiles.push({ logger.info(`${targetPath} was created or already exists.`);
name: fileName, const fileName = entry.path;
fileSize: size, const size = entry.vars.uncompressedSize; // There is also compressedSize;
path: filePath, extractedFiles.push({
}); name: fileName,
entry.pipe(fs.createWriteStream("./comics/covers/" + fileName)); fileSize: size,
entry.autodrain(); path: targetPath,
});
entry.pipe(fs.createWriteStream(targetPath + fileName));
entry.autodrain();
} catch (error) {
logger.error(`${error} Couldn't create directory.`);
}
} }
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logger.info(""); logger.info("");
@@ -186,16 +200,16 @@ export const extractArchive = async (
| IExtractComicBookCoverErrorResponse | IExtractComicBookCoverErrorResponse
> => { > => {
const sourceFolder = "./comics/"; const sourceFolder = "./comics/";
const targetExtractionFolder = "covers"; const targetExtractionFolder = "expanded";
const extractionOptions: IExtractionOptions = { const extractionOptions: IExtractionOptions = {
folderDetails: fileObject, folderDetails: fileObject,
extractTarget: "cover", extractTarget: "all",
sourceFolder, sourceFolder,
targetExtractionFolder, targetExtractionFolder,
}; };
switch (fileObject.extension) { switch (fileObject.extension) {
case ".cbz": case ".cbz":
return await unzip("j"); return await unzip(extractionOptions);
case ".cbr": case ".cbr":
return await unrar(extractionOptions); return await unrar(extractionOptions);
default: default: