🔫 Refactoring extractArchive to use Promise.all

This commit is contained in:
2021-05-05 08:36:27 -07:00
parent e2bdb6e190
commit dcec8f8bfc
3 changed files with 34 additions and 26 deletions

View File

@@ -3,7 +3,6 @@ export interface IFolderResponse {
} }
export interface IExtractionOptions { export interface IExtractionOptions {
folderDetails: IFolderData;
extractTarget: string; extractTarget: string;
sourceFolder: string; sourceFolder: string;
targetExtractionFolder: string; targetExtractionFolder: string;

View File

@@ -9,9 +9,11 @@ router.route("/getComicCovers").post(async (req: Request, res: Response) => {
typeof req.body.extractionOptions === "object" typeof req.body.extractionOptions === "object"
? req.body.extractionOptions ? req.body.extractionOptions
: {}; : {};
console.log(req.body) const foo = await getCovers(
// const foo = await getCovers(req.body, req.bod); req.body.extractionOptions,
return res.json({ foo: "madi" }); req.body.walkedFolders,
);
return res.json({ foo });
// const extractedData = await extractArchive(req.body); // const extractedData = await extractArchive(req.body);
// if ( // if (
// _.isArray(extractedData) && // _.isArray(extractedData) &&

View File

@@ -52,12 +52,13 @@ import {
export const unrar = async ( export const unrar = async (
extractionOptions: IExtractionOptions, extractionOptions: IExtractionOptions,
walkedFolder: IFolderData,
): Promise< ): Promise<
| IExtractedComicBookCoverFile | IExtractedComicBookCoverFile
| IExtractedComicBookCoverFile[] | IExtractedComicBookCoverFile[]
| IExtractComicBookCoverErrorResponse | IExtractComicBookCoverErrorResponse
> => { > => {
const paths = constructPaths(extractionOptions); const paths = constructPaths(extractionOptions, walkedFolder);
const directoryOptions = { const directoryOptions = {
mode: 0o2775, mode: 0o2775,
}; };
@@ -134,7 +135,7 @@ export const unrar = async (
resolve({ resolve({
message: `${error}`, message: `${error}`,
errorCode: "500", errorCode: "500",
data: extractionOptions.folderDetails.name, data: walkedFolder.name,
}); });
} }
}); });
@@ -161,6 +162,7 @@ export const extractMetadataFromImage = async (
export const unzip = async ( export const unzip = async (
extractionOptions: IExtractionOptions, extractionOptions: IExtractionOptions,
walkedFolder: IFolderData,
): Promise< ): Promise<
| IExtractedComicBookCoverFile[] | IExtractedComicBookCoverFile[]
| IExtractedComicBookCoverFile | IExtractedComicBookCoverFile
@@ -169,7 +171,7 @@ export const unzip = async (
const directoryOptions = { const directoryOptions = {
mode: 0o2775, mode: 0o2775,
}; };
const paths = constructPaths(extractionOptions); const paths = constructPaths(extractionOptions, walkedFolder);
try { try {
await fse.ensureDir(paths.targetPath, directoryOptions); await fse.ensureDir(paths.targetPath, directoryOptions);
@@ -210,16 +212,17 @@ export const unzip = async (
export const extractArchive = async ( export const extractArchive = async (
extractionOptions: IExtractionOptions, extractionOptions: IExtractionOptions,
walkedFolder: IFolderData,
): Promise< ): Promise<
| IExtractedComicBookCoverFile | IExtractedComicBookCoverFile
| IExtractedComicBookCoverFile[] | IExtractedComicBookCoverFile[]
| IExtractComicBookCoverErrorResponse | IExtractComicBookCoverErrorResponse
> => { > => {
switch (extractionOptions.folderDetails.extension) { switch (walkedFolder.extension) {
case ".cbz": case ".cbz":
return await unzip(extractionOptions); return await unzip(extractionOptions, walkedFolder);
case ".cbr": case ".cbr":
return await unrar(extractionOptions); return await unrar(extractionOptions, walkedFolder);
default: default:
return { return {
message: "File format not supported, yet.", message: "File format not supported, yet.",
@@ -231,20 +234,23 @@ export const extractArchive = async (
export const getCovers = async ( export const getCovers = async (
options: IExtractionOptions, options: IExtractionOptions,
walkedFolders: Array<IFolderData>,
): Promise< ): Promise<
IExtractedComicBookCoverFile[] | IExtractedComicBookCoverFile | unknown IExtractedComicBookCoverFile[] | IExtractedComicBookCoverFile | unknown
> => { > => {
switch (options.extractionMode) { switch (options.extractionMode) {
case "bulk": case "bulk":
const extractedDataPromises = _.map(payload, (folderObject) => { const extractedDataPromises = _.map(walkedFolders, (folder) => {
extractArchive({ extractArchive(
extractTarget: options.extractTarget, {
sourceFolder: options.sourceFolder, extractTarget: options.extractTarget,
targetExtractionFolder: options.targetExtractionFolder, sourceFolder: options.sourceFolder,
folderDetails: folderObject, targetExtractionFolder: options.targetExtractionFolder,
paginationOptions: options.paginationOptions, paginationOptions: options.paginationOptions,
extractionMode: options.extractionMode, extractionMode: options.extractionMode,
}); },
folder,
);
}); });
return Promise.all(extractedDataPromises).then((data) => data); return Promise.all(extractedDataPromises).then((data) => data);
case "single": case "single":
@@ -286,16 +292,17 @@ export const explodePath = (filePath: string): IExplodedPathResponse => {
}; };
}; };
const constructPaths = (extractionOptions: IExtractionOptions) => { const constructPaths = (
extractionOptions: IExtractionOptions,
walkedFolder: IFolderData,
) => {
return { return {
targetPath: targetPath:
extractionOptions.targetExtractionFolder + extractionOptions.targetExtractionFolder + "/" + walkedFolder.name,
"/" +
extractionOptions.folderDetails.name,
inputFilePath: inputFilePath:
extractionOptions.folderDetails.containedIn + walkedFolder.containedIn +
"/" + "/" +
extractionOptions.folderDetails.name + walkedFolder.name +
extractionOptions.folderDetails.extension, walkedFolder.extension,
}; };
}; };