🦠 Added ignored folder back to git tracking
Signed-off-by: Rishi Ghan <rishi.ghan@gmail.com>
This commit is contained in:
73
src/server/utils/fs.utils.ts
Normal file
73
src/server/utils/fs.utils.ts
Normal file
@@ -0,0 +1,73 @@
|
||||
import unrarer from "node-unrar-js";
|
||||
import { default as unzipper } from "unzipper";
|
||||
const etl = require("etl");
|
||||
const Walk = require("@root/walk");
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { logger } from "./logger.utils";
|
||||
import { IFolderData } from "../interfaces/folder.interface";
|
||||
|
||||
export const unrar = async (filePath) => {
|
||||
const buf = Uint8Array.from(
|
||||
fs.readFileSync("./comics/The Squidder (2015) (Digital-Empire).cbr"),
|
||||
).buffer;
|
||||
const extractor = await unrarer.createExtractorFromData({ data: buf });
|
||||
const list = extractor.getFileList();
|
||||
const fileHeaders = [...list.fileHeaders];
|
||||
const extracted = extractor.extract({ files: [fileHeaders[0].name] });
|
||||
const files = [...extracted.files]; //load the files
|
||||
return files[0];
|
||||
};
|
||||
|
||||
export const unzip = () => {
|
||||
fs.createReadStream("./comics/30 Days of Night 01-003.cbz")
|
||||
.pipe(unzipper.ParseOne())
|
||||
.pipe(etl.toFile("./comics/covers/cover.jpg"))
|
||||
.promise()
|
||||
.then(() => {
|
||||
logger.info("done");
|
||||
})
|
||||
.catch((e) => {
|
||||
logger.info("error", e);
|
||||
});
|
||||
};
|
||||
|
||||
export const extractArchive = async (pathName) => {
|
||||
const extractedFile = await unrar("./comics");
|
||||
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]> => {
|
||||
const result: IFolderData[] = [];
|
||||
return await Walk.walk(folder, async (err, pathname, dirent) => {
|
||||
// err is failure to lstat a file or directory
|
||||
// pathname is relative path, including the file or folder name
|
||||
// dirent = { name, isDirectory(), isFile(), isSymbolicLink(), ... }
|
||||
|
||||
if (err) {
|
||||
logger.error("Failed to lstat directory", { error: err });
|
||||
return false;
|
||||
}
|
||||
const walkResult = {
|
||||
name: path.basename(dirent.name, path.extname(dirent.name)),
|
||||
extension: path.extname(dirent.name),
|
||||
containedIn: path.dirname(pathname),
|
||||
isFile: dirent.isFile(),
|
||||
isLink: dirent.isSymbolicLink(),
|
||||
};
|
||||
logger.info(
|
||||
`Scanned ${dirent.name} contained in ${path.dirname(pathname)}`,
|
||||
);
|
||||
result.push(walkResult);
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user