mirror of
https://github.com/chatmail/core.git
synced 2026-05-06 06:46:35 +03:00
do not assume 'no ephemeral timer' on partial downloads (#2811)
* do not assume 'no ephemeral timer' on partial downloads * add a test to check that ephemeral timers are not disabled on partial downloads
This commit is contained in:
@@ -864,9 +864,10 @@ async fn add_parts(
|
|||||||
DC_CHAT_ID_TRASH
|
DC_CHAT_ID_TRASH
|
||||||
});
|
});
|
||||||
|
|
||||||
// Extract ephemeral timer from the message.
|
// Extract ephemeral timer from the message or use the existing timer if the message is not fully downloaded.
|
||||||
let mut ephemeral_timer = if let Some(value) = mime_parser.get_header(HeaderDef::EphemeralTimer)
|
let mut ephemeral_timer = if is_partial_download.is_some() {
|
||||||
{
|
chat_id.get_ephemeral_timer(context).await?
|
||||||
|
} else if let Some(value) = mime_parser.get_header(HeaderDef::EphemeralTimer) {
|
||||||
match value.parse::<EphemeralTimer>() {
|
match value.parse::<EphemeralTimer>() {
|
||||||
Ok(timer) => timer,
|
Ok(timer) => timer,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
|
|||||||
@@ -227,6 +227,7 @@ mod tests {
|
|||||||
use crate::chat::send_msg;
|
use crate::chat::send_msg;
|
||||||
use crate::constants::Viewtype;
|
use crate::constants::Viewtype;
|
||||||
use crate::dc_receive_imf::dc_receive_imf_inner;
|
use crate::dc_receive_imf::dc_receive_imf_inner;
|
||||||
|
use crate::ephemeral::Timer;
|
||||||
use crate::test_utils::TestContext;
|
use crate::test_utils::TestContext;
|
||||||
use num_traits::FromPrimitive;
|
use num_traits::FromPrimitive;
|
||||||
|
|
||||||
@@ -343,4 +344,40 @@ mod tests {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[async_std::test]
|
||||||
|
async fn test_partial_download_and_ephemeral() -> Result<()> {
|
||||||
|
let t = TestContext::new_alice().await;
|
||||||
|
let chat_id = t
|
||||||
|
.create_chat_with_contact("bob", "bob@example.org")
|
||||||
|
.await
|
||||||
|
.id;
|
||||||
|
chat_id
|
||||||
|
.set_ephemeral_timer(&t, Timer::Enabled { duration: 60 })
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
// download message from bob partially, this must not change the ephemeral timer
|
||||||
|
dc_receive_imf_inner(
|
||||||
|
&t,
|
||||||
|
b"From: Bob <bob@example.org>\n\
|
||||||
|
To: Alice <alice@example.com>\n\
|
||||||
|
Chat-Version: 1.0\n\
|
||||||
|
Subject: subject\n\
|
||||||
|
Message-ID: <first@example.org>\n\
|
||||||
|
Date: Sun, 14 Nov 2021 00:10:00 +0000\
|
||||||
|
Content-Type: text/plain",
|
||||||
|
"INBOX",
|
||||||
|
1,
|
||||||
|
false,
|
||||||
|
Some(100000),
|
||||||
|
false,
|
||||||
|
)
|
||||||
|
.await?;
|
||||||
|
assert_eq!(
|
||||||
|
chat_id.get_ephemeral_timer(&t).await?,
|
||||||
|
Timer::Enabled { duration: 60 }
|
||||||
|
);
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user