Auto-connect to server on startup if credentials are on the keychain

Antonio Scandurra created

Change summary

crates/client/src/client.rs |  4 ++++
crates/zed/src/main.rs      | 10 ++++++++++
2 files changed, 14 insertions(+)

Detailed changes

crates/client/src/client.rs 🔗

@@ -356,6 +356,10 @@ impl Client {
         }
     }
 
+    pub fn has_keychain_credentials(&self, cx: &AsyncAppContext) -> bool {
+        read_credentials_from_keychain(cx).is_some()
+    }
+
     #[async_recursion(?Send)]
     pub async fn authenticate_and_connect(
         self: &Arc<Self>,

crates/zed/src/main.rs 🔗

@@ -61,6 +61,16 @@ fn main() {
         chat_panel::init(cx);
         project_panel::init(cx);
         diagnostics::init(cx);
+        cx.spawn({
+            let client = client.clone();
+            |cx| async move {
+                if client.has_keychain_credentials(&cx) {
+                    client.authenticate_and_connect(&cx).await?;
+                }
+                Ok::<_, anyhow::Error>(())
+            }
+        })
+        .detach_and_log_err(cx);
 
         let app_state = Arc::new(AppState {
             languages: languages.clone(),