diff --git a/src/config.rs b/src/config.rs index f8a6fa0c2..e07d2088d 100644 --- a/src/config.rs +++ b/src/config.rs @@ -10,7 +10,6 @@ use crate::constants::DC_VERSION_STR; use crate::context::Context; use crate::dc_tools::{dc_get_abs_path, improve_single_line_input}; use crate::events::EventType; -use crate::job; use crate::message::MsgId; use crate::mimefactory::RECOMMENDED_FILE_SIZE; use crate::provider::{get_provider_by_id, Provider}; @@ -315,15 +314,6 @@ impl Context { self.sql.set_raw_config(key, value.as_deref()).await?; Ok(()) } - Config::DeleteServerAfter => { - let ret = self - .sql - .set_raw_config(key, value) - .await - .map_err(Into::into); - job::schedule_resync(self).await?; - ret - } _ => { self.sql.set_raw_config(key, value).await?; Ok(()) diff --git a/src/imap.rs b/src/imap.rs index 3d231e5f7..d13afe452 100644 --- a/src/imap.rs +++ b/src/imap.rs @@ -525,21 +525,23 @@ impl Imap { &folder ); + let uid_validity = get_uidvalidity(context, &folder).await?; + // Write collected UIDs to SQLite database. context .sql .transaction(move |transaction| { - transaction.execute( - "UPDATE msgs SET server_uid=0 WHERE server_folder=?", - params![folder], - )?; + transaction.execute("DELETE FROM imap WHERE folder=?", params![folder])?; for (uid, rfc724_mid) in &msg_ids { // This may detect previously undetected moved // messages, so we update server_folder too. transaction.execute( - "UPDATE msgs \ - SET server_folder=?,server_uid=? WHERE rfc724_mid=?", - params![folder, uid, rfc724_mid], + "INSERT INTO imap (rfc724_mid, folder, uid, uidvalidity, target) + VALUES (?1, ?2, ?3, ?4, ?5) + ON CONFLICT(folder, uid, uidvalidity) + DO UPDATE SET rfc724_mid=excluded.rfc724_mid, + target=excluded.target", + params![rfc724_mid, folder, uid, uid_validity, folder], )?; } Ok(()) diff --git a/src/job.rs b/src/job.rs index 56a489915..499eba5b9 100644 --- a/src/job.rs +++ b/src/job.rs @@ -583,15 +583,7 @@ impl Job { Status::Finished(Ok(())) } - /// Synchronizes UIDs for sentbox, inbox and mvbox, in this order. - /// - /// If a copy of the message is present in multiple folders, mvbox - /// is preferred to inbox, which is in turn preferred to - /// sentbox. This is because in the database it is impossible to - /// store multiple UIDs for one message, so we prefer to - /// automatically delete messages in the folders managed by Delta - /// Chat in contrast to the Sent folder, which is normally managed - /// by the user via webmail or another email client. + /// Synchronizes UIDs for sentbox, inbox and mvbox. async fn resync_folders(&mut self, context: &Context, imap: &mut Imap) -> Status { if let Err(err) = imap.prepare(context).await { warn!(context, "could not connect: {:?}", err);