return 0;
}
+void index_mailbox_list_status_set_info_flags(struct mailbox *box, uint32_t uid,
+ enum mailbox_info_flags *flags)
+{
+ struct index_mailbox_list *ilist = INDEX_LIST_CONTEXT(box->list);
+ struct mail_index_view *view;
+ struct mailbox_status status;
+ uint32_t seq;
+ int ret;
+
+ view = mail_index_view_open(ilist->index);
+ if (!mail_index_lookup_seq(view, uid, &seq)) {
+ /* our in-memory tree is out of sync */
+ ret = 0;
+ } else T_BEGIN {
+ ret = box->v.list_index_has_changed == NULL ? 0 :
+ box->v.list_index_has_changed(box, view, seq);
+ } T_END;
+
+ if (ret != 0) {
+ /* error / not up to date. don't waste time with it. */
+ mail_index_view_close(&view);
+ return;
+ }
+
+ status.recent = 0;
+ (void)index_list_get_view_status(box, view, seq, STATUS_RECENT,
+ &status, NULL);
+ mail_index_view_close(&view);
+
+ if (status.recent != 0)
+ *flags |= MAILBOX_MARKED;
+ else
+ *flags |= MAILBOX_UNMARKED;
+}
+
static void index_list_mail_mailbox_allocated(struct mailbox *box)
{
struct index_mailbox_list *ilist = INDEX_LIST_CONTEXT(box->list);
#include "hash.h"
#include "imap-match.h"
#include "mail-index.h"
+#include "mail-storage.h"
#include "mail-storage-hooks.h"
#include "mailbox-list-subscriptions.h"
#include "index-mailbox-list.h"
struct index_mailbox_list *ilist = INDEX_LIST_CONTEXT(list);
struct index_mailbox_node *node;
+ (void)index_mailbox_list_refresh(list);
+
T_BEGIN {
const char *const *path;
unsigned int i;
index_mailbox_list_update_info(struct index_mailbox_list_iterate_context *ctx)
{
struct index_mailbox_node *node = ctx->next_node;
+ struct mailbox *box;
str_truncate(ctx->path, ctx->parent_len);
if (str_len(ctx->path) > 0)
&ctx->info.flags);
}
- /* FIXME: set marked, unmarked flags based on recent counter */
+ box = mailbox_alloc(ctx->ctx.list, ctx->info.name,
+ MAILBOX_FLAG_KEEP_RECENT);
+ index_mailbox_list_status_set_info_flags(box, node->uid,
+ &ctx->info.flags);
+ mailbox_free(&box);
}
static void
int index_mailbox_list_refresh(struct mailbox_list *list);
void index_mailbox_list_refresh_later(struct mailbox_list *list);
+void index_mailbox_list_status_set_info_flags(struct mailbox *box, uint32_t uid,
+ enum mailbox_info_flags *flags);
+
void index_mailbox_list_status_init(void);
void index_mailbox_list_status_init_list(struct mailbox_list *list);