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 {
}
}
+/* 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 =
.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,
};