Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib-storage/mail-thread.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 | 20e6fa42d081 |
children |
rev | line source |
---|---|
7796
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
1 #ifndef MAIL_THREAD_H |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
2 #define MAIL_THREAD_H |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 |
7906 | 4 struct mailbox; |
5 struct mail_search_args; | |
7796
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 struct mail_thread_context; |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
7 |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
8 enum mail_thread_type { |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
9 MAIL_THREAD_NONE, |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
10 MAIL_THREAD_ORDEREDSUBJECT, |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
11 MAIL_THREAD_REFERENCES, |
8903
20e6fa42d081
Renamed THREAD X-REFERENCES2 to THREAD REFS (from INTHREAD draft).
Timo Sirainen <tss@iki.fi>
parents:
8146
diff
changeset
|
12 MAIL_THREAD_REFS |
7796
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
13 }; |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
14 |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
15 struct mail_thread_child_node { |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
16 /* Node's index in mail hash transaction */ |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
17 uint32_t idx; |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
18 /* UID or sequence */ |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
19 uint32_t uid; |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
20 /* Timestamp node was sorted with (depends on thread algorithm) */ |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
21 time_t sort_date; |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
22 }; |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
23 ARRAY_DEFINE_TYPE(mail_thread_child_node, struct mail_thread_child_node); |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
24 |
7906 | 25 /* Convert thread type string to enum. Returns TRUE if ok, FALSE if type is |
26 unknown. */ | |
27 bool mail_thread_type_parse(const char *str, enum mail_thread_type *type_r); | |
28 | |
8146
70b53e9b232e
Rewrote thread indexing code. It's a lot simpler and takes less disk space.
Timo Sirainen <tss@iki.fi>
parents:
7906
diff
changeset
|
29 /* Build thread from given search arguments. args=NULL searches everything. */ |
70b53e9b232e
Rewrote thread indexing code. It's a lot simpler and takes less disk space.
Timo Sirainen <tss@iki.fi>
parents:
7906
diff
changeset
|
30 int mail_thread_init(struct mailbox *box, struct mail_search_args *args, |
7796
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
31 struct mail_thread_context **ctx_r); |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
32 void mail_thread_deinit(struct mail_thread_context **ctx); |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
33 |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
34 /* Iterate through thread tree. If write_seqs=TRUE, sequences are returned in |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
35 mail_thread_child_node.uid instead of UIDs. */ |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
36 struct mail_thread_iterate_context * |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
37 mail_thread_iterate_init(struct mail_thread_context *ctx, |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
38 enum mail_thread_type thread_type, bool write_seqs); |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
39 /* If child_iter_r is not NULL, it's set to contain another iterator if the |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
40 returned node contains children. The returned iterator must be freed |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
41 explicitly. */ |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
42 const struct mail_thread_child_node * |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
43 mail_thread_iterate_next(struct mail_thread_iterate_context *iter, |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
44 struct mail_thread_iterate_context **child_iter_r); |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
45 /* Returns number of nodes in the current iterator. */ |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
46 unsigned int |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
47 mail_thread_iterate_count(struct mail_thread_iterate_context *iter); |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
48 /* Free the iterator. Iterators don't reference other iterators, so it doesn't |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
49 matter in which order they're freed. */ |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
50 int mail_thread_iterate_deinit(struct mail_thread_iterate_context **iter); |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
51 |
37f23e0476e2
Moved threading code to lib-storage.
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
52 #endif |