🌁 Image util functions added

This commit is contained in:
2021-04-16 23:08:26 -07:00
parent 9d5729286f
commit 424c5aded7
5 changed files with 364 additions and 40 deletions

View File

@@ -1,22 +1,63 @@
import unrarer from "node-unrar-js";
import { default as unzipper } from "unzipper";
const etl = require("etl");
const sharp = require("sharp");
const imgHash = require("imghash");
const unrarer = require("node-unrar-js");
const Walk = require("@root/walk");
import fs from "fs";
import path from "path";
import { logger } from "./logger.utils";
import { IFolderData } from "../interfaces/folder.interface";
import {
IExtractedComicBookCoverFile,
IFolderData,
} from "../interfaces/folder.interface";
export const unrar = async (filePath) => {
export const unrar = async (
filePath: string,
): Promise<IExtractedComicBookCoverFile> => {
const buf = Uint8Array.from(
fs.readFileSync("./comics/The Squidder (2015) (Digital-Empire).cbr"),
fs.readFileSync(
"./comics/Ghosts and Ruins (2013) (digital) (Mr Norrell-Empire).cbr",
),
).buffer;
const extractor = await unrarer.createExtractorFromData({ data: buf });
const list = extractor.getFileList();
const fileHeaders = [...list.fileHeaders];
// extract the first file only
const extracted = extractor.extract({ files: [fileHeaders[0].name] });
const files = [...extracted.files]; //load the files
return files[0];
const files = [...extracted.files];
const extractedFile = files[0];
const myBuffer = extractedFile.extraction;
logger.info(`Attempting to write ${extractedFile.fileHeader.name}`);
return new Promise((resolve, reject) => {
fs.writeFile(filePath + extractedFile.fileHeader.name, myBuffer, (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: `${filePath}`,
});
}
});
});
};
export const extractMetadataFromImage = async (
imageFilePath: string,
): Promise<unknown> => {
const image = await sharp(imageFilePath)
.metadata()
.then(function (metadata) {
return metadata;
});
return image;
};
export const unzip = () => {
@@ -32,26 +73,15 @@ export const unzip = () => {
});
};
export const extractArchive = async (fileObject: IFolderData) => {
const extractedFile = await unrar("./comics");
switch(fileObject.extension) {
case '.cbz':
export const extractArchive = async (
fileObject: IFolderData,
): Promise<void> => {
switch (fileObject.extension) {
case ".cbz":
break;
case '.cbr':
case ".cbr":
break;
}
const myBuffer = extractedFile.extraction;
logger.info(`Attempting to write ${extractedFile.fileHeader.name}`);
fs.writeFile(pathName + extractedFile.fileHeader.name, myBuffer, (err) => {
if (err) {
logger.error("Failed to write file", err);
} else {
logger.info(
`The file ${extractedFile.fileHeader.name} was saved to disk.`,
);
}
});
};
export const walkFolder = async (folder: string): Promise<IFolderData[]> => {