🔫 Refactoring extractArchive to use Promise.all
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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) &&
|
||||||
|
|||||||
@@ -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,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user