🔧 Refactoring unrar for single and multiple file extraction
This commit is contained in:
@@ -10,12 +10,18 @@ import {
|
|||||||
import { Request, Response } from "express";
|
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 unrar("./comics/covers/");
|
const foo = await extractArchive({
|
||||||
|
name: "Dante's Inferno 02 (2010) (noads) (Legion-CPS).cbr",
|
||||||
|
extension: ".cbr",
|
||||||
|
containedIn: "comics/Dante's Inferno",
|
||||||
|
isFile: true,
|
||||||
|
isLink: false,
|
||||||
|
});
|
||||||
// const foo = await extractMetadataFromImage(
|
// const foo = await extractMetadataFromImage(
|
||||||
// "./comics/covers/Ghosts and Ruins-001.jpg",
|
// "./comics/covers/Ghosts and Ruins-001.jpg",
|
||||||
// );
|
// );
|
||||||
// const foo = await unzipOne();
|
// const foo = await unzipOne();
|
||||||
const foo = await unzip("asd");
|
// const foo = await unzip("asd");
|
||||||
res.json({
|
res.json({
|
||||||
jagan: "trupti",
|
jagan: "trupti",
|
||||||
foo,
|
foo,
|
||||||
|
|||||||
@@ -14,46 +14,90 @@ import {
|
|||||||
|
|
||||||
export const unrar = async (
|
export const unrar = async (
|
||||||
extractionOptions: IExtractionOptions,
|
extractionOptions: IExtractionOptions,
|
||||||
): Promise<IExtractedComicBookCoverFile> => {
|
): Promise<
|
||||||
|
IExtractedComicBookCoverFile | IExtractComicBookCoverErrorResponse
|
||||||
|
> => {
|
||||||
const comicCoversTargetPath =
|
const comicCoversTargetPath =
|
||||||
extractionOptions.sourceFolder + extractionOptions.extractTarget;
|
extractionOptions.sourceFolder +
|
||||||
|
extractionOptions.targetComicCoversFolder +
|
||||||
|
"/";
|
||||||
const buf = Uint8Array.from(
|
const buf = Uint8Array.from(
|
||||||
fs.readFileSync(
|
fs.readFileSync(
|
||||||
extractionOptions.sourceFolder + extractionOptions.folderDetails.name,
|
extractionOptions.folderDetails.containedIn +
|
||||||
|
"/" +
|
||||||
|
extractionOptions.folderDetails.name,
|
||||||
),
|
),
|
||||||
).buffer;
|
).buffer;
|
||||||
const extractor = await unrarer.createExtractorFromData({ data: buf });
|
const extractor = await unrarer.createExtractorFromData({ data: buf });
|
||||||
const list = extractor.getFileList();
|
const list = extractor.getFileList();
|
||||||
const fileHeaders = [...list.fileHeaders];
|
const fileHeaders = [...list.fileHeaders];
|
||||||
// extract the first file only
|
switch (extractionOptions.extractTarget) {
|
||||||
const extracted = extractor.extract({ files: [fileHeaders[0].name] });
|
// extract the first file only
|
||||||
const files = [...extracted.files];
|
case "cover":
|
||||||
const extractedFile = files[0];
|
const arcHeader = extractor.extract({ files: [fileHeaders[0].name] });
|
||||||
const myBuffer = extractedFile.extraction;
|
const file = [...arcHeader.files];
|
||||||
|
const extractedFile = file[0];
|
||||||
|
const fileArrayBuffer = extractedFile.extraction;
|
||||||
|
|
||||||
logger.info(`Attempting to write ${extractedFile.fileHeader.name}`);
|
logger.info(`Attempting to write ${extractedFile.fileHeader.name}`);
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
fs.writeFile(
|
fs.writeFile(
|
||||||
comicCoversTargetPath + extractedFile.fileHeader.name,
|
comicCoversTargetPath + extractedFile.fileHeader.name,
|
||||||
myBuffer,
|
fileArrayBuffer,
|
||||||
(err) => {
|
(err) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
logger.error("Failed to write file", err);
|
logger.error("Failed to write file", err);
|
||||||
reject(err);
|
reject(err);
|
||||||
} else {
|
} else {
|
||||||
logger.info(
|
logger.info(
|
||||||
`The file ${extractedFile.fileHeader.name} was saved to disk.`,
|
`The file ${extractedFile.fileHeader.name} was saved to disk.`,
|
||||||
);
|
);
|
||||||
resolve({
|
resolve({
|
||||||
name: `${extractedFile.fileHeader.name}`,
|
name: `${extractedFile.fileHeader.name}`,
|
||||||
path: comicCoversTargetPath,
|
path: comicCoversTargetPath,
|
||||||
fileSize: extractedFile.fileHeader.packSize,
|
fileSize: extractedFile.fileHeader.packSize,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
case "all":
|
||||||
|
const extractedFileHeaders = extractor.extract({});
|
||||||
|
const files = [...extractedFileHeaders.files];
|
||||||
|
const extractedFiles = files[0];
|
||||||
|
const filesBuffer = extractedFile.extraction;
|
||||||
|
|
||||||
|
logger.info(`Attempting to write ${extractedFiles.fileHeader.name}`);
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
fs.writeFile(
|
||||||
|
comicCoversTargetPath + extractedFiles.fileHeader.name,
|
||||||
|
filesBuffer,
|
||||||
|
(err) => {
|
||||||
|
if (err) {
|
||||||
|
logger.error("Failed to write file", err);
|
||||||
|
reject(err);
|
||||||
|
} else {
|
||||||
|
logger.info(
|
||||||
|
`The file ${extractedFile.fileHeader.name} was saved to disk.`,
|
||||||
|
);
|
||||||
|
resolve({
|
||||||
|
name: `${extractedFile.fileHeader.name}`,
|
||||||
|
path: comicCoversTargetPath,
|
||||||
|
fileSize: extractedFile.fileHeader.packSize,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
});
|
||||||
|
default:
|
||||||
|
return {
|
||||||
|
message: "File format not supported, yet.",
|
||||||
|
errorCode: "90",
|
||||||
|
data: "asda",
|
||||||
|
};
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const extractMetadataFromImage = async (
|
export const extractMetadataFromImage = async (
|
||||||
|
|||||||
Reference in New Issue
Block a user