Add image avatars to channel messages

This commit is contained in:
Mikayla 2023-10-04 14:04:02 -07:00
parent 7d94b0325f
commit 5074bccae4
No known key found for this signature in database

View file

@ -2,7 +2,7 @@ use crate::{channel_view::ChannelView, ChatPanelSettings};
use anyhow::Result; use anyhow::Result;
use call::ActiveCall; use call::ActiveCall;
use channel::{ChannelChat, ChannelChatEvent, ChannelMessageId, ChannelStore}; use channel::{ChannelChat, ChannelChatEvent, ChannelMessageId, ChannelStore};
use client::Client; use client::{Client, UserStore};
use db::kvp::KEY_VALUE_STORE; use db::kvp::KEY_VALUE_STORE;
use editor::Editor; use editor::Editor;
use feature_flags::{ChannelsAlpha, FeatureFlagAppExt}; use feature_flags::{ChannelsAlpha, FeatureFlagAppExt};
@ -35,6 +35,7 @@ const CHAT_PANEL_KEY: &'static str = "ChatPanel";
pub struct ChatPanel { pub struct ChatPanel {
client: Arc<Client>, client: Arc<Client>,
channel_store: ModelHandle<ChannelStore>, channel_store: ModelHandle<ChannelStore>,
user_store: ModelHandle<UserStore>,
active_chat: Option<(ModelHandle<ChannelChat>, Subscription)>, active_chat: Option<(ModelHandle<ChannelChat>, Subscription)>,
message_list: ListState<ChatPanel>, message_list: ListState<ChatPanel>,
input_editor: ViewHandle<Editor>, input_editor: ViewHandle<Editor>,
@ -78,6 +79,7 @@ impl ChatPanel {
let fs = workspace.app_state().fs.clone(); let fs = workspace.app_state().fs.clone();
let client = workspace.app_state().client.clone(); let client = workspace.app_state().client.clone();
let channel_store = workspace.app_state().channel_store.clone(); let channel_store = workspace.app_state().channel_store.clone();
let user_store = workspace.app_state().user_store.clone();
let input_editor = cx.add_view(|cx| { let input_editor = cx.add_view(|cx| {
let mut editor = Editor::auto_height( let mut editor = Editor::auto_height(
@ -130,6 +132,7 @@ impl ChatPanel {
fs, fs,
client, client,
channel_store, channel_store,
user_store,
active_chat: Default::default(), active_chat: Default::default(),
pending_serialization: Task::ready(None), pending_serialization: Task::ready(None),
message_list, message_list,
@ -352,6 +355,27 @@ impl ChatPanel {
Flex::column() Flex::column()
.with_child( .with_child(
Flex::row() Flex::row()
.with_child(
message
.sender
.avatar
.clone()
.map(|avatar| {
Image::from_data(avatar)
.with_style(theme.collab_panel.channel_avatar)
.into_any()
})
.unwrap_or_else(|| {
Empty::new()
.constrained()
.with_width(
theme.collab_panel.channel_avatar.width.unwrap_or(12.),
)
.into_any()
})
.contained()
.with_margin_right(4.),
)
.with_child( .with_child(
Label::new( Label::new(
message.sender.github_login.clone(), message.sender.github_login.clone(),
@ -386,7 +410,8 @@ impl ChatPanel {
this.remove_message(id, cx); this.remove_message(id, cx);
}) })
.flex_float() .flex_float()
})), }))
.align_children_center(),
) )
.with_child(Text::new(body, style.body.clone())) .with_child(Text::new(body, style.body.clone()))
.contained() .contained()