From 0ddd756abf35f5cbd6eaa4218775f237f9cceadc Mon Sep 17 00:00:00 2001 From: videogame hacker Date: Mon, 13 Sep 2021 20:50:13 +0100 Subject: [PATCH] Strip from matrix HTML conversion This is handled by rich replies --- src/message_ast/convert_matrix.rs | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/message_ast/convert_matrix.rs b/src/message_ast/convert_matrix.rs index 5d0ef07..32eed15 100644 --- a/src/message_ast/convert_matrix.rs +++ b/src/message_ast/convert_matrix.rs @@ -12,12 +12,21 @@ pub fn convert_matrix(message: &str) -> MessageContent { let mut parents = vec![]; let mut components = vec![]; - let mut skip_text = false; + let mut skip_text = 0; + let mut skip_all = 0; for edge in dom.traverse() { match edge { NodeEdge::Start(node) => { if let NodeData::Element(element) = node.data() { + if element.name.local == *"mx-reply" { + skip_all += 1; + } + + if skip_all > 0 { + continue; + } + if element.name.ns == ns!(html) { match element.name.local { local_name!("strong") @@ -41,7 +50,7 @@ pub fn convert_matrix(message: &str) -> MessageContent { } local_name!("code") => { - skip_text = true; + skip_text += 1; } _ => {} @@ -52,12 +61,20 @@ pub fn convert_matrix(message: &str) -> MessageContent { NodeEdge::End(node) => match node.data() { NodeData::Text(text) => { - if !skip_text { + if skip_text <= 0 && skip_all <= 0 { let text = text.borrow().lines().collect::>().join(" "); components.push(MessageComponent::Plain(text)); } } NodeData::Element(element) => { + if element.name.local == *"mx-reply" { + skip_all -= 1; + } + + if skip_all > 0 { + continue; + } + macro_rules! construct_component { ($f:expr) => {{ let component_type = $f; @@ -142,7 +159,7 @@ pub fn convert_matrix(message: &str) -> MessageContent { MessageComponent::Code(node.text_contents()) }); - skip_text = false; + skip_text -= 1; } _ => {} }