mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-03-09 15:40:26 +00:00
58 lines
1.4 KiB
TypeScript
58 lines
1.4 KiB
TypeScript
import { gameRepository } from "@main/repository";
|
|
import { generateYML } from "../helpers/generate-lutris-yaml";
|
|
import path from "node:path";
|
|
import fs from "node:fs";
|
|
import { writeFile } from "node:fs/promises";
|
|
import { spawnSync, exec } from "node:child_process";
|
|
|
|
import { registerEvent } from "../register-event";
|
|
import { shell } from "electron";
|
|
import { getDownloadsPath } from "../helpers/get-downloads-path";
|
|
|
|
const openGameInstaller = async (
|
|
_event: Electron.IpcMainInvokeEvent,
|
|
gameId: number
|
|
) => {
|
|
const game = await gameRepository.findOne({ where: { id: gameId } });
|
|
|
|
if (!game) return true;
|
|
|
|
const gamePath = path.join(
|
|
game.downloadPath ?? (await getDownloadsPath()),
|
|
game.folderName
|
|
);
|
|
|
|
if (!fs.existsSync(gamePath)) {
|
|
await gameRepository.delete({ id: gameId });
|
|
return true;
|
|
}
|
|
|
|
const setupPath = path.join(gamePath, "setup.exe");
|
|
if (!fs.existsSync(setupPath)) {
|
|
shell.openPath(gamePath);
|
|
return true;
|
|
}
|
|
|
|
if (process.platform === "win32") {
|
|
shell.openPath(setupPath);
|
|
return true;
|
|
}
|
|
|
|
if (spawnSync("which", ["lutris"]).status === 0) {
|
|
const ymlPath = path.join(gamePath, "setup.yml");
|
|
await writeFile(ymlPath, generateYML(game));
|
|
exec(`lutris --install "${ymlPath}"`);
|
|
return true;
|
|
}
|
|
|
|
if (spawnSync("which", ["wine"]).status === 0) {
|
|
exec(`wine "${setupPath}"`);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
};
|
|
|
|
registerEvent(openGameInstaller, {
|
|
name: "openGameInstaller",
|
|
});
|