fix(rpc): discord rpc proper shutdown when launcher closes (#179)

This commit is contained in:
João Pedro Carvalho
2026-08-11 13:30:51 +03:00
committed by GitHub
parent d536a6590b
commit 51a95949ad
2 changed files with 20 additions and 3 deletions
+6 -2
View File
@@ -7,6 +7,7 @@ import { useSkinSync } from "../hooks/useSkinSync";
import { useDiscordRPC } from "../hooks/useDiscordRPC"; import { useDiscordRPC } from "../hooks/useDiscordRPC";
import { useGamepad } from "../hooks/useGamepad"; import { useGamepad } from "../hooks/useGamepad";
import { useUpdateCheck } from "../hooks/useUpdateCheck"; import { useUpdateCheck } from "../hooks/useUpdateCheck";
import RpcService from "../services/RpcService";
interface UIContextType { interface UIContextType {
activeView: string; activeView: string;
@@ -161,8 +162,11 @@ export function LauncherProvider({ children }: { children: React.ReactNode }) {
const setupVisibilityDetection = async () => { const setupVisibilityDetection = async () => {
try { try {
const { listen } = await import("@tauri-apps/api/event"); const { listen } = await import("@tauri-apps/api/event");
const unlistenClose = await listen("tauri://close-requested", () => { const unlistenClose = await listen("tauri://close-requested", async () => {
setIsWindowVisible(false); setIsWindowVisible(false);
if (config.rpcEnabled) {
await RpcService.StopRPC();
}
}); });
const unlistenShow = await listen("tauri://window-shown", () => { const unlistenShow = await listen("tauri://window-shown", () => {
@@ -190,7 +194,7 @@ export function LauncherProvider({ children }: { children: React.ReactNode }) {
}; };
setupVisibilityDetection(); setupVisibilityDetection();
}, []); }, [config.rpcEnabled]);
const uiValue = useMemo(() => ({ const uiValue = useMemo(() => ({
activeView, setActiveView, showIntro, setShowIntro, activeView, setActiveView, showIntro, setShowIntro,
+14 -1
View File
@@ -1,4 +1,4 @@
import { setActivity, start } from "tauri-plugin-drpc"; import { setActivity, start, clearActivity, stop } from "tauri-plugin-drpc";
import { import {
Activity, Activity,
ActivityType, ActivityType,
@@ -72,6 +72,19 @@ class RPC {
console.error("Failed to set RPC activity:", e); console.error("Failed to set RPC activity:", e);
} }
} }
public async StopRPC() {
try {
await clearActivity();
await stop();
} catch (e) {
// no need to handle errors here as the launcher will close anyways!
} finally {
this.initialized = false;
this.initializationPromise = null;
sessionStorage.removeItem("lce_rpc_started");
}
}
} }
export default new RPC(); export default new RPC();