[fractal/fractal-next] content: Simplify text messages code
- From: Julian Sparber <jsparber src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [fractal/fractal-next] content: Simplify text messages code
- Date: Wed, 3 Nov 2021 15:55:15 +0000 (UTC)
commit df7ece4725674344bc024827cd2595a73605f7a7
Author: Kévin Commaille <zecakeh tedomum fr>
Date: Tue Nov 2 19:02:36 2021 +0100
content: Simplify text messages code
Avoid duplication of code and use simpler names for methods
src/session/content/message_row.rs | 86 ++++++++++++++++----------------------
1 file changed, 37 insertions(+), 49 deletions(-)
---
diff --git a/src/session/content/message_row.rs b/src/session/content/message_row.rs
index 27afc22a..168336a7 100644
--- a/src/session/content/message_row.rs
+++ b/src/session/content/message_row.rs
@@ -239,7 +239,6 @@ impl MessageRow {
}
fn update_content(&self, event: &Event) {
- let priv_ = imp::MessageRow::from_instance(self);
let content = self.find_content(event);
// TODO: create widgets for all event types
@@ -264,45 +263,34 @@ impl MessageRow {
message.body
};
// TODO we need to bind the display name to the sender
- self.show_label_with_markup(&format!(
- "<b>{}</b> {}",
- event.sender().display_name(),
- text
- ));
+ self.show_text(
+ &format!("<b>{}</b> {}", event.sender().display_name(), text),
+ true,
+ );
}
MessageType::File(_message) => {}
MessageType::Image(_message) => {}
MessageType::Location(_message) => {}
MessageType::Notice(message) => {
// TODO: we should reuse the already present child widgets when possible
- let child = if let Some(html_blocks) =
- parse_formatted_body(message.formatted.as_ref())
+ if let Some(html_blocks) = parse_formatted_body(message.formatted.as_ref())
{
- create_widget_for_html_message(html_blocks)
+ self.show_html(html_blocks);
} else {
- let child = gtk::Label::new(Some(&message.body));
- set_label_styles(&child);
- child.upcast::<gtk::Widget>()
+ self.show_text(&message.body, true)
};
-
- priv_.content.set_child(Some(&child));
}
MessageType::ServerNotice(message) => {
- self.show_label_with_text(&message.body);
+ self.show_text(&message.body, false);
}
MessageType::Text(message) => {
// TODO: we should reuse the already present child widgets when possible
- let child = if let Some(html_blocks) =
- parse_formatted_body(message.formatted.as_ref())
+ if let Some(html_blocks) = parse_formatted_body(message.formatted.as_ref())
{
- create_widget_for_html_message(html_blocks)
+ self.show_html(html_blocks);
} else {
- let child = gtk::Label::new(Some(&message.body));
- set_label_styles(&child);
- child.upcast::<gtk::Widget>()
+ self.show_text(&message.body, false)
};
-
- priv_.content.set_child(Some(&child));
}
MessageType::Video(_message) => {}
MessageType::VerificationRequest(_message) => {}
@@ -313,35 +301,44 @@ impl MessageRow {
}
Some(AnyMessageEventContent::RoomEncrypted(content)) => {
warn!("Couldn't decrypt event {:?}", content);
- self.show_label_with_text(&gettext("Fractal couldn't decrypt this message."))
+ self.show_text(&gettext("Fractal couldn't decrypt this message."), false)
}
Some(AnyMessageEventContent::RoomRedaction(_)) => {
- self.show_label_with_text(&gettext("This message was removed."))
+ self.show_text(&gettext("This message was removed."), false)
}
- _ => self.show_label_with_text(&gettext("Unsupported event")),
+ _ => self.show_text(&gettext("Unsupported event"), false),
}
}
- fn show_label_with_text(&self, text: &str) {
+ fn show_text(&self, text: &str, use_markup: bool) {
let priv_ = imp::MessageRow::from_instance(self);
- if let Some(Ok(child)) = priv_.content.child().map(|w| w.downcast::<gtk::Label>()) {
- child.set_text(text);
+
+ let child =
+ if let Some(Ok(child)) = priv_.content.child().map(|w| w.downcast::<gtk::Label>()) {
+ child
+ } else {
+ let child = gtk::Label::new(None);
+ set_label_styles(&child);
+ priv_.content.set_child(Some(&child));
+ child
+ };
+
+ if use_markup {
+ child.set_markup(text);
} else {
- let child = gtk::Label::new(Some(text));
- set_label_styles(&child);
- priv_.content.set_child(Some(&child));
+ child.set_text(text);
}
}
- fn show_label_with_markup(&self, text: &str) {
+ fn show_html(&self, blocks: Vec<HtmlBlock>) {
let priv_ = imp::MessageRow::from_instance(self);
- if let Some(Ok(child)) = priv_.content.child().map(|w| w.downcast::<gtk::Label>()) {
- child.set_markup(text);
- } else {
- let child = gtk::Label::new(None);
- child.set_markup(text);
- set_label_styles(&child);
- priv_.content.set_child(Some(&child));
+
+ let child = gtk::Box::new(gtk::Orientation::Vertical, 6);
+ priv_.content.set_child(Some(&child));
+
+ for block in blocks {
+ let widget = create_widget_for_html_block(&block);
+ child.append(&widget);
}
}
}
@@ -353,15 +350,6 @@ fn parse_formatted_body(formatted: Option<&FormattedBody>) -> Option<Vec<HtmlBlo
.and_then(|formatted| markup_html(&formatted.body).ok())
}
-fn create_widget_for_html_message(blocks: Vec<HtmlBlock>) -> gtk::Widget {
- let container = gtk::Box::new(gtk::Orientation::Vertical, 6);
- for block in blocks {
- let widget = create_widget_for_html_block(&block);
- container.append(&widget);
- }
- container.upcast::<gtk::Widget>()
-}
-
fn set_label_styles(w: >k::Label) {
w.set_wrap(true);
w.set_wrap_mode(pango::WrapMode::WordChar);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]