Trash messages more thoroughly (#2273)

Esp. remove some information for newly-arriving messages
This commit is contained in:
Hocuri
2021-03-02 12:04:53 +01:00
committed by GitHub
parent 2a39dc06e9
commit 476e613377
3 changed files with 23 additions and 9 deletions

View File

@@ -954,26 +954,34 @@ async fn add_parts(
}
};
// If you change which information is skipped if the message is trashed,
// also change `MsgId::trash()` and `delete_expired_messages()`
let trash = chat_id.is_trash();
stmt.execute(paramsv![
rfc724_mid,
server_folder,
server_uid as i32,
chat_id,
from_id as i32,
to_id as i32,
if trash { 0 } else { from_id as i32 },
if trash { 0 } else { to_id as i32 },
sort_timestamp,
sent_timestamp,
rcvd_timestamp,
part.typ,
state,
is_dc_message,
part.msg,
if trash { "" } else { &part.msg },
// txt_raw might contain invalid utf8
txt_raw,
part.param.to_string(),
if trash { "" } else { &txt_raw },
if trash {
"".to_string()
} else {
part.param.to_string()
},
part.bytes as isize,
is_hidden,
if save_mime_headers || mime_modified {
if (save_mime_headers || mime_modified) && !trash {
mime_headers.clone()
} else {
None

View File

@@ -308,8 +308,10 @@ pub(crate) async fn delete_expired_messages(context: &Context) -> Result<bool, E
let mut updated = context
.sql
.execute(
// If you change which information is removed here, also change MsgId::trash() and
// which information dc_receive_imf::add_parts() still adds to the db if the chat_id is TRASH
"UPDATE msgs \
SET chat_id=?, txt='', txt_raw='', from_id=0, to_id=0, param='' \
SET chat_id=?, txt='', txt_raw='', mime_headers='', from_id=0, to_id=0, param='' \
WHERE \
ephemeral_timestamp != 0 \
AND ephemeral_timestamp <= ? \

View File

@@ -147,13 +147,17 @@ impl MsgId {
/// Put message into trash chat and delete message text.
///
/// It means the message is deleted locally, but not on the server
/// yet.
/// It means the message is deleted locally, but not on the server.
/// We keep some infos to
/// 1. not download the same message again
/// 2. be able to delete the message on the server if we want to
pub async fn trash(self, context: &Context) -> crate::sql::Result<()> {
let chat_id = ChatId::new(DC_CHAT_ID_TRASH);
context
.sql
.execute(
// If you change which information is removed here, also change delete_expired_messages() and
// which information dc_receive_imf::add_parts() still adds to the db if the chat_id is TRASH
"UPDATE msgs SET chat_id=?, txt='', txt_raw='', mime_headers='', from_id=0, to_id=0, param='' WHERE id=?",
paramsv![chat_id, self],
)