mirror of
https://github.com/chatmail/core.git
synced 2026-05-20 23:36:30 +03:00
Update resync_folder_uids to use imap table
This commit is contained in:
@@ -10,7 +10,6 @@ use crate::constants::DC_VERSION_STR;
|
|||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::{dc_get_abs_path, improve_single_line_input};
|
use crate::dc_tools::{dc_get_abs_path, improve_single_line_input};
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::job;
|
|
||||||
use crate::message::MsgId;
|
use crate::message::MsgId;
|
||||||
use crate::mimefactory::RECOMMENDED_FILE_SIZE;
|
use crate::mimefactory::RECOMMENDED_FILE_SIZE;
|
||||||
use crate::provider::{get_provider_by_id, Provider};
|
use crate::provider::{get_provider_by_id, Provider};
|
||||||
@@ -315,15 +314,6 @@ impl Context {
|
|||||||
self.sql.set_raw_config(key, value.as_deref()).await?;
|
self.sql.set_raw_config(key, value.as_deref()).await?;
|
||||||
Ok(())
|
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?;
|
self.sql.set_raw_config(key, value).await?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|||||||
16
src/imap.rs
16
src/imap.rs
@@ -525,21 +525,23 @@ impl Imap {
|
|||||||
&folder
|
&folder
|
||||||
);
|
);
|
||||||
|
|
||||||
|
let uid_validity = get_uidvalidity(context, &folder).await?;
|
||||||
|
|
||||||
// Write collected UIDs to SQLite database.
|
// Write collected UIDs to SQLite database.
|
||||||
context
|
context
|
||||||
.sql
|
.sql
|
||||||
.transaction(move |transaction| {
|
.transaction(move |transaction| {
|
||||||
transaction.execute(
|
transaction.execute("DELETE FROM imap WHERE folder=?", params![folder])?;
|
||||||
"UPDATE msgs SET server_uid=0 WHERE server_folder=?",
|
|
||||||
params![folder],
|
|
||||||
)?;
|
|
||||||
for (uid, rfc724_mid) in &msg_ids {
|
for (uid, rfc724_mid) in &msg_ids {
|
||||||
// This may detect previously undetected moved
|
// This may detect previously undetected moved
|
||||||
// messages, so we update server_folder too.
|
// messages, so we update server_folder too.
|
||||||
transaction.execute(
|
transaction.execute(
|
||||||
"UPDATE msgs \
|
"INSERT INTO imap (rfc724_mid, folder, uid, uidvalidity, target)
|
||||||
SET server_folder=?,server_uid=? WHERE rfc724_mid=?",
|
VALUES (?1, ?2, ?3, ?4, ?5)
|
||||||
params![folder, uid, rfc724_mid],
|
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(())
|
Ok(())
|
||||||
|
|||||||
10
src/job.rs
10
src/job.rs
@@ -583,15 +583,7 @@ impl Job {
|
|||||||
Status::Finished(Ok(()))
|
Status::Finished(Ok(()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Synchronizes UIDs for sentbox, inbox and mvbox, in this order.
|
/// Synchronizes UIDs for sentbox, inbox and mvbox.
|
||||||
///
|
|
||||||
/// 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.
|
|
||||||
async fn resync_folders(&mut self, context: &Context, imap: &mut Imap) -> Status {
|
async fn resync_folders(&mut self, context: &Context, imap: &mut Imap) -> Status {
|
||||||
if let Err(err) = imap.prepare(context).await {
|
if let Err(err) = imap.prepare(context).await {
|
||||||
warn!(context, "could not connect: {:?}", err);
|
warn!(context, "could not connect: {:?}", err);
|
||||||
|
|||||||
Reference in New Issue
Block a user