Automatically reconnect to Discord RPC at interval (#996)

* initialize before setActivity
This commit is contained in:
Lyall 2025-07-06 08:34:26 +01:00 committed by GitHub
parent 19c8980784
commit cd2d531c54
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 24 additions and 5 deletions

View file

@ -5,16 +5,20 @@ const FEISHIN_DISCORD_APPLICATION_ID = '1165957668758900787';
let client: Client | null = null; let client: Client | null = null;
const createClient = (clientId?: string) => { const createClient = async (clientId?: string) => {
client = new Client({ client = new Client({
clientId: clientId || FEISHIN_DISCORD_APPLICATION_ID, clientId: clientId || FEISHIN_DISCORD_APPLICATION_ID,
}); });
client.login(); await client.login();
return client; return client;
}; };
const isConnected = () => {
return client?.isConnected;
};
const setActivity = (activity: SetActivity) => { const setActivity = (activity: SetActivity) => {
if (client) { if (client) {
client.user?.setActivity({ client.user?.setActivity({
@ -35,8 +39,12 @@ const quit = () => {
} }
}; };
ipcMain.handle('discord-rpc-initialize', (_event, clientId?: string) => { ipcMain.handle('discord-rpc-initialize', async (_event, clientId?: string) => {
createClient(clientId); await createClient(clientId);
});
ipcMain.handle('discord-rpc-is-connected', () => {
return isConnected();
}); });
ipcMain.handle('discord-rpc-set-activity', (_event, activity: SetActivity) => { ipcMain.handle('discord-rpc-set-activity', (_event, activity: SetActivity) => {
@ -58,6 +66,7 @@ ipcMain.handle('discord-rpc-quit', () => {
export const discordRpc = { export const discordRpc = {
clearActivity, clearActivity,
createClient, createClient,
isConnected,
quit, quit,
setActivity, setActivity,
}; };

View file

@ -6,6 +6,11 @@ const initialize = (clientId: string) => {
return client; return client;
}; };
const isConnected = () => {
const isConnected = ipcRenderer.invoke('discord-rpc-is-connected');
return isConnected;
};
const clearActivity = () => { const clearActivity = () => {
ipcRenderer.invoke('discord-rpc-clear-activity'); ipcRenderer.invoke('discord-rpc-clear-activity');
}; };
@ -21,6 +26,7 @@ const quit = () => {
export const discordRpc = { export const discordRpc = {
clearActivity, clearActivity,
initialize, initialize,
isConnected,
quit, quit,
setActivity, setActivity,
}; };

View file

@ -121,6 +121,10 @@ export const useDiscordRpc = () => {
activity.largeImageKey = 'icon'; activity.largeImageKey = 'icon';
} }
// Initialize if needed
const isConnected = await discordRpc?.isConnected();
if (!isConnected) await discordRpc?.initialize(discordSettings.clientId);
discordRpc?.setActivity(activity); discordRpc?.setActivity(activity);
} }
}, },
@ -129,6 +133,7 @@ export const useDiscordRpc = () => {
discordSettings.showServerImage, discordSettings.showServerImage,
discordSettings.showPaused, discordSettings.showPaused,
generalSettings.lastfmApiKey, generalSettings.lastfmApiKey,
discordSettings.clientId,
lastUniqueId, lastUniqueId,
], ],
); );
@ -136,7 +141,6 @@ export const useDiscordRpc = () => {
useEffect(() => { useEffect(() => {
if (!discordSettings.enabled) return discordRpc?.quit(); if (!discordSettings.enabled) return discordRpc?.quit();
discordRpc?.initialize(discordSettings.clientId);
return () => { return () => {
discordRpc?.quit(); discordRpc?.quit();
}; };