mirror of
https://github.com/chatmail/core.git
synced 2026-05-15 12:56:30 +03:00
imap: call delete_expired_imap_messages() less often
This operation takes roughly 0.3 s on a moderate size database. Calling it once before scanning all folders and scanning the watched folder instead of each time after downloading a message from a folder speeds up IMAP loop.
This commit is contained in:
@@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
- fix splitting off text from webxdc messages #3032
|
- fix splitting off text from webxdc messages #3032
|
||||||
|
- call slow `delete_expired_imap_messages()` less often #3037
|
||||||
|
|
||||||
|
|
||||||
## 1.72.0
|
## 1.72.0
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ use crate::context::Context;
|
|||||||
use crate::dc_receive_imf::{
|
use crate::dc_receive_imf::{
|
||||||
dc_receive_imf_inner, from_field_to_contact_id, get_prefetch_parent_message, ReceivedMsg,
|
dc_receive_imf_inner, from_field_to_contact_id, get_prefetch_parent_message, ReceivedMsg,
|
||||||
};
|
};
|
||||||
use crate::ephemeral::delete_expired_imap_messages;
|
|
||||||
use crate::events::EventType;
|
use crate::events::EventType;
|
||||||
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
use crate::headerdef::{HeaderDef, HeaderDefMap};
|
||||||
use crate::job::{self, Action};
|
use crate::job::{self, Action};
|
||||||
@@ -459,9 +458,6 @@ impl Imap {
|
|||||||
.await
|
.await
|
||||||
.context("fetch_new_messages")?;
|
.context("fetch_new_messages")?;
|
||||||
|
|
||||||
// Mark expired messages for deletion.
|
|
||||||
delete_expired_imap_messages(context).await?;
|
|
||||||
|
|
||||||
self.move_messages(context, watch_folder)
|
self.move_messages(context, watch_folder)
|
||||||
.await
|
.await
|
||||||
.context("move_messages")?;
|
.context("move_messages")?;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
use anyhow::{bail, Result};
|
use anyhow::{bail, Context as _, Result};
|
||||||
use async_std::prelude::*;
|
use async_std::prelude::*;
|
||||||
use async_std::{
|
use async_std::{
|
||||||
channel::{self, Receiver, Sender},
|
channel::{self, Receiver, Sender},
|
||||||
@@ -8,6 +8,7 @@ use async_std::{
|
|||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::context::Context;
|
use crate::context::Context;
|
||||||
use crate::dc_tools::maybe_add_time_based_warnings;
|
use crate::dc_tools::maybe_add_time_based_warnings;
|
||||||
|
use crate::ephemeral::delete_expired_imap_messages;
|
||||||
use crate::imap::Imap;
|
use crate::imap::Imap;
|
||||||
use crate::job::{self, Thread};
|
use crate::job::{self, Thread};
|
||||||
use crate::smtp::{send_smtp_messages, Smtp};
|
use crate::smtp::{send_smtp_messages, Smtp};
|
||||||
@@ -160,6 +161,14 @@ async fn fetch_idle(ctx: &Context, connection: &mut Imap, folder: Config) -> Int
|
|||||||
return connection.fake_idle(ctx, Some(watch_folder)).await;
|
return connection.fake_idle(ctx, Some(watch_folder)).await;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mark expired messages for deletion.
|
||||||
|
if let Err(err) = delete_expired_imap_messages(ctx)
|
||||||
|
.await
|
||||||
|
.context("delete_expired_imap_messages failed")
|
||||||
|
{
|
||||||
|
warn!(ctx, "{:#}", err);
|
||||||
|
}
|
||||||
|
|
||||||
// Scan other folders before fetching from watched folder. This may result in the
|
// Scan other folders before fetching from watched folder. This may result in the
|
||||||
// messages being moved into the watched folder, for example from the Spam folder to
|
// messages being moved into the watched folder, for example from the Spam folder to
|
||||||
// the Inbox folder.
|
// the Inbox folder.
|
||||||
|
|||||||
Reference in New Issue
Block a user