mirror of
https://github.com/LCE-Hub/LCE-Emerald-Launcher.git
synced 2026-07-19 16:57:17 +00:00
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import { useEffect } from "react";
|
|
import RpcService from "../services/RpcService";
|
|
import type { Edition } from "../types/edition";
|
|
interface DiscordRPCProps {
|
|
rpcEnabled: boolean;
|
|
showIntro: boolean;
|
|
username: string;
|
|
profile: string;
|
|
activeView: string;
|
|
isGameRunning: boolean;
|
|
isWindowVisible: boolean;
|
|
downloadProgress: number | null;
|
|
downloadingId: string | null;
|
|
editions: Edition[];
|
|
}
|
|
|
|
export function useDiscordRPC({
|
|
rpcEnabled,
|
|
showIntro,
|
|
username,
|
|
profile,
|
|
activeView,
|
|
isGameRunning,
|
|
isWindowVisible,
|
|
downloadProgress,
|
|
downloadingId,
|
|
editions,
|
|
}: DiscordRPCProps) {
|
|
useEffect(() => {
|
|
const updateRPC = async () => {
|
|
if (!rpcEnabled || showIntro || !username) return;
|
|
if (!isWindowVisible && !isGameRunning && downloadProgress === null)
|
|
return;
|
|
|
|
const version = editions.find((e) => e.id === profile);
|
|
const versionName = version ? version.name : "Unknown Version";
|
|
let details = "In Menus";
|
|
let state = isGameRunning
|
|
? `Playing as ${username}`
|
|
: `Logged in as ${username}`;
|
|
|
|
if (isGameRunning) {
|
|
details = `Playing ${versionName}`;
|
|
} else if (downloadProgress !== null) {
|
|
const downloadingName =
|
|
editions.find((e) => e.id === downloadingId)?.name || "Game Files";
|
|
details = `Downloading ${downloadingName} (${downloadProgress.toFixed(0)}%)`;
|
|
} else {
|
|
const tabNames: Record<string, string> = {
|
|
main: "Main Menu",
|
|
versions: "Selecting Version",
|
|
settings: "In Settings",
|
|
devtools: "Developing for LCE",
|
|
skins: "Changing Skins",
|
|
workshop: "Browsing Workshop",
|
|
lcelive: "Browsing Friends",
|
|
"pck-editor": "Editing a PCK file",
|
|
"options-editor": "Editing Options Files",
|
|
"arc-editor": "Editing an ARC file",
|
|
"loc-editor": "Editing Localisation Files",
|
|
screenshots: "Browsing Screenshots",
|
|
"col-editor": "Editing Color Files",
|
|
"grf-editor": "Editing Game Rules",
|
|
"swf-editor": "Editing Game UI",
|
|
};
|
|
details = tabNames[activeView] || "In Menus";
|
|
}
|
|
|
|
await RpcService.updateActivity(details, state, isGameRunning);
|
|
};
|
|
|
|
updateRPC();
|
|
}, [
|
|
rpcEnabled,
|
|
showIntro,
|
|
username,
|
|
profile,
|
|
activeView,
|
|
isGameRunning,
|
|
isWindowVisible,
|
|
Math.floor(downloadProgress || 0),
|
|
downloadingId,
|
|
editions,
|
|
]);
|
|
}
|