🔩 Refactoring unzip yet again

This commit is contained in:
2021-04-21 13:01:09 -07:00
parent 5d37c0e269
commit aabaebaa7c
5 changed files with 57 additions and 46 deletions

View File

@@ -1,3 +1,3 @@
export const COMICBOOKINFO_SERVICE_URI = export const COMICBOOKINFO_SERVICE_URI =
"http://localhost:6050/api/comicbookinfo/"; "http://localhost:6050/api/comicbookinfo/";
export const FOLDERUTIL_URI = "http://localhost:3000/walkfolder"; export const FOLDERUTIL_URI = "http://localhost:8050/api/";

View File

@@ -1,11 +1,16 @@
import axios from "axios"; import axios from "axios";
import { IFolderData } from "../interfaces/comicinfo.interfaces"; import { IFolderData } from "../interfaces/comicinfo.interfaces";
import { FOLDERUTIL_URI } from "../../constants/endpoints"; import {
IExtractComicBookCoverErrorResponse,
IExtractedComicBookCoverFile,
IExtractionOptions,
} from "../../../server/interfaces/folder.interface";
import { FS_API_BASE_URI } from "../../constants/endpoints";
export async function folderWalk(): Promise<Array<IFolderData>> { export async function folderWalk(): Promise<Array<IFolderData>> {
return axios return axios
.request<Array<IFolderData>>({ .request<Array<IFolderData>>({
url: FOLDERUTIL_URI, url: FS_API_BASE_URI + "/walkFolder",
transformResponse: (r: string) => JSON.parse(r), transformResponse: (r: string) => JSON.parse(r),
}) })
.then((response) => { .then((response) => {
@@ -14,6 +19,18 @@ export async function folderWalk(): Promise<Array<IFolderData>> {
}); });
} }
export async function extractCoverFromComicBookArchive(
options: IExtractionOptions,
): Promise<
| IExtractedComicBookCoverFile
| IExtractedComicBookCoverFile[]
| IExtractComicBookCoverErrorResponse
> {
return await axios.request({
url: FS_API_BASE_URI + "/getComicCovers",
});
}
export async function foo() { export async function foo() {
return { as: "af" }; return { as: "af" };
} }

View File

@@ -9,11 +9,11 @@ import {
} from "../../utils/fs.utils"; } from "../../utils/fs.utils";
import { Request, Response } from "express"; import { Request, Response } from "express";
router.route("/getComicCovers").get(async (req: Request, res: Response) => { router.route("/getComicCovers").post(async (req: Request, res: Response) => {
const options = { const options = {
name: "Gyo v02 (2004) (Digital) (LostNerevarine-Empire)", name: "Beautiful Darkness (2014) (scan) (Anonymous) (resized)",
extension: ".cbz", extension: ".cbz",
containedIn: "comics/ITOU Junji - Gyo", containedIn: "comics",
isFile: true, isFile: true,
isLink: false, isLink: false,
}; };

View File

@@ -16,6 +16,7 @@ import {
IExtractionOptions, IExtractionOptions,
IFolderData, IFolderData,
} from "../interfaces/folder.interface"; } from "../interfaces/folder.interface";
import { WriteStream } from "node:fs";
export const unrar = async ( export const unrar = async (
extractionOptions: IExtractionOptions, extractionOptions: IExtractionOptions,
@@ -123,7 +124,9 @@ export const extractMetadataFromImage = async (
export const unzip = async ( export const unzip = async (
extractionOptions: IExtractionOptions, extractionOptions: IExtractionOptions,
): Promise< ): Promise<
IExtractedComicBookCoverFile[] | IExtractComicBookCoverErrorResponse | IExtractedComicBookCoverFile[]
| IExtractedComicBookCoverFile
| IExtractComicBookCoverErrorResponse
> => { > => {
const extractedFiles: IExtractedComicBookCoverFile[] = []; const extractedFiles: IExtractedComicBookCoverFile[] = [];
const directoryOptions = { const directoryOptions = {
@@ -136,12 +139,15 @@ export const unzip = async (
"/" + "/" +
extractionOptions.folderDetails.name; extractionOptions.folderDetails.name;
const zip = createReadStream( const inputFilePath =
extractionOptions.folderDetails.containedIn + extractionOptions.folderDetails.containedIn +
"/" + "/" +
extractionOptions.folderDetails.name + extractionOptions.folderDetails.name +
extractionOptions.folderDetails.extension, extractionOptions.folderDetails.extension;
).pipe(unzipper.Parse({ forceStream: true }));
const zip = createReadStream(inputFilePath).pipe(
unzipper.Parse({ forceStream: true }),
);
try { try {
await fse.ensureDir(targetPath, directoryOptions); await fse.ensureDir(targetPath, directoryOptions);
@@ -150,48 +156,36 @@ export const unzip = async (
logger.error(`${error} Couldn't create directory.`); logger.error(`${error} Couldn't create directory.`);
} }
switch (extractionOptions.extractTarget) {
case "all":
for await (const entry of zip) { for await (const entry of zip) {
const fileName = explodePath(entry.path).fileName; const fileName = explodePath(entry.path).fileName;
const size = entry.vars.uncompressedSize; const size = entry.vars.uncompressedSize;
if (fileName !== "" && entry.type !== "Directory") {
if (fileName !== "") {
entry.pipe(createWriteStream(targetPath + "/" + fileName));
}
extractedFiles.push({ extractedFiles.push({
name: fileName, name: fileName,
fileSize: size, fileSize: size,
path: targetPath, path: targetPath,
}); });
}
entry.autodrain(); entry.autodrain();
} }
switch (extractionOptions.extractTarget) {
case "all":
for await (const entry of zip) {
const writeableFileName = explodePath(entry.path).fileName;
entry.pipe(createWriteStream(targetPath + "/" + writeableFileName));
entry.autodrain();
}
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
logger.info(""); logger.info("");
resolve(extractedFiles); resolve(extractedFiles);
}); });
case "cover": case "cover":
for await (const entry of zip) { console.log(zip);
const fileName = explodePath(entry.path).fileName; createWriteStream(targetPath + "/" + extractedFiles[0].name);
return new Promise((resolve, reject) => {
if (fileName !== "" && entry.type !== "Directory") { resolve(extractedFiles[0]);
const size = entry.vars.uncompressedSize;
entry.pipe(createWriteStream(targetPath + "/" + fileName));
extractedFiles.push({
name: fileName,
fileSize: size,
path: targetPath,
});
entry.autodrain();
break;
}
}
return new Promise(async (resolve, reject) => {
logger.info("");
resolve(extractedFiles);
}); });
default: default: