Update chat panel with current channel

Conrad Irwin created

Change summary

crates/call/src/call.rs            |  2 ++
crates/call/src/room.rs            |  3 +++
crates/collab_ui/src/chat_panel.rs | 14 +++++++++++++-
3 files changed, 18 insertions(+), 1 deletion(-)

Detailed changes

crates/call/src/call.rs 🔗

@@ -442,6 +442,8 @@ impl ActiveCall {
                         .location
                         .as_ref()
                         .and_then(|location| location.upgrade());
+                    let channel_id = room.update(cx, |room, cx| room.channel_id());
+                    cx.emit(Event::RoomJoined { channel_id });
                     room.update(cx, |room, cx| room.set_location(location.as_ref(), cx))
                 }
             } else {

crates/call/src/room.rs 🔗

@@ -26,6 +26,9 @@ pub const RECONNECT_TIMEOUT: Duration = Duration::from_secs(30);
 
 #[derive(Clone, Debug, PartialEq, Eq)]
 pub enum Event {
+    RoomJoined {
+        channel_id: Option<u64>,
+    },
     ParticipantLocationChanged {
         participant_id: proto::PeerId,
     },

crates/collab_ui/src/chat_panel.rs 🔗

@@ -1,6 +1,6 @@
 use crate::{channel_view::ChannelView, is_channels_feature_enabled, ChatPanelSettings};
 use anyhow::Result;
-use call::ActiveCall;
+use call::{room, ActiveCall};
 use channel::{ChannelChat, ChannelChatEvent, ChannelMessageId, ChannelStore};
 use client::Client;
 use collections::HashMap;
@@ -140,6 +140,18 @@ impl ChatPanel {
                     cx.notify();
                 },
             ));
+            this.subscriptions.push(cx.subscribe(
+                &ActiveCall::global(cx),
+                move |this: &mut Self, _, event: &room::Event, cx| match event {
+                    room::Event::RoomJoined { channel_id } => {
+                        if let Some(channel_id) = channel_id {
+                            this.select_channel(*channel_id, None, cx)
+                                .detach_and_log_err(cx)
+                        }
+                    }
+                    _ => {}
+                },
+            ));
 
             this
         })