]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Fixed mailbox_status.unseen count for private indexes.
authorTimo Sirainen <tss@iki.fi>
Thu, 21 Jun 2012 11:51:36 +0000 (14:51 +0300)
committerTimo Sirainen <tss@iki.fi>
Thu, 21 Jun 2012 11:51:36 +0000 (14:51 +0300)
src/lib-storage/index/index-status.c

index 263cb38f6f29166efa1d703c5125c9ceff87ed5c..524b0fc68ea5b197253ab9f2672f9085d5b9f4cc 100644 (file)
@@ -33,7 +33,7 @@ int index_storage_get_status(struct mailbox *box,
                             enum mailbox_status_items items,
                             struct mailbox_status *status_r)
 {
-       const struct mail_index_header *hdr;
+       const struct mail_index_header *hdr, *hdr_pvt;
 
        memset(status_r, 0, sizeof(struct mailbox_status));
 
@@ -46,6 +46,8 @@ int index_storage_get_status(struct mailbox *box,
 
        /* we can get most of the status items without any trouble */
        hdr = mail_index_get_header(box->view);
+       hdr_pvt = box->view_pvt == NULL ? NULL :
+               mail_index_get_header(box->view_pvt);
        status_r->messages = hdr->messages_count;
        if ((items & STATUS_RECENT) != 0) {
                /* make sure recent count is set, in case syncing hasn't
@@ -54,7 +56,14 @@ int index_storage_get_status(struct mailbox *box,
                status_r->recent = index_mailbox_get_recent_count(box);
                i_assert(status_r->recent <= status_r->messages);
        }
-       status_r->unseen = hdr->messages_count - hdr->seen_messages_count;
+       if (hdr_pvt == NULL ||
+           (mailbox_get_private_flags_mask(box) & MAIL_SEEN) == 0) {
+               status_r->unseen = hdr->messages_count -
+                       hdr->seen_messages_count;
+       } else {
+               status_r->unseen = hdr_pvt->messages_count -
+                       hdr_pvt->seen_messages_count;
+       }
        status_r->uidvalidity = hdr->uid_validity;
        status_r->uidnext = hdr->next_uid;
        status_r->first_recent_uid = hdr->first_recent_uid;