Mercurial > dovecot > core-2.2
annotate src/lib-storage/list/mailbox-list-index.h @ 13586:8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 02 Oct 2011 17:12:58 +0300 |
parents | src/lib-storage/list/index-mailbox-list.h@e06e178c8fd1 |
children | cd7b56e965d2 |
rev | line source |
---|---|
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
1 #ifndef MAILBOX_LIST_INDEX_H |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
2 #define MAILBOX_LIST_INDEX_H |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 |
5450
7a6db5ec047d
Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
4 #include "module-context.h" |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 #include "mailbox-list-private.h" |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
7 #define MAILBOX_LIST_INDEX_PREFIX "dovecot.list.index" |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 #define INDEX_LIST_CONTEXT(obj) \ |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
10 MODULE_CONTEXT(obj, mailbox_list_index_module) |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
12 /* stored in mail_index_record.flags: */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
13 enum mailbox_list_index_flags { |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
14 MAILBOX_LIST_INDEX_FLAG_NONEXISTENT = MAIL_DELETED, |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
15 MAILBOX_LIST_INDEX_FLAG_NOSELECT = MAIL_DRAFT, |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
16 MAILBOX_LIST_INDEX_FLAG_NOINFERIORS = MAIL_ANSWERED, |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
17 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
18 /* set during syncing for mailboxes that still exist */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
19 MAILBOX_LIST_INDEX_FLAG_MARKED |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
20 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
21 |
12645
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
22 struct mailbox_list_index_header { |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
23 uint8_t refresh_flag; |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
24 /* array of { uint32_t id; char name[]; } */ |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
25 }; |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
26 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
27 struct mailbox_list_index_record { |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
28 /* points to given id in header */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
29 uint32_t name_id; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
30 /* parent mailbox's UID, 0 = root */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
31 uint32_t parent_uid; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
32 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
33 /* the following fields are temporarily zero while unknown, |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
34 also permanently zero for \NoSelect and \Nonexistent mailboxes: */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
35 |
13287
957060ca5b69
Moved GUID code to liblib. Use guid_128_t type consistently everywhere.
Timo Sirainen <tss@iki.fi>
parents:
12650
diff
changeset
|
36 guid_128_t guid; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
37 uint32_t uid_validity; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
38 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
39 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
40 struct mailbox_list_index_msgs_record { |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
41 uint32_t messages; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
42 uint32_t unseen; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
43 uint32_t recent; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
44 uint32_t uidnext; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
45 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
46 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
47 struct mailbox_list_index_node { |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
48 struct mailbox_list_index_node *parent; |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
49 struct mailbox_list_index_node *next; |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
50 struct mailbox_list_index_node *children; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
51 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
52 uint32_t name_id, uid; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
53 enum mailbox_list_index_flags flags; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
54 const char *name; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
55 }; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
56 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
57 struct mailbox_list_index { |
5450
7a6db5ec047d
Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
58 union mailbox_list_module_context module_ctx; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
60 const char *path; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
61 struct mail_index *index; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
62 uint32_t ext_id, msgs_ext_id, hmodseq_ext_id; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
63 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
64 /* Number of iterations going on. Don't refresh mailbox list while |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
65 any iterations are going on. */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
66 int iter_refcount; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
67 |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
68 pool_t mailbox_pool; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
69 /* uint32_t id => const char *name */ |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
70 struct hash_table *mailbox_names; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
71 uint32_t highest_name_id; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
72 |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
73 uint32_t sync_log_file_seq; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
74 uoff_t sync_log_file_offset; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
75 |
12645
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
76 uint32_t sync_stamp; |
d3d5f104ca40
lib-storage: Mailbox list indexes now refresh the index on create/delete/rename.
Timo Sirainen <tss@iki.fi>
parents:
12641
diff
changeset
|
77 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
78 /* uint32_t uid => struct mailbox_list_index_node* */ |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
79 struct hash_table *mailbox_hash; |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
80 struct mailbox_list_index_node *mailbox_tree; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
81 }; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
83 struct mailbox_list_index_iterate_context { |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 struct mailbox_list_iterate_context ctx; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 struct mailbox_list_iterate_context *backend_ctx; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 struct mailbox_info info; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
88 unsigned int parent_len; |
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
89 string_t *path; |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
90 struct mailbox_list_index_node *next_node; |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
91 char sep; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
92 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
93 unsigned int failed:1; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
94 }; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
95 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
96 extern MODULE_CONTEXT_DEFINE(mailbox_list_index_module, |
5450
7a6db5ec047d
Better type safety to module_contexts arrays. Already fixed some bugs.
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
97 &mailbox_list_module_register); |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
98 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
99 struct mailbox_list_index_node * |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
100 mailbox_list_index_lookup(struct mailbox_list *list, const char *name); |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
101 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
102 int mailbox_list_index_refresh(struct mailbox_list *list); |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
103 void mailbox_list_index_refresh_later(struct mailbox_list *list); |
12641
ad002fdc6a6c
lib-storage: Initial commit for rewritten mailbox list indexes code.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
104 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
105 void mailbox_list_index_status_set_info_flags(struct mailbox *box, uint32_t uid, |
12650
0cadba9597cb
lib-storage: Use RECENT count in mailbox list index to set \Marked and \UnMarked LIST flag.
Timo Sirainen <tss@iki.fi>
parents:
12645
diff
changeset
|
106 enum mailbox_info_flags *flags); |
0cadba9597cb
lib-storage: Use RECENT count in mailbox list index to set \Marked and \UnMarked LIST flag.
Timo Sirainen <tss@iki.fi>
parents:
12645
diff
changeset
|
107 |
13586
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
108 void mailbox_list_index_status_init(void); |
8800d0429b7c
Renamed index-mailbox-list* to mailbox-list-index*
Timo Sirainen <tss@iki.fi>
parents:
13584
diff
changeset
|
109 void mailbox_list_index_status_init_list(struct mailbox_list *list); |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
110 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 #endif |