((box)->inbox_any)
static int
-index_list_open_view(struct mailbox *box, struct mail_index_view **view_r,
- uint32_t *seq_r)
+index_list_open_view(struct mailbox *box, bool refresh,
+ struct mail_index_view **view_r, uint32_t *seq_r)
{
struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(box->list);
struct mailbox_list_index_node *node;
if (!mail_index_lookup_seq(view, node->uid, &seq)) {
/* our in-memory tree is out of sync */
ret = 1;
+ } else if (!refresh) {
+ /* this operation doesn't need the index to be up-to-date */
+ ret = 0;
} else T_BEGIN {
ret = box->v.list_index_has_changed == NULL ? 0 :
box->v.list_index_has_changed(box, view, seq, FALSE);
uint32_t seq;
int ret;
- if ((ret = index_list_open_view(box, &view, &seq)) <= 0) {
+ if ((ret = index_list_open_view(box, FALSE, &view, &seq)) <= 0) {
/* failure / not found. fallback to the real storage check
just in case to see if the mailbox was just created. */
return ibox->module_ctx.super.
uint32_t seq;
int ret;
+ if (items == 0)
+ return 1;
+
if ((items & STATUS_UNSEEN) != 0 &&
(mailbox_get_private_flags_mask(box) & MAIL_SEEN) != 0) {
/* can't get UNSEEN from list index, since each user has
return 0;
}
- if ((ret = index_list_open_view(box, &view, &seq)) <= 0)
+ if ((ret = index_list_open_view(box, TRUE, &view, &seq)) <= 0)
return ret;
ret = mailbox_list_index_status(box->list, view, seq, items,
return 0;
}
- if ((ret = index_list_open_view(box, &view, &seq)) <= 0)
+ if ((ret = index_list_open_view(box, FALSE, &view, &seq)) <= 0)
return ret;
ret = mailbox_list_index_status(box->list, view, seq, 0,
i_assert(!ilist->syncing);
- if ((ret = index_list_open_view(box, &view, &seq)) <= 0)
+ if ((ret = index_list_open_view(box, TRUE, &view, &seq)) <= 0)
return ret;
ret = mailbox_list_index_status(box->list, view, seq,
memset(first_saved_r, 0, sizeof(*first_saved_r));
- if ((ret = index_list_open_view(box, &view, &seq)) <= 0)
+ if ((ret = index_list_open_view(box, TRUE, &view, &seq)) <= 0)
return ret;
mail_index_lookup_ext(view, seq, ilist->first_saved_ext_id,
int ret;
memset(&changes, 0, sizeof(changes));
- if ((ret = index_list_open_view(box, &list_view, &changes.seq)) <= 0)
+ if ((ret = index_list_open_view(box, TRUE, &list_view, &changes.seq)) <= 0)
return;
(void)mailbox_list_index_status(box->list, list_view, changes.seq,