🔧 Adding a full extraction endpoint
This commit is contained in:
@@ -47,6 +47,7 @@ import {
|
|||||||
walkFolder,
|
walkFolder,
|
||||||
getSizeOfDirectory,
|
getSizeOfDirectory,
|
||||||
} from "../utils/file.utils";
|
} from "../utils/file.utils";
|
||||||
|
import { uncompressEntireArchive } from "../utils/uncompression.utils";
|
||||||
import { convertXMLToJSON } from "../utils/xml.utils";
|
import { convertXMLToJSON } from "../utils/xml.utils";
|
||||||
import {
|
import {
|
||||||
IExtractComicBookCoverErrorResponse,
|
IExtractComicBookCoverErrorResponse,
|
||||||
@@ -88,6 +89,13 @@ export default class ImportService extends Service {
|
|||||||
return convertXMLToJSON("lagos");
|
return convertXMLToJSON("lagos");
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
uncompressFullArchive : {
|
||||||
|
rest: "POST /uncompressFullArchive",
|
||||||
|
params: {},
|
||||||
|
handler: async (ctx: Context<{filePath: string}>) => {
|
||||||
|
return await uncompressEntireArchive(ctx.params.filePath);
|
||||||
|
}
|
||||||
|
},
|
||||||
newImport: {
|
newImport: {
|
||||||
rest: "POST /newImport",
|
rest: "POST /newImport",
|
||||||
params: {},
|
params: {},
|
||||||
@@ -323,7 +331,7 @@ export default class ImportService extends Service {
|
|||||||
) {
|
) {
|
||||||
return await Comic.paginate(ctx.params.predicate, {
|
return await Comic.paginate(ctx.params.predicate, {
|
||||||
...ctx.params.paginationOptions,
|
...ctx.params.paginationOptions,
|
||||||
allowDiskUse: true,
|
// allowDiskUse: true,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -537,7 +545,7 @@ export default class ImportService extends Service {
|
|||||||
{ $sort: { count: -1 } },
|
{ $sort: { count: -1 } },
|
||||||
{ $limit: 1 },
|
{ $limit: 1 },
|
||||||
],
|
],
|
||||||
mostPopulatCharacter: [],
|
// mostPopulatCharacter: [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const Walk = require("@root/walk");
|
const Walk = require("@root/walk");
|
||||||
|
const fse = require("fs-extra");
|
||||||
|
|
||||||
import path from "path";
|
import path from "path";
|
||||||
import fs from "fs";
|
import fs from "fs";
|
||||||
@@ -11,6 +12,7 @@ import {
|
|||||||
IFolderData,
|
IFolderData,
|
||||||
} from "threetwo-ui-typings";
|
} from "threetwo-ui-typings";
|
||||||
import { includes, remove, indexOf } from "lodash";
|
import { includes, remove, indexOf } from "lodash";
|
||||||
|
import { Errors } from "moleculer";
|
||||||
|
|
||||||
const ALLOWED_IMAGE_FILE_FORMATS = [".jpg", ".jpeg", ".png"];
|
const ALLOWED_IMAGE_FILE_FORMATS = [".jpg", ".jpeg", ".png"];
|
||||||
|
|
||||||
@@ -74,7 +76,7 @@ export const checkFileExists = (filepath) => {
|
|||||||
resolve(!error);
|
resolve(!error);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getSizeOfDirectory = async (
|
export const getSizeOfDirectory = async (
|
||||||
directoryPath: string,
|
directoryPath: string,
|
||||||
@@ -120,5 +122,14 @@ export const getFileConstituents = (filePath: string) => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const createDirectory = async (options: any, directoryPath: string) => {
|
||||||
|
try {
|
||||||
|
await fse.ensureDir(directoryPath, options);
|
||||||
|
console.info(`Directory [ %s ] was created.`, directoryPath);
|
||||||
|
} catch (error) {
|
||||||
|
throw new Errors.MoleculerError("Failed to create directory", 500, "FileOpsError", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const filterOutDotFiles = (entities) =>
|
const filterOutDotFiles = (entities) =>
|
||||||
entities.filter((ent) => !ent.name.startsWith("."));
|
entities.filter((ent) => !ent.name.startsWith("."));
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import path from "path";
|
|||||||
import sharp from "sharp";
|
import sharp from "sharp";
|
||||||
import { IMPORT_IMAGE_FILE_FORMATS } from "../constants/allowedFileFormats";
|
import { IMPORT_IMAGE_FILE_FORMATS } from "../constants/allowedFileFormats";
|
||||||
import { USERDATA_DIRECTORY } from "../constants/directories";
|
import { USERDATA_DIRECTORY } from "../constants/directories";
|
||||||
import { checkFileExists, getFileConstituents } from "../utils/file.utils";
|
import { checkFileExists, getFileConstituents, createDirectory, walkFolder } from "../utils/file.utils";
|
||||||
import { convertXMLToJSON } from "./xml.utils";
|
import { convertXMLToJSON } from "./xml.utils";
|
||||||
const fse = require("fs-extra");
|
const fse = require("fs-extra");
|
||||||
const Unrar = require("unrar");
|
const Unrar = require("unrar");
|
||||||
@@ -55,7 +55,7 @@ interface RarFile {
|
|||||||
compression: string;
|
compression: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const UNRAR_BIN_PATH = process.env.UNRAR_BIN_PATH || "/opt/homebrew/bin/unrar";
|
const UNRAR_BIN_PATH = process.env.UNRAR_BIN_PATH || "/usr/local/bin/unrar";
|
||||||
|
|
||||||
export const extractComicInfoXMLFromRar = async (
|
export const extractComicInfoXMLFromRar = async (
|
||||||
filePath: string
|
filePath: string
|
||||||
@@ -71,8 +71,8 @@ export const extractComicInfoXMLFromRar = async (
|
|||||||
const { fileNameWithoutExtension, extension } =
|
const { fileNameWithoutExtension, extension } =
|
||||||
getFileConstituents(filePath);
|
getFileConstituents(filePath);
|
||||||
const targetDirectory = `${USERDATA_DIRECTORY}/covers/${fileNameWithoutExtension}`;
|
const targetDirectory = `${USERDATA_DIRECTORY}/covers/${fileNameWithoutExtension}`;
|
||||||
await fse.ensureDir(targetDirectory, directoryOptions);
|
await createDirectory(directoryOptions, targetDirectory);
|
||||||
console.info(`%s was created.`, targetDirectory);
|
|
||||||
const archive = new Unrar({
|
const archive = new Unrar({
|
||||||
path: path.resolve(filePath),
|
path: path.resolve(filePath),
|
||||||
bin: `${UNRAR_BIN_PATH}`, // this will change depending on Docker base OS
|
bin: `${UNRAR_BIN_PATH}`, // this will change depending on Docker base OS
|
||||||
@@ -179,8 +179,8 @@ export const extractComicInfoXMLFromZip = async (
|
|||||||
const { fileNameWithoutExtension, extension } =
|
const { fileNameWithoutExtension, extension } =
|
||||||
getFileConstituents(filePath);
|
getFileConstituents(filePath);
|
||||||
const targetDirectory = `${USERDATA_DIRECTORY}/covers/${fileNameWithoutExtension}`;
|
const targetDirectory = `${USERDATA_DIRECTORY}/covers/${fileNameWithoutExtension}`;
|
||||||
await fse.ensureDir(targetDirectory, directoryOptions);
|
await createDirectory(directoryOptions, targetDirectory);
|
||||||
console.info(`%s was created.`, targetDirectory);
|
|
||||||
let filesToWriteToDisk = { coverFile: null, comicInfoXML: null };
|
let filesToWriteToDisk = { coverFile: null, comicInfoXML: null };
|
||||||
const extractionTargets = [];
|
const extractionTargets = [];
|
||||||
|
|
||||||
@@ -321,6 +321,7 @@ export const extractFromArchive = async (filePath: string) => {
|
|||||||
|
|
||||||
export const uncompressEntireArchive = async (filePath: string) => {
|
export const uncompressEntireArchive = async (filePath: string) => {
|
||||||
const { extension } = getFileConstituents(filePath);
|
const { extension } = getFileConstituents(filePath);
|
||||||
|
console.log(extension);
|
||||||
switch (extension) {
|
switch (extension) {
|
||||||
case ".cbz":
|
case ".cbz":
|
||||||
case ".cb7":
|
case ".cb7":
|
||||||
@@ -330,5 +331,25 @@ export const uncompressEntireArchive = async (filePath: string) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const uncompressZipArchive = async (filePath: string) => { };
|
export const uncompressZipArchive = async (filePath: string) => {
|
||||||
|
// Create the target directory
|
||||||
|
const directoryOptions = {
|
||||||
|
mode: 0o2775,
|
||||||
|
};
|
||||||
|
const { fileNameWithoutExtension, extension } =
|
||||||
|
getFileConstituents(filePath);
|
||||||
|
const targetDirectory = `${USERDATA_DIRECTORY}/expanded/${fileNameWithoutExtension}`;
|
||||||
|
await createDirectory(directoryOptions, targetDirectory);
|
||||||
|
|
||||||
|
await p7zip.extract(
|
||||||
|
filePath,
|
||||||
|
targetDirectory,
|
||||||
|
[],
|
||||||
|
"",
|
||||||
|
true
|
||||||
|
);
|
||||||
|
return await walkFolder(targetDirectory, [
|
||||||
|
".jpg", ".jpeg", ".JPG", ".JPEG", ".png", ".bmp"
|
||||||
|
]);
|
||||||
|
};
|
||||||
export const uncompressRarArchive = async (filePath: string) => { };
|
export const uncompressRarArchive = async (filePath: string) => { };
|
||||||
|
|||||||
Reference in New Issue
Block a user