diff --git a/crates/core/src/cache/imap/download/rebuild.rs b/crates/core/src/cache/imap/download/rebuild.rs index 4392e76..85c175d 100644 --- a/crates/core/src/cache/imap/download/rebuild.rs +++ b/crates/core/src/cache/imap/download/rebuild.rs @@ -17,24 +17,20 @@ // along with this program. If not, see . use crate::{ - raise_error, - { - account::{ - migration::AccountModel, - state::{DownloadState, DownloadStatus, FolderStatus}, - }, - cache::{ - imap::{ - download::flow::{ - fetch_and_save_by_date, fetch_and_save_full_mailbox, FetchDirection, - }, - mailbox::MailBox, - }, - SEMAPHORE, - }, - error::{code::ErrorCode, BichonResult}, - store::tantivy::envelope::ENVELOPE_MANAGER, + account::{ + migration::AccountModel, + state::{DownloadState, DownloadStatus, FolderStatus}, }, + cache::{ + imap::{ + download::flow::{fetch_and_save_by_date, fetch_and_save_full_mailbox, FetchDirection}, + mailbox::MailBox, + }, + SEMAPHORE, + }, + error::{code::ErrorCode, BichonResult}, + raise_error, + store::tantivy::{attachment::ATTACHMENT_MANAGER, envelope::ENVELOPE_MANAGER}, }; use tokio_util::sync::CancellationToken; @@ -91,7 +87,7 @@ pub async fn rebuild_cache( continue; } }; - + match fetch_and_save_full_mailbox(&account, &mailbox, token.clone()).await { Ok(_) => {} Err(err) => { @@ -204,7 +200,9 @@ pub async fn rebuild_mailbox_cache( ENVELOPE_MANAGER .delete_mailbox_envelopes(account.id, vec![local_mailbox.id]) .await?; - + ATTACHMENT_MANAGER + .delete_mailbox_attachments(account.id, vec![local_mailbox.id]) + .await?; if remote_mailbox.exists == 0 { info!( "Account {}: Mailbox '{}' has no emails on the remote server. The mailbox is empty, no envelopes to fetch.", @@ -237,6 +235,9 @@ pub async fn rebuild_mailbox_cache_by_date( ENVELOPE_MANAGER .delete_mailbox_envelopes(account.id, vec![local_mailbox_id]) .await?; + ATTACHMENT_MANAGER + .delete_mailbox_attachments(account.id, vec![local_mailbox_id]) + .await?; if remote.exists == 0 { info!( "Account {}: Mailbox '{}' has no emails on the remote server. The mailbox is empty, no envelopes to fetch.", diff --git a/crates/core/src/store/tantivy/envelope.rs b/crates/core/src/store/tantivy/envelope.rs index 90d9ca9..1ed38ab 100644 --- a/crates/core/src/store/tantivy/envelope.rs +++ b/crates/core/src/store/tantivy/envelope.rs @@ -39,6 +39,7 @@ use crate::{ blob::BLOB_MANAGER, envelope::Envelope, tantivy::{ + attachment::ATTACHMENT_MANAGER, fatal_commit, fields::{ F_ACCOUNT_ID, F_DATE, F_FROM, F_ID, F_REGULAR_ATTACHMENT_COUNT, F_SIZE, F_TAGS, @@ -727,6 +728,10 @@ impl IndexManager { .commit() .map_err(|e| raise_error!(format!("{:#?}", e), ErrorCode::InternalError))?; + ATTACHMENT_MANAGER + .delete_account_attachments(account_id) + .await?; + if !eml_content_hashes.is_empty() || !attachments_content_hashes.is_empty() { self.cleanup_unused_content(eml_content_hashes, attachments_content_hashes)?; }