🔫 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 {
folderDetails: IFolderData;
extractTarget: string;
sourceFolder: string;
targetExtractionFolder: string;

View File

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

View File

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