From: Marco Bettini Date: Fri, 28 Jul 2023 12:53:59 +0000 (+0000) Subject: virtual: struct virtual_mailbox_vfuncs - Add get_real_mail_uid() X-Git-Tag: 2.4.0~2539 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ec2134157a0c9ac7ab8257083eaa569057293866;p=thirdparty%2Fdovecot%2Fcore.git virtual: struct virtual_mailbox_vfuncs - Add get_real_mail_uid() --- diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 1438ff8e6d..3f5aa1449c 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -228,6 +228,9 @@ struct virtual_mailbox_vfuncs { bool only_with_msgs); uint32_t (*get_virtual_backend_last_uid)(struct mailbox *box, struct mailbox *bbox); + void (*get_virtual_backend_mail_uid)(struct mailbox *box, uint32_t seq, + struct mailbox **backend_box_r, + uint32_t *backend_uid_r); }; struct mailbox_vfuncs { diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index 6217327395..bac3bc6c33 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -882,6 +882,27 @@ virtual_get_virtual_backend_last_uid(struct mailbox *box, struct mailbox *bbox) bbox->name, box->name); } +static void +virtual_get_virtual_backend_mail_uid(struct mailbox *box, uint32_t seq, + struct mailbox **backend_box_r, + uint32_t *backend_uid_r) +{ + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); + + const void *data; + mail_index_lookup_ext(box->view, seq, mbox->virtual_ext_id, &data, NULL); + i_assert(data != NULL); + + const struct virtual_mail_index_record *vrec = data; + struct virtual_backend_box *vbbox; + bool found = virtual_backend_box_lookup(mbox, vrec->mailbox_id, &vbbox); + i_assert(found); + + *backend_box_r = vbbox->box; + *backend_uid_r = vrec->real_uid; +} + static bool virtual_is_inconsistent(struct mailbox *box) { struct virtual_mailbox *mbox = @@ -987,4 +1008,5 @@ struct virtual_mailbox_vfuncs virtual_mailbox_vfuncs = { .get_virtual_uid_map = virtual_get_virtual_uid_map, .get_virtual_backend_boxes = virtual_get_virtual_backend_boxes, .get_virtual_backend_last_uid = virtual_get_virtual_backend_last_uid, + .get_virtual_backend_mail_uid = virtual_get_virtual_backend_mail_uid, };