events: Improve compatibility of generated and stripped plain reply fallback

This commit is contained in:
Kévin Commaille 2023-06-23 11:10:44 +02:00 committed by Kévin Commaille
parent 9b694cdfa8
commit e017e65277
4 changed files with 21 additions and 4 deletions

View File

@ -46,6 +46,8 @@ Improvements:
- Stabilize support for annotations and reactions (MSC2677 / Matrix 1.7)
- Add support for intentional mentions push rules (MSC3952 / Matrix 1.7)
- Stabilize support for VoIP signalling improvements (MSC2746 / Matrix 1.7)
- Make the generated and stripped plain text reply fallback behavior more compatible with most
of the Matrix ecosystem.
# 0.11.3

View File

@ -113,7 +113,7 @@ pub fn plain_and_formatted_reply_body(
) -> (String, String) {
let (quoted, quoted_html) = get_message_quote_fallbacks(original_message);
let plain = format!("{quoted}\n{body}");
let plain = format!("{quoted}\n\n{body}");
let html = match formatted {
Some(formatted) => format!("{quoted_html}{formatted}"),
None => format!("{quoted_html}{}", EscapeHtmlEntities(body)),

View File

@ -71,6 +71,10 @@ pub fn remove_html_reply_fallback(s: &str) -> String {
///
/// [rich reply fallback]: https://spec.matrix.org/latest/client-server-api/#fallbacks-for-rich-replies
pub fn remove_plain_reply_fallback(mut s: &str) -> &str {
if !s.starts_with("> ") {
return s;
}
while s.starts_with("> ") {
if let Some((_line, rest)) = s.split_once('\n') {
s = rest;
@ -79,7 +83,12 @@ pub fn remove_plain_reply_fallback(mut s: &str) -> &str {
}
}
s
// Strip the first line after the fallback if it is empty.
if let Some(rest) = s.strip_prefix('\n') {
rest
} else {
s
}
}
#[cfg(test)]
@ -194,16 +203,18 @@ mod tests {
remove_plain_reply_fallback(
"> <@user:notareal.hs> Replied to on\n\
> two lines\n\
\n\
\n\
This is my reply"
),
"This is my reply"
"\nThis is my reply"
);
assert_eq!(remove_plain_reply_fallback("\n> Not on first line"), "\n> Not on first line");
assert_eq!(
remove_plain_reply_fallback("> <@user:notareal.hs> Previous message\n\n> New quote"),
"\n> New quote"
"> New quote"
);
}
}

View File

@ -282,6 +282,7 @@ fn escape_tags_in_plain_reply_body() {
body,
"\
> <@user:example.org> Usage: cp <source> <destination>\n\
\n\
Usage: rm <path>\
"
);
@ -352,6 +353,7 @@ fn reply_sanitize() {
body,
"\
> <@user:example.org> # This is the first message\n\
\n\
This is the _second_ message\
"
);
@ -379,6 +381,7 @@ fn reply_sanitize() {
body,
"\
> <@user:example.org> This is the _second_ message\n\
\n\
This is **my** reply\
"
);
@ -448,6 +451,7 @@ fn make_replacement_with_reply() {
body,
"\
> <@user:example.org> # This is the first message\n\
\n\
* This is _an edited_ reply.\
"
);