mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-03-09 15:40:26 +00:00
102 lines
2.1 KiB
TypeScript
102 lines
2.1 KiB
TypeScript
import { getSteamGameIconUrl, writePipe } from "@main/services";
|
|
import { gameRepository, repackRepository } from "@main/repository";
|
|
import { GameStatus } from "@main/constants";
|
|
|
|
import { registerEvent } from "../register-event";
|
|
|
|
import type { GameShop } from "@types";
|
|
import { getImageBase64 } from "@main/helpers";
|
|
import { In } from "typeorm";
|
|
|
|
const startGameDownload = async (
|
|
_event: Electron.IpcMainInvokeEvent,
|
|
repackId: number,
|
|
objectID: string,
|
|
title: string,
|
|
gameShop: GameShop,
|
|
downloadPath: string
|
|
) => {
|
|
const [game, repack] = await Promise.all([
|
|
gameRepository.findOne({
|
|
where: {
|
|
objectID,
|
|
},
|
|
}),
|
|
repackRepository.findOne({
|
|
where: {
|
|
id: repackId,
|
|
},
|
|
}),
|
|
]);
|
|
|
|
if (!repack) return;
|
|
|
|
if (game?.status === GameStatus.Downloading) {
|
|
return;
|
|
}
|
|
|
|
writePipe.write({ action: "pause" });
|
|
|
|
await gameRepository.update(
|
|
{
|
|
status: In([
|
|
GameStatus.Downloading,
|
|
GameStatus.DownloadingMetadata,
|
|
GameStatus.CheckingFiles,
|
|
]),
|
|
},
|
|
{ status: GameStatus.Paused }
|
|
);
|
|
|
|
if (game) {
|
|
await gameRepository.update(
|
|
{
|
|
id: game.id,
|
|
},
|
|
{
|
|
status: GameStatus.DownloadingMetadata,
|
|
downloadPath: downloadPath,
|
|
repack: { id: repackId },
|
|
isDeleted: false,
|
|
}
|
|
);
|
|
|
|
writePipe.write({
|
|
action: "start",
|
|
game_id: game.id,
|
|
magnet: repack.magnet,
|
|
save_path: downloadPath,
|
|
});
|
|
|
|
game.status = GameStatus.DownloadingMetadata;
|
|
|
|
return game;
|
|
} else {
|
|
const iconUrl = await getImageBase64(await getSteamGameIconUrl(objectID));
|
|
|
|
const createdGame = await gameRepository.save({
|
|
title,
|
|
iconUrl,
|
|
objectID,
|
|
shop: gameShop,
|
|
status: GameStatus.DownloadingMetadata,
|
|
downloadPath: downloadPath,
|
|
repack: { id: repackId },
|
|
});
|
|
|
|
writePipe.write({
|
|
action: "start",
|
|
game_id: createdGame.id,
|
|
magnet: repack.magnet,
|
|
save_path: downloadPath,
|
|
});
|
|
|
|
const { repack: _, ...rest } = createdGame;
|
|
|
|
return rest;
|
|
}
|
|
};
|
|
|
|
registerEvent(startGameDownload, {
|
|
name: "startGameDownload",
|
|
});
|