mirror of
https://github.com/chatmail/core.git
synced 2026-05-20 15:26:30 +03:00
fix: remove footers from "Show Full Message..."
This commit is contained in:
@@ -283,7 +283,6 @@ mod tests {
|
|||||||
<meta name="color-scheme" content="light dark" />
|
<meta name="color-scheme" content="light dark" />
|
||||||
</head><body>
|
</head><body>
|
||||||
This message does not have Content-Type nor Subject.<br/>
|
This message does not have Content-Type nor Subject.<br/>
|
||||||
<br/>
|
|
||||||
</body></html>
|
</body></html>
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
@@ -302,7 +301,6 @@ This message does not have Content-Type nor Subject.<br/>
|
|||||||
<meta name="color-scheme" content="light dark" />
|
<meta name="color-scheme" content="light dark" />
|
||||||
</head><body>
|
</head><body>
|
||||||
message with a non-UTF-8 encoding: äöüßÄÖÜ<br/>
|
message with a non-UTF-8 encoding: äöüßÄÖÜ<br/>
|
||||||
<br/>
|
|
||||||
</body></html>
|
</body></html>
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
@@ -325,7 +323,6 @@ This line ends with a space and will be merged with the next one due to format=f
|
|||||||
<br/>
|
<br/>
|
||||||
This line does not end with a space<br/>
|
This line does not end with a space<br/>
|
||||||
and will be wrapped as usual.<br/>
|
and will be wrapped as usual.<br/>
|
||||||
<br/>
|
|
||||||
</body></html>
|
</body></html>
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
@@ -347,7 +344,6 @@ mime-modified should not be set set as there is no html and no special stuff;<br
|
|||||||
although not being a delta-message.<br/>
|
although not being a delta-message.<br/>
|
||||||
test some special html-characters as < > and & but also " and ' :)<br/>
|
test some special html-characters as < > and & but also " and ' :)<br/>
|
||||||
<br/>
|
<br/>
|
||||||
<br/>
|
|
||||||
</body></html>
|
</body></html>
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3708,6 +3708,28 @@ On 2020-10-25, Bob wrote:
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Tests that sender status (signature) does not appear
|
||||||
|
/// in HTML view of a long message.
|
||||||
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||||
|
async fn test_large_message_no_signature() -> Result<()> {
|
||||||
|
let mut tcm = TestContextManager::new();
|
||||||
|
let alice = &tcm.alice().await;
|
||||||
|
let bob = &tcm.bob().await;
|
||||||
|
|
||||||
|
alice
|
||||||
|
.set_config(Config::Selfstatus, Some("Some signature"))
|
||||||
|
.await?;
|
||||||
|
let chat = alice.create_chat(bob).await;
|
||||||
|
let txt = "Hello!\n".repeat(500);
|
||||||
|
let sent = alice.send_text(chat.id, &txt).await;
|
||||||
|
let msg = bob.recv_msg(&sent).await;
|
||||||
|
|
||||||
|
assert_eq!(msg.has_html(), true);
|
||||||
|
let html = msg.id.get_html(bob).await?.unwrap();
|
||||||
|
assert_eq!(html.contains("Some signature"), false);
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
||||||
async fn test_x_microsoft_original_message_id() {
|
async fn test_x_microsoft_original_message_id() {
|
||||||
let t = TestContext::new_alice().await;
|
let t = TestContext::new_alice().await;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
|
|
||||||
use crate::simplify::split_lines;
|
use crate::simplify::remove_message_footer;
|
||||||
|
|
||||||
/// Plaintext message body together with format=flowed attributes.
|
/// Plaintext message body together with format=flowed attributes.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
@@ -32,7 +32,8 @@ impl PlainText {
|
|||||||
regex::Regex::new(r"\b((http|https|ftp|ftps):[\w.,:;$/@!?&%\-~=#+]+)").unwrap()
|
regex::Regex::new(r"\b((http|https|ftp|ftps):[\w.,:;$/@!?&%\-~=#+]+)").unwrap()
|
||||||
});
|
});
|
||||||
|
|
||||||
let lines = split_lines(&self.text);
|
let lines: Vec<&str> = self.text.lines().collect();
|
||||||
|
let (lines, _footer) = remove_message_footer(&lines);
|
||||||
|
|
||||||
let mut ret = r#"<!DOCTYPE html>
|
let mut ret = r#"<!DOCTYPE html>
|
||||||
<html><head>
|
<html><head>
|
||||||
@@ -136,7 +137,28 @@ line 1<br/>
|
|||||||
line 2<br/>
|
line 2<br/>
|
||||||
line with <a href="https://link-mid-of-line.org">https://link-mid-of-line.org</a> and <a href="http://link-end-of-line.com/file?foo=bar%20">http://link-end-of-line.com/file?foo=bar%20</a><br/>
|
line with <a href="https://link-mid-of-line.org">https://link-mid-of-line.org</a> and <a href="http://link-end-of-line.com/file?foo=bar%20">http://link-end-of-line.com/file?foo=bar%20</a><br/>
|
||||||
<a href="http://link-at-start-of-line.org">http://link-at-start-of-line.org</a><br/>
|
<a href="http://link-at-start-of-line.org">http://link-at-start-of-line.org</a><br/>
|
||||||
<br/>
|
</body></html>
|
||||||
|
"#
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_plain_remove_signature() {
|
||||||
|
let html = PlainText {
|
||||||
|
text: "Foo\nbar\n-- \nSignature here".to_string(),
|
||||||
|
flowed: false,
|
||||||
|
delsp: false,
|
||||||
|
}
|
||||||
|
.to_html();
|
||||||
|
assert_eq!(
|
||||||
|
html,
|
||||||
|
r#"<!DOCTYPE html>
|
||||||
|
<html><head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="color-scheme" content="light dark" />
|
||||||
|
</head><body>
|
||||||
|
Foo<br/>
|
||||||
|
bar<br/>
|
||||||
</body></html>
|
</body></html>
|
||||||
"#
|
"#
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -21,7 +21,9 @@ pub fn escape_message_footer_marks(text: &str) -> String {
|
|||||||
/// `footer_lines` is set to `Some` if the footer was actually removed from `lines`
|
/// `footer_lines` is set to `Some` if the footer was actually removed from `lines`
|
||||||
/// (which is equal to the input array otherwise).
|
/// (which is equal to the input array otherwise).
|
||||||
#[allow(clippy::indexing_slicing)]
|
#[allow(clippy::indexing_slicing)]
|
||||||
fn remove_message_footer<'a>(lines: &'a [&str]) -> (&'a [&'a str], Option<&'a [&'a str]>) {
|
pub(crate) fn remove_message_footer<'a>(
|
||||||
|
lines: &'a [&str],
|
||||||
|
) -> (&'a [&'a str], Option<&'a [&'a str]>) {
|
||||||
let mut nearly_standard_footer = None;
|
let mut nearly_standard_footer = None;
|
||||||
for (ix, &line) in lines.iter().enumerate() {
|
for (ix, &line) in lines.iter().enumerate() {
|
||||||
match line {
|
match line {
|
||||||
|
|||||||
Reference in New Issue
Block a user