Skip to content

Commit

Permalink
message-row: Add initial support for replies chat
Browse files Browse the repository at this point in the history
  • Loading branch information
alissonlauffer committed Mar 10, 2023
1 parent 9e92459 commit de27f19
Show file tree
Hide file tree
Showing 8 changed files with 42 additions and 9 deletions.
12 changes: 9 additions & 3 deletions src/components/avatar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ impl Avatar {
closure!(|_: Self, item: Option<glib::Object>, title: String| {
item.as_ref()
.and_then(|i| i.downcast_ref::<Chat>())
.filter(|chat| chat.is_own_chat())
.filter(|chat| chat.is_own_chat() || chat.is_replies_chat())
// Workaround for having a blue AdwAvatar for Saved Messages chat
.map(|_| "-".to_string())
.unwrap_or(title)
Expand All @@ -137,9 +137,15 @@ impl Avatar {
>| {
item.as_ref()
.and_then(|i| i.downcast_ref::<Chat>())
.filter(|chat| chat.is_own_chat())
.filter(|chat| chat.is_own_chat() || chat.is_replies_chat())
// Show bookmark icon for Saved Messages chat
.map(|_| "user-bookmarks-symbolic")
.map(|chat| {
if chat.is_replies_chat() {
"mail-reply-sender-symbolic"
} else {
"user-bookmarks-symbolic"
}
})
}));
icon_name_expression.bind(&*imp.avatar, "icon-name", Some(self));

Expand Down
2 changes: 2 additions & 0 deletions src/expressions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ pub(crate) fn chat_display_name(chat_expression: &gtk::Expression) -> gtk::Expre
let is_deleted = args[3].get::<bool>().unwrap();
if chat.is_own_chat() {
gettext("Saved Messages")
} else if chat.is_replies_chat() {
gettext("Replies")
} else if is_deleted {
gettext("Deleted Account")
} else {
Expand Down
8 changes: 8 additions & 0 deletions src/session/content/chat_action_bar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -760,6 +760,14 @@ impl ChatActionBar {
imp.action_bar_stack.set_visible_child_name("entry");
} else if is_blocked {
imp.action_bar_stack.set_visible_child_name("unblock");
} else if chat.is_replies_chat() {
imp.action_bar_stack.set_visible_child_name("mute");

if self.is_chat_muted() {
imp.mute_button.set_label(&gettext("Unmute"));
} else {
imp.mute_button.set_label(&gettext("Mute"));
}
} else {
imp.action_bar_stack.set_visible_child_name("entry");
}
Expand Down
17 changes: 15 additions & 2 deletions src/session/content/message_row/bubble.rs
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ impl MessageBubble {

let show_sender = if force_hide_sender {
None
} else if message.chat().is_own_chat() {
} else if message.chat().is_own_chat() || message.chat().is_replies_chat() {
if message.is_outgoing() {
None
} else {
Expand All @@ -197,10 +197,23 @@ impl MessageBubble {
None
};

let message_chat = if message.chat().is_replies_chat() {
if let Some(f) = message.forward_info() {
(f.origin().id().unwrap() != 0)
.then(|| message.chat().session().try_chat(f.origin().id().unwrap()))
.unwrap()
} else {
None
}
} else {
Some(message.chat())
}
.unwrap_or(message.chat());

// Handle MessageReply
if message.reply_to_message_id() != 0 {
let reply = MessageReply::new(
message.chat(),
message_chat,
message.reply_to_message_id(),
message.is_outgoing(),
);
Expand Down
4 changes: 2 additions & 2 deletions src/session/content/message_row/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ impl MessageRow {
if let Some(message) = message.downcast_ref::<Message>() {
let show_avatar = if message.is_outgoing() {
false
} else if message.chat().is_own_chat() {
} else if message.chat().is_own_chat() || message.chat().is_replies_chat() {
message.forward_info().is_some()
} else {
match message.chat().type_() {
Expand Down Expand Up @@ -241,7 +241,7 @@ impl MessageRow {
}
};

if message.chat().is_own_chat() {
if message.chat().is_own_chat() || message.chat().is_replies_chat() {
match message.forward_info().unwrap().origin() {
MessageForwardOrigin::User(user) => {
avatar.set_custom_text(None);
Expand Down
2 changes: 1 addition & 1 deletion src/session/sidebar/row.rs
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,7 @@ fn sender_label(message: Message) -> Option<String> {
_ => return None,
}

if message.chat().is_own_chat() {
if message.chat().is_own_chat() || message.chat().is_replies_chat() {
if message.is_outgoing() {
None
} else {
Expand Down
4 changes: 4 additions & 0 deletions src/tdlib/chat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,10 @@ impl Chat {
self.type_().user() == Some(&self.session().me())
}

pub(crate) fn is_replies_chat(&self) -> bool {
self.id() == 1271266957 || self.id() == 708513
}

pub(crate) fn permissions(&self) -> BoxedChatPermissions {
self.imp().permissions.borrow().to_owned().unwrap()
}
Expand Down
2 changes: 1 addition & 1 deletion src/tdlib/message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,7 @@ impl Message {
}

pub(crate) fn sender_display_name_expression(&self) -> gtk::Expression {
if self.chat().is_own_chat() {
if self.chat().is_own_chat() || self.chat().is_replies_chat() {
self.forward_info()
.map(MessageForwardInfo::origin)
.map(|forward_origin| match forward_origin {
Expand Down

0 comments on commit de27f19

Please sign in to comment.