Mercurial > dovecot > core-2.2
view src/lib-storage/list/index-mailbox-list.h @ 12650:0cadba9597cb
lib-storage: Use RECENT count in mailbox list index to set \Marked and \UnMarked LIST flag.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 09 Feb 2011 02:26:44 +0200 |
parents | d3d5f104ca40 |
children | 957060ca5b69 |
line wrap: on
line source
#ifndef INDEX_MAILBOX_LIST_H #define INDEX_MAILBOX_LIST_H #include "module-context.h" #include "mailbox-list-private.h" #define MAILBOX_LIST_INDEX_PREFIX "dovecot.list.index" #define INDEX_LIST_CONTEXT(obj) \ MODULE_CONTEXT(obj, index_mailbox_list_module) /* stored in mail_index_record.flags: */ enum mailbox_list_index_flags { MAILBOX_LIST_INDEX_FLAG_NONEXISTENT = MAIL_DELETED, MAILBOX_LIST_INDEX_FLAG_NOSELECT = MAIL_DRAFT, MAILBOX_LIST_INDEX_FLAG_NOINFERIORS = MAIL_ANSWERED, /* set during syncing for mailboxes that still exist */ MAILBOX_LIST_INDEX_FLAG_MARKED }; struct mailbox_list_index_header { uint8_t refresh_flag; /* array of { uint32_t id; char name[]; } */ }; struct mailbox_list_index_record { /* points to given id in header */ uint32_t name_id; /* parent mailbox's UID, 0 = root */ uint32_t parent_uid; /* the following fields are temporarily zero while unknown, also permanently zero for \NoSelect and \Nonexistent mailboxes: */ uint8_t guid[MAIL_GUID_128_SIZE]; uint32_t uid_validity; }; struct mailbox_list_index_msgs_record { uint32_t messages; uint32_t unseen; uint32_t recent; uint32_t uidnext; }; struct index_mailbox_node { struct index_mailbox_node *parent; struct index_mailbox_node *next; struct index_mailbox_node *children; uint32_t name_id, uid; enum mailbox_list_index_flags flags; const char *name; }; struct index_mailbox_list { union mailbox_list_module_context module_ctx; const char *path; struct mail_index *index; uint32_t ext_id, msgs_ext_id, hmodseq_ext_id; /* Number of iterations going on. Don't refresh mailbox list while any iterations are going on. */ int iter_refcount; pool_t mailbox_pool; /* uint32_t id => const char *name */ struct hash_table *mailbox_names; uint32_t highest_name_id; uint32_t sync_log_file_seq; uoff_t sync_log_file_offset; uint32_t sync_stamp; /* uint32_t uid => struct index_mailbox_node* */ struct hash_table *mailbox_hash; struct index_mailbox_node *mailbox_tree; }; struct index_mailbox_list_iterate_context { struct mailbox_list_iterate_context ctx; struct mailbox_list_iterate_context *backend_ctx; struct mailbox_info info; unsigned int parent_len; string_t *path; struct index_mailbox_node *next_node; char sep; unsigned int failed:1; }; extern MODULE_CONTEXT_DEFINE(index_mailbox_list_module, &mailbox_list_module_register); struct index_mailbox_node * index_mailbox_list_lookup(struct mailbox_list *list, const char *vname); 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); #endif