diff --git a/src/main/features/core/discord-rpc/index.ts b/src/main/features/core/discord-rpc/index.ts index 22737f4f..a94c7526 100644 --- a/src/main/features/core/discord-rpc/index.ts +++ b/src/main/features/core/discord-rpc/index.ts @@ -5,16 +5,20 @@ const FEISHIN_DISCORD_APPLICATION_ID = '1165957668758900787'; let client: Client | null = null; -const createClient = (clientId?: string) => { +const createClient = async (clientId?: string) => { client = new Client({ clientId: clientId || FEISHIN_DISCORD_APPLICATION_ID, }); - client.login(); + await client.login(); return client; }; +const isConnected = () => { + return client?.isConnected; +}; + const setActivity = (activity: SetActivity) => { if (client) { client.user?.setActivity({ @@ -35,8 +39,12 @@ const quit = () => { } }; -ipcMain.handle('discord-rpc-initialize', (_event, clientId?: string) => { - createClient(clientId); +ipcMain.handle('discord-rpc-initialize', async (_event, clientId?: string) => { + await createClient(clientId); +}); + +ipcMain.handle('discord-rpc-is-connected', () => { + return isConnected(); }); ipcMain.handle('discord-rpc-set-activity', (_event, activity: SetActivity) => { @@ -58,6 +66,7 @@ ipcMain.handle('discord-rpc-quit', () => { export const discordRpc = { clearActivity, createClient, + isConnected, quit, setActivity, }; diff --git a/src/preload/discord-rpc.ts b/src/preload/discord-rpc.ts index 560a20f2..5490aef6 100644 --- a/src/preload/discord-rpc.ts +++ b/src/preload/discord-rpc.ts @@ -6,6 +6,11 @@ const initialize = (clientId: string) => { return client; }; +const isConnected = () => { + const isConnected = ipcRenderer.invoke('discord-rpc-is-connected'); + return isConnected; +}; + const clearActivity = () => { ipcRenderer.invoke('discord-rpc-clear-activity'); }; @@ -21,6 +26,7 @@ const quit = () => { export const discordRpc = { clearActivity, initialize, + isConnected, quit, setActivity, }; diff --git a/src/renderer/features/discord-rpc/use-discord-rpc.ts b/src/renderer/features/discord-rpc/use-discord-rpc.ts index 7c1993af..d518e3ca 100644 --- a/src/renderer/features/discord-rpc/use-discord-rpc.ts +++ b/src/renderer/features/discord-rpc/use-discord-rpc.ts @@ -121,6 +121,10 @@ export const useDiscordRpc = () => { activity.largeImageKey = 'icon'; } + // Initialize if needed + const isConnected = await discordRpc?.isConnected(); + if (!isConnected) await discordRpc?.initialize(discordSettings.clientId); + discordRpc?.setActivity(activity); } }, @@ -129,6 +133,7 @@ export const useDiscordRpc = () => { discordSettings.showServerImage, discordSettings.showPaused, generalSettings.lastfmApiKey, + discordSettings.clientId, lastUniqueId, ], ); @@ -136,7 +141,6 @@ export const useDiscordRpc = () => { useEffect(() => { if (!discordSettings.enabled) return discordRpc?.quit(); - discordRpc?.initialize(discordSettings.clientId); return () => { discordRpc?.quit(); };