client: Don't fetch the authenticated user once we have them (#35385)

Marshall Bowers created

This PR makes it so we don't keep fetching the authenticated user once
we have them.

Release Notes:

- N/A

Change summary

crates/client/src/cloud/user_store.rs | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)

Detailed changes

crates/client/src/cloud/user_store.rs 🔗

@@ -23,16 +23,23 @@ impl CloudUserStore {
                         };
 
                         if cloud_client.has_credentials() {
-                            if let Some(response) = cloud_client
-                                .get_authenticated_user()
-                                .await
-                                .context("failed to fetch authenticated user")
-                                .log_err()
-                            {
-                                this.update(cx, |this, _cx| {
-                                    this.authenticated_user = Some(Arc::new(response.user));
-                                })
-                                .ok();
+                            let already_fetched_authenticated_user = this
+                                .read_with(cx, |this, _cx| this.authenticated_user().is_some())
+                                .unwrap_or(false);
+
+                            if already_fetched_authenticated_user {
+                                // We already fetched the authenticated user; nothing to do.
+                            } else {
+                                let authenticated_user_result = cloud_client
+                                    .get_authenticated_user()
+                                    .await
+                                    .context("failed to fetch authenticated user");
+                                if let Some(response) = authenticated_user_result.log_err() {
+                                    this.update(cx, |this, _cx| {
+                                        this.authenticated_user = Some(Arc::new(response.user));
+                                    })
+                                    .ok();
+                                }
                             }
                         } else {
                             this.update(cx, |this, _cx| {