mirror of
				https://github.com/hydralauncher/hydra.git
				synced 2025-03-09 15:40:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { stateManager } from "./state-manager";
 | |
| import { GameStatus, repackers } from "./constants";
 | |
| import {
 | |
|   getNewGOGGames,
 | |
|   getNewRepacksFromCPG,
 | |
|   getNewRepacksFromUser,
 | |
|   getNewRepacksFromXatab,
 | |
|   getNewRepacksFromOnlineFix,
 | |
|   readPipe,
 | |
|   startProcessWatcher,
 | |
|   writePipe,
 | |
| } from "./services";
 | |
| import {
 | |
|   gameRepository,
 | |
|   repackRepository,
 | |
|   repackerFriendlyNameRepository,
 | |
|   steamGameRepository,
 | |
|   userPreferencesRepository,
 | |
| } from "./repository";
 | |
| import { TorrentClient } from "./services/torrent-client";
 | |
| import { Repack } from "./entity";
 | |
| import { Notification } from "electron";
 | |
| import { t } from "i18next";
 | |
| import { In } from "typeorm";
 | |
| 
 | |
| startProcessWatcher();
 | |
| 
 | |
| TorrentClient.startTorrentClient(writePipe.socketPath, readPipe.socketPath);
 | |
| 
 | |
| Promise.all([writePipe.createPipe(), readPipe.createPipe()]).then(async () => {
 | |
|   const game = await gameRepository.findOne({
 | |
|     where: {
 | |
|       status: In([
 | |
|         GameStatus.Downloading,
 | |
|         GameStatus.DownloadingMetadata,
 | |
|         GameStatus.CheckingFiles,
 | |
|       ]),
 | |
|     },
 | |
|     relations: { repack: true },
 | |
|   });
 | |
| 
 | |
|   if (game) {
 | |
|     writePipe.write({
 | |
|       action: "start",
 | |
|       game_id: game.id,
 | |
|       magnet: game.repack.magnet,
 | |
|       save_path: game.downloadPath,
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   readPipe.socket?.on("data", (data) => {
 | |
|     TorrentClient.onSocketData(data);
 | |
|   });
 | |
| });
 | |
| 
 | |
| const track1337xUsers = async (existingRepacks: Repack[]) => {
 | |
|   for (const repacker of repackers) {
 | |
|     await getNewRepacksFromUser(
 | |
|       repacker,
 | |
|       existingRepacks.filter((repack) => repack.repacker === repacker)
 | |
|     );
 | |
|   }
 | |
| };
 | |
| 
 | |
| const checkForNewRepacks = async () => {
 | |
|   const userPreferences = await userPreferencesRepository.findOne({
 | |
|     where: { id: 1 },
 | |
|   });
 | |
| 
 | |
|   const existingRepacks = stateManager.getValue("repacks");
 | |
| 
 | |
|   Promise.allSettled([
 | |
|     getNewGOGGames(
 | |
|       existingRepacks.filter((repack) => repack.repacker === "GOG")
 | |
|     ),
 | |
|     getNewRepacksFromXatab(
 | |
|       existingRepacks.filter((repack) => repack.repacker === "Xatab")
 | |
|     ),
 | |
|     getNewRepacksFromCPG(
 | |
|       existingRepacks.filter((repack) => repack.repacker === "CPG")
 | |
|     ),
 | |
|     getNewRepacksFromOnlineFix(
 | |
|       existingRepacks.filter((repack) => repack.repacker === "onlinefix")
 | |
|     ),
 | |
|     track1337xUsers(existingRepacks),
 | |
|   ]).then(() => {
 | |
|     repackRepository.count().then((count) => {
 | |
|       const total = count - stateManager.getValue("repacks").length;
 | |
| 
 | |
|       if (total > 0 && userPreferences?.repackUpdatesNotificationsEnabled) {
 | |
|         new Notification({
 | |
|           title: t("repack_list_updated", {
 | |
|             ns: "notifications",
 | |
|             lng: userPreferences?.language || "en",
 | |
|           }),
 | |
|           body: t("repack_count", {
 | |
|             ns: "notifications",
 | |
|             lng: userPreferences?.language || "en",
 | |
|             count: total,
 | |
|           }),
 | |
|         }).show();
 | |
|       }
 | |
|     });
 | |
|   });
 | |
| };
 | |
| 
 | |
| const loadState = async () => {
 | |
|   const [friendlyNames, repacks, steamGames] = await Promise.all([
 | |
|     repackerFriendlyNameRepository.find(),
 | |
|     repackRepository.find({
 | |
|       order: {
 | |
|         createdAt: "desc",
 | |
|       },
 | |
|     }),
 | |
|     steamGameRepository.find({
 | |
|       order: {
 | |
|         name: "asc",
 | |
|       },
 | |
|     }),
 | |
|   ]);
 | |
| 
 | |
|   stateManager.setValue("repackersFriendlyNames", friendlyNames);
 | |
|   stateManager.setValue("repacks", repacks);
 | |
|   stateManager.setValue("steamGames", steamGames);
 | |
| 
 | |
|   import("./events");
 | |
| };
 | |
| 
 | |
| loadState().then(() => checkForNewRepacks());
 |