From 17607014a32e4ccfb4b97719b82b9d4f619dcd47 Mon Sep 17 00:00:00 2001 From: Hyblocker Date: Tue, 17 Feb 2026 19:04:19 +0100 Subject: [PATCH 1/2] fix: smarter handling of connecting to discord ipc --- src/client.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/client.rs b/src/client.rs index d4641e4..5a518cb 100644 --- a/src/client.rs +++ b/src/client.rs @@ -40,17 +40,26 @@ fn reconnecting_flag() -> &'static AtomicBool { } // Attempts to reinitialize the Discord IPC client using the stored settings. -async fn reinitialize() { +async fn reinitialize() -> bool { + { + let client_lock = discord_client().read().await; + if client_lock.is_some() { + return true; + } + } + let settings = current_settings().read().await.clone(); match create_discord_client(&settings).await { Ok(client) => { *discord_client().write().await = Some(client); reconnecting_flag().store(false, Ordering::SeqCst); + true } Err(e) => { *discord_client().write().await = None; log::error!("Failed to reinitialize client: {}", e); update_error(&e).await; + false } } } @@ -63,9 +72,14 @@ pub(crate) fn schedule_reconnect() { } tokio::spawn(async move { + sleep(Duration::from_secs(2)).await; + while flag.load(Ordering::SeqCst) { - reinitialize().await; - sleep(Duration::from_secs(5)).await; + if reinitialize().await { + flag.store(false, Ordering::SeqCst); + break; + } + sleep(Duration::from_secs(10)).await; } }); } From c5ae38ec0c6801b788ab9e6f3f853b905da4e3bc Mon Sep 17 00:00:00 2001 From: Hyblocker Date: Tue, 17 Feb 2026 19:04:19 +0100 Subject: [PATCH 2/2] fix: smarter handling of connecting to discord ipc --- src/client.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/client.rs b/src/client.rs index d4641e4..29dc0af 100644 --- a/src/client.rs +++ b/src/client.rs @@ -40,17 +40,26 @@ fn reconnecting_flag() -> &'static AtomicBool { } // Attempts to reinitialize the Discord IPC client using the stored settings. -async fn reinitialize() { +async fn reinitialize() -> bool { + { + let client_lock = discord_client().read().await; + if client_lock.is_some() { + return true; + } + } + let settings = current_settings().read().await.clone(); match create_discord_client(&settings).await { Ok(client) => { *discord_client().write().await = Some(client); reconnecting_flag().store(false, Ordering::SeqCst); + true } Err(e) => { *discord_client().write().await = None; log::error!("Failed to reinitialize client: {}", e); update_error(&e).await; + false } } } @@ -64,8 +73,11 @@ pub(crate) fn schedule_reconnect() { tokio::spawn(async move { while flag.load(Ordering::SeqCst) { - reinitialize().await; - sleep(Duration::from_secs(5)).await; + if reinitialize().await { + flag.store(false, Ordering::SeqCst); + break; + } + sleep(Duration::from_secs(5)).await; } }); }