From: Marco Bettini Date: Fri, 21 Jul 2023 10:41:59 +0000 (+0000) Subject: virtual: struct virtual_mailbox_vfuncs - Add get_virtual_backend_last_uid() X-Git-Tag: 2.4.0~2540 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d517c337ab6f0d175adc62b56d798151843d6b3b;p=thirdparty%2Fdovecot%2Fcore.git virtual: struct virtual_mailbox_vfuncs - Add get_virtual_backend_last_uid() --- diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 2d40b97c2c..1438ff8e6d 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -226,6 +226,8 @@ struct virtual_mailbox_vfuncs { void (*get_virtual_backend_boxes)(struct mailbox *box, ARRAY_TYPE(mailboxes) *mailboxes, bool only_with_msgs); + uint32_t (*get_virtual_backend_last_uid)(struct mailbox *box, + struct mailbox *bbox); }; struct mailbox_vfuncs { diff --git a/src/plugins/virtual/virtual-storage.c b/src/plugins/virtual/virtual-storage.c index 33c38b9fed..6217327395 100644 --- a/src/plugins/virtual/virtual-storage.c +++ b/src/plugins/virtual/virtual-storage.c @@ -861,6 +861,27 @@ virtual_get_virtual_backend_boxes(struct mailbox *box, } } +/* This function is meant to be called only with mailboxes retrieved from + virtual_get_virtual_backend_boxes() and to be invoked with the same box + argument as used in that function. */ +static uint32_t +virtual_get_virtual_backend_last_uid(struct mailbox *box, struct mailbox *bbox) +{ + struct virtual_mailbox *mbox = + container_of(box, struct virtual_mailbox, box); + + struct virtual_backend_box *vbox; + array_foreach_elem(&mbox->backend_boxes, vbox) { + if (vbox->box == bbox) { + i_assert(vbox->sync_next_uid > 0); + return vbox->sync_next_uid - 1; + } + } + + i_panic("Backend box '%s' unexpectedly not found in virtual box '%s's backends", + bbox->name, box->name); +} + static bool virtual_is_inconsistent(struct mailbox *box) { struct virtual_mailbox *mbox = @@ -965,4 +986,5 @@ struct virtual_mailbox_vfuncs virtual_mailbox_vfuncs = { .get_virtual_uids = virtual_get_virtual_uids, .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, };