WIP: Start on rendering avatars

Antonio Scandurra , Max Brunsfeld , and Nathan Sobo created

Co-Authored-By: Max Brunsfeld <max@zed.dev>
Co-Authored-By: Nathan Sobo <nathan@zed.dev>

Change summary

zed/src/channel.rs   | 2 +-
zed/src/lib.rs       | 1 +
zed/src/main.rs      | 3 ++-
zed/src/test.rs      | 3 ++-
zed/src/user.rs      | 2 +-
zed/src/workspace.rs | 3 +++
6 files changed, 10 insertions(+), 4 deletions(-)

Detailed changes

zed/src/channel.rs 🔗

@@ -443,7 +443,7 @@ impl ChannelMessage {
         message: proto::ChannelMessage,
         user_store: &UserStore,
     ) -> Result<Self> {
-        let sender = user_store.get_user(message.sender_id).await?;
+        let sender = user_store.fetch_user(message.sender_id).await?;
         Ok(ChannelMessage {
             id: message.id,
             body: message.body,

zed/src/lib.rs 🔗

@@ -42,6 +42,7 @@ pub struct AppState {
     pub languages: Arc<language::LanguageRegistry>,
     pub themes: Arc<settings::ThemeRegistry>,
     pub rpc: Arc<rpc::Client>,
+    pub user_store: Arc<user::UserStore>,
     pub fs: Arc<dyn fs::Fs>,
     pub channel_list: ModelHandle<ChannelList>,
 }

zed/src/main.rs 🔗

@@ -43,8 +43,9 @@ fn main() {
             settings_tx: Arc::new(Mutex::new(settings_tx)),
             settings,
             themes,
-            channel_list: cx.add_model(|cx| ChannelList::new(user_store, rpc.clone(), cx)),
+            channel_list: cx.add_model(|cx| ChannelList::new(user_store.clone(), rpc.clone(), cx)),
             rpc,
+            user_store,
             fs: Arc::new(RealFs),
         });
 

zed/src/test.rs 🔗

@@ -170,8 +170,9 @@ pub fn test_app_state(cx: &mut MutableAppContext) -> Arc<AppState> {
         settings,
         themes,
         languages: languages.clone(),
-        channel_list: cx.add_model(|cx| ChannelList::new(user_store, rpc.clone(), cx)),
+        channel_list: cx.add_model(|cx| ChannelList::new(user_store.clone(), rpc.clone(), cx)),
         rpc,
+        user_store,
         fs: Arc::new(RealFs),
     })
 }

zed/src/user.rs 🔗

@@ -36,7 +36,7 @@ impl UserStore {
         Ok(())
     }
 
-    pub async fn get_user(&self, user_id: u64) -> Result<Arc<User>> {
+    pub async fn fetch_user(&self, user_id: u64) -> Result<Arc<User>> {
         if let Some(user) = self.users.lock().get(&user_id).cloned() {
             return Ok(user);
         }

zed/src/workspace.rs 🔗

@@ -10,6 +10,7 @@ use crate::{
     project_browser::ProjectBrowser,
     rpc,
     settings::Settings,
+    user,
     worktree::{File, Worktree},
     AppState,
 };
@@ -341,6 +342,7 @@ pub struct Workspace {
     pub settings: watch::Receiver<Settings>,
     languages: Arc<LanguageRegistry>,
     rpc: Arc<rpc::Client>,
+    user_store: Arc<user::UserStore>,
     fs: Arc<dyn Fs>,
     modal: Option<AnyViewHandle>,
     center: PaneGroup,
@@ -395,6 +397,7 @@ impl Workspace {
             settings: app_state.settings.clone(),
             languages: app_state.languages.clone(),
             rpc: app_state.rpc.clone(),
+            user_store: app_state.user_store.clone(),
             fs: app_state.fs.clone(),
             left_sidebar,
             right_sidebar,