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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
d987e018483b Thread code cleanups + fixes
Timo Sirainen <tss@iki.fi>
parents: 7796
diff changeset
4 struct mailbox;
d987e018483b Thread code cleanups + fixes
Timo Sirainen <tss@iki.fi>
parents: 7796
diff changeset
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
d987e018483b Thread code cleanups + fixes
Timo Sirainen <tss@iki.fi>
parents: 7796
diff changeset
25 /* Convert thread type string to enum. Returns TRUE if ok, FALSE if type is
d987e018483b Thread code cleanups + fixes
Timo Sirainen <tss@iki.fi>
parents: 7796
diff changeset
26 unknown. */
d987e018483b Thread code cleanups + fixes
Timo Sirainen <tss@iki.fi>
parents: 7796
diff changeset
27 bool mail_thread_type_parse(const char *str, enum mail_thread_type *type_r);
d987e018483b Thread code cleanups + fixes
Timo Sirainen <tss@iki.fi>
parents: 7796
diff changeset
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