mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-03-09 15:40:26 +00:00
78 lines
2.2 KiB
TypeScript
78 lines
2.2 KiB
TypeScript
import { JSDOM, VirtualConsole } from "jsdom";
|
|
import { GameRepackInput, requestWebPage, savePage } from "./helpers";
|
|
import { Repack } from "@main/entity";
|
|
import { logger } from "../logger";
|
|
|
|
const virtualConsole = new VirtualConsole();
|
|
|
|
const getGOGGame = async (url: string) => {
|
|
const data = await requestWebPage(url);
|
|
const { window } = new JSDOM(data, { virtualConsole });
|
|
|
|
const $modifiedTime = window.document.querySelector(
|
|
'[property="article:modified_time"]'
|
|
) as HTMLMetaElement;
|
|
|
|
const $em = window.document.querySelector(
|
|
"p:not(.lightweight-accordion *) em"
|
|
);
|
|
const fileSize = $em.textContent.split("Size: ").at(1);
|
|
const $downloadButton = window.document.querySelector(
|
|
".download-btn:not(.lightweight-accordion *)"
|
|
) as HTMLAnchorElement;
|
|
|
|
const { searchParams } = new URL($downloadButton.href);
|
|
const magnet = Buffer.from(searchParams.get("url"), "base64").toString(
|
|
"utf-8"
|
|
);
|
|
|
|
return {
|
|
fileSize: fileSize ?? "N/A",
|
|
uploadDate: new Date($modifiedTime.content),
|
|
repacker: "GOG",
|
|
magnet,
|
|
page: 1,
|
|
};
|
|
};
|
|
|
|
export const getNewGOGGames = async (existingRepacks: Repack[] = []) => {
|
|
try {
|
|
const data = await requestWebPage(
|
|
"https://freegogpcgames.com/a-z-games-list/"
|
|
);
|
|
|
|
const { window } = new JSDOM(data, { virtualConsole });
|
|
|
|
const $uls = Array.from(window.document.querySelectorAll(".az-columns"));
|
|
|
|
for (const $ul of $uls) {
|
|
const repacks: GameRepackInput[] = [];
|
|
const $lis = Array.from($ul.querySelectorAll("li"));
|
|
|
|
for (const $li of $lis) {
|
|
const $a = $li.querySelector("a");
|
|
const href = $a.href;
|
|
|
|
const title = $a.textContent.trim();
|
|
|
|
const gameExists = existingRepacks.some(
|
|
(existingRepack) => existingRepack.title === title
|
|
);
|
|
|
|
if (!gameExists) {
|
|
try {
|
|
const game = await getGOGGame(href);
|
|
|
|
repacks.push({ ...game, title });
|
|
} catch (err) {
|
|
logger.error(err.message, { method: "getGOGGame", url: href });
|
|
}
|
|
}
|
|
}
|
|
|
|
if (repacks.length) await savePage(repacks);
|
|
}
|
|
} catch (err) {
|
|
logger.error(err.message, { method: "getNewGOGGames" });
|
|
}
|
|
};
|