aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Dufour <quentin@deuxfleurs.fr>2024-01-05 15:36:40 +0100
committerQuentin Dufour <quentin@deuxfleurs.fr>2024-01-05 15:36:40 +0100
commit335750a29a83edba9bce2fb7e1452001e4962d1f (patch)
treebea1e1f767cbd662e7a7f9b674a7ebeae195cd0a
parentd3c156a087f3c767fc0d2376abd7c1d304161d47 (diff)
downloadaerogramme-335750a29a83edba9bce2fb7e1452001e4962d1f.tar.gz
aerogramme-335750a29a83edba9bce2fb7e1452001e4962d1f.zip
MOVE command is optimized
-rw-r--r--src/imap/mailbox_view.rs9
-rw-r--r--src/mail/mailbox.rs3
-rw-r--r--src/mail/mod.rs2
-rw-r--r--src/mail/query.rs0
-rw-r--r--src/mail/snapshot.rs11
5 files changed, 16 insertions, 9 deletions
diff --git a/src/imap/mailbox_view.rs b/src/imap/mailbox_view.rs
index 4d0858f..6db1bd2 100644
--- a/src/imap/mailbox_view.rs
+++ b/src/imap/mailbox_view.rs
@@ -228,19 +228,16 @@ impl MailboxView {
) -> Result<(ImapUidvalidity, Vec<(ImapUid, ImapUid)>, Vec<Body<'static>>)> {
let mails = self.get_mail_ids(sequence_set, *is_uid_copy)?;
- let mut new_uuids = vec![];
for mi in mails.iter() {
- let copy_action = to.copy_from(&self.mailbox, mi.uuid).await?;
- new_uuids.push(copy_action);
- self.mailbox.delete(mi.uuid).await?
+ to.move_from(&self.mailbox, mi.uuid).await?;
}
let mut ret = vec![];
let to_state = to.current_uid_index().await;
- for (mi, new_uuid) in mails.iter().zip(new_uuids.iter()) {
+ for mi in mails.iter() {
let dest_uid = to_state
.table
- .get(new_uuid)
+ .get(&mi.uuid)
.ok_or(anyhow!("moved mail not in destination mailbox"))?
.0;
ret.push((mi.uid, dest_uid));
diff --git a/src/mail/mailbox.rs b/src/mail/mailbox.rs
index e424ba3..b011110 100644
--- a/src/mail/mailbox.rs
+++ b/src/mail/mailbox.rs
@@ -149,7 +149,6 @@ impl Mailbox {
/// Move an email from an other Mailbox to this mailbox
/// (use this when possible, as it allows for a certain number of storage optimizations)
- #[allow(dead_code)]
pub async fn move_from(&self, from: &Mailbox, uuid: UniqueIdent) -> Result<()> {
if self.id == from.id {
bail!("Cannot copy move same mailbox");
@@ -403,8 +402,6 @@ impl MailboxInternal {
Ok(new_id)
}
- #[allow(dead_code)]
- // 2023-05-15 will probably be used later
async fn move_from(&mut self, from: &mut MailboxInternal, id: UniqueIdent) -> Result<()> {
self.copy_internal(from, id, id).await?;
from.delete(id).await?;
diff --git a/src/mail/mod.rs b/src/mail/mod.rs
index bbe4033..7371b53 100644
--- a/src/mail/mod.rs
+++ b/src/mail/mod.rs
@@ -3,6 +3,8 @@ use std::io::Write;
pub mod incoming;
pub mod mailbox;
+pub mod snapshot;
+pub mod query;
pub mod uidindex;
pub mod unique_ident;
pub mod user;
diff --git a/src/mail/query.rs b/src/mail/query.rs
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/mail/query.rs
diff --git a/src/mail/snapshot.rs b/src/mail/snapshot.rs
new file mode 100644
index 0000000..7256d50
--- /dev/null
+++ b/src/mail/snapshot.rs
@@ -0,0 +1,11 @@
+use std::sync::Arc;
+use super::mailbox::Mailbox;
+use super::uidindex::UidIndex;
+
+pub struct Snapshot {
+ pub mailbox: Arc<Mailbox>,
+ pub snapshot: UidIndex,
+}
+
+impl Snapshot {
+}