🗜 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);
fileArrayBuffer, logger.info(`${targetPath} was created or already exists.`);
(err) => { try {
if (err) { await fs.writeFile(
logger.error("Failed to write file", err); targetPath + "/" + pathFragments.fileName,
reject(err); fileArrayBuffer,
} else { );
logger.info( resolve({
`The file ${extractedFile.fileHeader.name} was saved to disk.`, name: `${extractedFile.fileHeader.name}`,
); path: targetPath,
resolve({ fileSize: extractedFile.fileHeader.packSize,
name: `${extractedFile.fileHeader.name}`, });
path: comicCoversTargetPath, } catch (error) {
fileSize: extractedFile.fileHeader.packSize, 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":