d9898ee8 |
1 | /* |
d9898ee8 |
2 | */ |
3 | #ifndef imaprefs_h |
4 | #define imaprefs_h |
5 | |
6 | /* |
7 | ** Copyright 2000-2003 Double Precision, Inc. |
8 | ** See COPYING for distribution information. |
9 | */ |
10 | |
11 | #if HAVE_CONFIG_H |
b0322a85 |
12 | #include "rfc822/config.h" |
d9898ee8 |
13 | #endif |
14 | |
15 | #ifdef __cplusplus |
16 | extern "C" { |
17 | #endif |
18 | |
19 | /* |
20 | ** Implement REFERENCES threading. |
21 | */ |
22 | |
23 | /* The data structures */ |
24 | |
25 | struct imap_refmsg { |
26 | struct imap_refmsg *next, *last; /* Link list of all msgs */ |
27 | struct imap_refmsg *parent; /* my parent */ |
28 | struct imap_refmsg *firstchild, *lastchild; /* Children link list */ |
29 | struct imap_refmsg *prevsib, *nextsib; /* Link list of siblings */ |
30 | |
31 | char isdummy; /* this is a dummy node (for now) */ |
32 | char flag2; /* Additional flag */ |
33 | |
34 | char *msgid; /* msgid of this message */ |
35 | |
36 | char *subj; /* dynalloced subject of this msg */ |
37 | time_t timestamp; /* Timestamp */ |
38 | unsigned long seqnum; /* Sequence number */ |
39 | } ; |
40 | |
41 | struct imap_refmsgtable { |
42 | struct imap_refmsg *firstmsg, *lastmsg; /* Link list of all msgs */ |
43 | |
44 | /* hash table message id lookup */ |
45 | |
46 | struct imap_refmsghash *hashtable[512]; |
47 | |
48 | struct imap_subjlookup *subjtable[512]; |
49 | |
50 | struct imap_refmsg *rootptr; /* The root */ |
51 | } ; |
52 | |
53 | struct imap_refmsgtable *rfc822_threadalloc(void); |
54 | void rfc822_threadfree(struct imap_refmsgtable *); |
55 | struct imap_refmsg *rfc822_threadmsg(struct imap_refmsgtable *mt, |
56 | const char *msgidhdr, |
57 | const char *refhdr, |
58 | const char *subjheader, |
59 | |
60 | const char *dateheader, |
61 | time_t dateheader_tm, |
62 | /* Set one or other */ |
63 | |
64 | unsigned long seqnum); |
65 | |
66 | struct imap_refmsg *rfc822_threadmsgrefs(struct imap_refmsgtable *mt, |
67 | const char *msgid_s, |
68 | const char * const * msgidList, |
69 | const char *subjheader, |
70 | const char *dateheader, |
71 | time_t dateheader_tm, |
72 | unsigned long seqnum); |
73 | |
74 | struct imap_refmsg *rfc822_thread(struct imap_refmsgtable *mt); |
75 | |
76 | /* INTERNAL FUNCTIONS FOLLOW */ |
77 | |
78 | |
79 | struct imap_refmsghash { |
80 | struct imap_refmsghash *nexthash; |
81 | struct imap_refmsg *msg; |
82 | } ; |
83 | |
84 | struct imap_subjlookup { |
85 | struct imap_subjlookup *nextsubj; |
86 | char *subj; |
87 | struct imap_refmsg *msg; |
88 | int msgisrefwd; |
89 | } ; |
90 | |
91 | struct imap_refmsg *rfc822_threadallocmsg(struct imap_refmsgtable *mt, |
92 | const char *msgid); |
93 | void rfc822_threadprune(struct imap_refmsgtable *mt); |
94 | struct imap_refmsg *rfc822_threadgetroot(struct imap_refmsgtable *mt); |
95 | struct imap_refmsg *rfc822_threadsearchmsg(struct imap_refmsgtable *mt, |
96 | const char *msgid); |
97 | int rfc822_threadsortsubj(struct imap_refmsg *root); |
98 | int rfc822_threadgathersubj(struct imap_refmsgtable *mt, |
99 | struct imap_refmsg *root); |
100 | int rfc822_threadmergesubj(struct imap_refmsgtable *mt, |
101 | struct imap_refmsg *root); |
102 | int rfc822_threadsortbydate(struct imap_refmsgtable *mt); |
103 | |
104 | |
105 | #ifdef __cplusplus |
106 | } |
107 | #endif |
108 | |
109 | #endif |