Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib-index/mailbox-list-index.h @ 9354:687ac828b964 HEAD
lib-index: modseqs weren't tracked properly within session when changes were done.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 01 Sep 2009 13:05:03 -0400 |
parents | e4eb71ae8e96 |
children |
rev | line source |
---|---|
6410
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
6076
diff
changeset
|
1 #ifndef MAILBOX_LIST_INDEX_H |
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
6076
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 |
6069
8576ce5d7fb4
Changed mailbox_list_index_view_init() to return -1 if uid_validity doesn't
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
4 struct mailbox_list_index_view; |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
5 struct mailbox_list_index_sync_ctx; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 /* Mailbox list index contains UID <-> mailbox name mapping. It also takes in |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 a mail_index index which contains UID -> metadata information for the |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 mailboxes. The mmap, in-memory and lock settings are taken from the |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 mail_index. */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
12 enum mailbox_list_index_flags { |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 /* Mailbox has children. They may not be indexed however, so |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 mailbox_list_index_info.has_children=FALSE is possible. */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 MAILBOX_LIST_INDEX_FLAG_CHILDREN = 0x01, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 /* Mailbox has no children. mailbox_list_index_info.has_children |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 should be FALSE. */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 MAILBOX_LIST_INDEX_FLAG_NOCHILDREN = 0x02, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 /* The mailbox isn't selectable (eg. a directory) */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 MAILBOX_LIST_INDEX_FLAG_NOSELECT = 0x04, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 /* The mailbox doesn't exist at all. This is only a placeholder for |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 a child mailbox. When the children are deleted, this mailbox will |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 be automatically deleted as well. */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 MAILBOX_LIST_INDEX_FLAG_NONEXISTENT = 0x08 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
25 }; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
26 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
27 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
28 enum mailbox_list_sync_flags { |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
29 /* All the child mailboxes are also being synced */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
30 MAILBOX_LIST_SYNC_FLAG_RECURSIVE = 0x01, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 /* New mailboxes may be added, but none are removed */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 MAILBOX_LIST_SYNC_FLAG_PARTIAL = 0x02 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 }; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 struct mailbox_list_index_info { |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 const char *name; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 uint32_t uid; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 bool has_children; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 }; |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 struct mailbox_list_index * |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 mailbox_list_index_alloc(const char *path, char separator, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 struct mail_index *mail_index); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 void mailbox_list_index_free(struct mailbox_list_index **index); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 /* Open or create mailbox list index. */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 int mailbox_list_index_open_or_create(struct mailbox_list_index *index); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 /* Synchronize the index with the backend. */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 int mailbox_list_index_sync_init(struct mailbox_list_index *index, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 const char *path, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 enum mailbox_list_sync_flags flags, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
53 struct mailbox_list_index_sync_ctx **ctx_r); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
54 struct mail_index_view * |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
55 mailbox_list_index_sync_get_view(struct mailbox_list_index_sync_ctx *ctx); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
56 struct mail_index_transaction * |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 mailbox_list_index_sync_get_transaction(struct mailbox_list_index_sync_ctx*ctx); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 int mailbox_list_index_sync_more(struct mailbox_list_index_sync_ctx *ctx, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 const char *name, uint32_t *seq_r); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
60 int mailbox_list_index_sync_commit(struct mailbox_list_index_sync_ctx **ctx); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
61 void mailbox_list_index_sync_rollback(struct mailbox_list_index_sync_ctx **ctx); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
62 |
5324
4d3294c59939
Fixed desyncing problems with mail index and mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
4848
diff
changeset
|
63 /* Mailbox list index and mail index must be kept in sync, so lookups and |
4d3294c59939
Fixed desyncing problems with mail index and mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
4848
diff
changeset
|
64 iterations must know the mail index view. The mail_view can be set to NULL |
6069
8576ce5d7fb4
Changed mailbox_list_index_view_init() to return -1 if uid_validity doesn't
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
65 to use the latest changes. Returns -1 if uidvalidity doesn't match. */ |
8576ce5d7fb4
Changed mailbox_list_index_view_init() to return -1 if uid_validity doesn't
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
66 int mailbox_list_index_view_init(struct mailbox_list_index *index, |
8576ce5d7fb4
Changed mailbox_list_index_view_init() to return -1 if uid_validity doesn't
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
67 struct mail_index_view *mail_view, |
8576ce5d7fb4
Changed mailbox_list_index_view_init() to return -1 if uid_validity doesn't
Timo Sirainen <tss@iki.fi>
parents:
5324
diff
changeset
|
68 struct mailbox_list_index_view **view_r); |
5324
4d3294c59939
Fixed desyncing problems with mail index and mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
4848
diff
changeset
|
69 void mailbox_list_index_view_deinit(struct mailbox_list_index_view **view); |
4d3294c59939
Fixed desyncing problems with mail index and mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
4848
diff
changeset
|
70 |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
71 /* Get mailbox UID for a given name. Returns 1 if found, 0 if not, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
72 -1 if error */ |
5324
4d3294c59939
Fixed desyncing problems with mail index and mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
4848
diff
changeset
|
73 int mailbox_list_index_lookup(struct mailbox_list_index_view *view, |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
74 const char *name, uint32_t *uid_r); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
75 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
76 /* Iterate through all the mailboxes. If recurse_level is -1, all the child |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
77 mailboxes are returned, otherwise it's the number of levels to return |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
78 (0 = only the mailboxes directly under the path). Returned mailbox names |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
79 are allocated from name_pool. */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
80 struct mailbox_list_iter_ctx * |
5324
4d3294c59939
Fixed desyncing problems with mail index and mailbox list index.
Timo Sirainen <tss@iki.fi>
parents:
4848
diff
changeset
|
81 mailbox_list_index_iterate_init(struct mailbox_list_index_view *view, |
4848
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
82 const char *path, int recurse_level); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
83 /* Returns 1 if mailbox was returned, 0 at the end of iteration, -1 if error */ |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
84 int mailbox_list_index_iterate_next(struct mailbox_list_iter_ctx *ctx, |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
85 struct mailbox_list_index_info *info_r); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
86 void mailbox_list_index_iterate_deinit(struct mailbox_list_iter_ctx **ctx); |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
87 |
967de900c73a
Mailbox list indexing and related changes. Currently works only with
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
88 #endif |