🗜 unrar single vs all refactored

This commit is contained in:
2021-04-20 12:46:08 -07:00
parent 2648970a27
commit de6cdfd418
2 changed files with 36 additions and 31 deletions

View File

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

View File

@@ -23,8 +23,11 @@ export const unrar = async (
| IExtractedComicBookCoverFile[] | IExtractedComicBookCoverFile[]
| IExtractComicBookCoverErrorResponse | IExtractComicBookCoverErrorResponse
> => { > => {
const comicCoversTargetPath = const extractionTargetPath =
extractionOptions.sourceFolder + extractionOptions.targetComicCoversFolder; extractionOptions.sourceFolder + extractionOptions.targetExtractionFolder;
const directoryOptions = {
mode: 0o2775,
};
const fileBuffer = await fs const fileBuffer = await fs
.readFile( .readFile(
extractionOptions.folderDetails.containedIn + extractionOptions.folderDetails.containedIn +
@@ -43,36 +46,38 @@ export const unrar = async (
const extractedFile = [...file.files][0]; const extractedFile = [...file.files][0];
const fileArrayBuffer = extractedFile.extraction; const fileArrayBuffer = extractedFile.extraction;
const pathFragments = explodePath(extractedFile.fileHeader.name);
const targetPath =
extractionTargetPath + "/" + pathFragments.exploded.join("/");
logger.info(`Attempting to write ${extractedFile.fileHeader.name}`); logger.info(`Attempting to write ${extractedFile.fileHeader.name}`);
return new Promise((resolve, reject) => { return new Promise(async (resolve, reject) => {
fs.writeFile( try {
comicCoversTargetPath + extractedFile.fileHeader.name, await fse.ensureDir(targetPath, directoryOptions);
logger.info(`${targetPath} was created or already exists.`);
try {
await fs.writeFile(
targetPath + "/" + pathFragments.fileName,
fileArrayBuffer, fileArrayBuffer,
(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({ resolve({
name: `${extractedFile.fileHeader.name}`, name: `${extractedFile.fileHeader.name}`,
path: comicCoversTargetPath, path: targetPath,
fileSize: extractedFile.fileHeader.packSize, fileSize: extractedFile.fileHeader.packSize,
}); });
} catch (error) {
logger.error(`${error}: Couldn't write file.`);
reject(error);
}
} catch (error) {
logger.error(`${error}: Coudln't create directory.`);
reject(error);
} }
},
);
}); });
case "all": case "all":
const files = extractor.extract({}); const files = extractor.extract({});
const extractedFiles = [...files.files]; const extractedFiles = [...files.files];
const options = {
mode: 0o2775,
};
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
const comicBookCoverFiles: IExtractedComicBookCoverFile[] = []; const comicBookCoverFiles: IExtractedComicBookCoverFile[] = [];
@@ -81,9 +86,9 @@ export const unrar = async (
const fileBuffer = file.extraction; const fileBuffer = file.extraction;
const pathFragments = explodePath(file.fileHeader.name); const pathFragments = explodePath(file.fileHeader.name);
const targetPath = const targetPath =
comicCoversTargetPath + "/" + pathFragments.exploded.join("/"); extractionTargetPath + "/" + pathFragments.exploded.join("/");
try { try {
await fse.ensureDir(targetPath, options); await fse.ensureDir(targetPath, directoryOptions);
logger.info(`${targetPath} was created or already exists.`); logger.info(`${targetPath} was created or already exists.`);
try { try {
await fs.writeFile( await fs.writeFile(
@@ -181,12 +186,12 @@ export const extractArchive = async (
| IExtractComicBookCoverErrorResponse | IExtractComicBookCoverErrorResponse
> => { > => {
const sourceFolder = "./comics/"; const sourceFolder = "./comics/";
const targetComicCoversFolder = "covers"; const targetExtractionFolder = "covers";
const extractionOptions: IExtractionOptions = { const extractionOptions: IExtractionOptions = {
folderDetails: fileObject, folderDetails: fileObject,
extractTarget: "all", extractTarget: "cover",
sourceFolder, sourceFolder,
targetComicCoversFolder, targetExtractionFolder,
}; };
switch (fileObject.extension) { switch (fileObject.extension) {
case ".cbz": case ".cbz":