]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
virtual: struct virtual_mailbox_vfuncs - Add get_virtual_backend_last_uid()
authorMarco Bettini <marco.bettini@open-xchange.com>
Fri, 21 Jul 2023 10:41:59 +0000 (10:41 +0000)
committerMarco Bettini <marco.bettini@open-xchange.com>
Tue, 10 Oct 2023 07:13:49 +0000 (07:13 +0000)
src/lib-storage/mail-storage-private.h
src/plugins/virtual/virtual-storage.c

index 2d40b97c2c6fd846d2f4be857f5184b26c5964bf..1438ff8e6d903e83702c088436aa0e4b90cc84d3 100644 (file)
@@ -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 {
index 33c38b9fedd1ba652219af5de2d1c7a7144bd4fc..62173273959bf249078c65b9a64546e585bbf574 100644 (file)
@@ -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,
 };