hydra/src/main/services/repack-tracker/cpg-repacks.ts

65 lines
1.8 KiB
TypeScript
Raw Normal View History

2024-04-21 08:26:29 +03:00
import { JSDOM } from "jsdom";
import { Repack } from "@main/entity";
import { requestWebPage, savePage } from "./helpers";
import { logger } from "../logger";
export const getNewRepacksFromCPG = async (
existingRepacks: Repack[] = [],
page = 1
): Promise<void> => {
const data = await requestWebPage(`https://cpgrepacks.site/page/${page}`);
const { window } = new JSDOM(data);
2024-04-29 13:01:34 +03:00
const repacks = [];
2024-04-21 08:26:29 +03:00
try {
Array.from(window.document.querySelectorAll(".post")).forEach(($post) => {
const $title = $post.querySelector(".entry-title");
2024-04-25 22:54:38 +03:00
const uploadDate = $post.querySelector("time")?.getAttribute("datetime");
2024-04-21 08:26:29 +03:00
const $downloadInfo = Array.from(
$post.querySelectorAll(".wp-block-heading")
2024-04-25 22:54:38 +03:00
).find(($heading) => $heading.textContent?.startsWith("Download"));
2024-04-21 08:26:29 +03:00
/* Side note: CPG often misspells "Magnet" as "Magent" */
const $magnet = Array.from($post.querySelectorAll("a")).find(
($a) =>
2024-04-25 22:54:38 +03:00
$a.textContent?.startsWith("Magnet") ||
$a.textContent?.startsWith("Magent")
2024-04-21 08:26:29 +03:00
);
const fileSize = $downloadInfo.textContent
.split("Download link => ")
.at(1);
repacks.push({
title: $title.textContent,
fileSize: fileSize ?? "N/A",
magnet: $magnet.href,
repacker: "CPG",
page,
uploadDate: new Date(uploadDate),
});
});
} catch (err) {
logger.error(err.message, { method: "getNewRepacksFromCPG" });
}
const newRepacks = repacks.filter(
(repack) =>
repack.uploadDate &&
!existingRepacks.some(
(existingRepack) => existingRepack.title === repack.title
)
);
if (!newRepacks.length) return;
await savePage(newRepacks);
return getNewRepacksFromCPG(existingRepacks, page + 1);
};