2 ** $Id: imaprefs.h,v 1.4 2003/07/09 21:33:20 mrsam Exp $
8 ** Copyright 2000-2003 Double Precision, Inc.
9 ** See COPYING for distribution information.
21 ** Implement REFERENCES threading.
24 /* The data structures */
27 struct imap_refmsg
*next
, *last
; /* Link list of all msgs */
28 struct imap_refmsg
*parent
; /* my parent */
29 struct imap_refmsg
*firstchild
, *lastchild
; /* Children link list */
30 struct imap_refmsg
*prevsib
, *nextsib
; /* Link list of siblings */
32 char isdummy
; /* this is a dummy node (for now) */
33 char flag2
; /* Additional flag */
35 char *msgid
; /* msgid of this message */
37 char *subj
; /* dynalloced subject of this msg */
38 time_t timestamp
; /* Timestamp */
39 unsigned long seqnum
; /* Sequence number */
42 struct imap_refmsgtable
{
43 struct imap_refmsg
*firstmsg
, *lastmsg
; /* Link list of all msgs */
45 /* hash table message id lookup */
47 struct imap_refmsghash
*hashtable
[512];
49 struct imap_subjlookup
*subjtable
[512];
51 struct imap_refmsg
*rootptr
; /* The root */
54 struct imap_refmsgtable
*rfc822_threadalloc(void);
55 void rfc822_threadfree(struct imap_refmsgtable
*);
56 struct imap_refmsg
*rfc822_threadmsg(struct imap_refmsgtable
*mt
,
59 const char *subjheader
,
61 const char *dateheader
,
63 /* Set one or other */
65 unsigned long seqnum
);
67 struct imap_refmsg
*rfc822_threadmsgrefs(struct imap_refmsgtable
*mt
,
69 const char * const * msgidList
,
70 const char *subjheader
,
71 const char *dateheader
,
73 unsigned long seqnum
);
75 struct imap_refmsg
*rfc822_thread(struct imap_refmsgtable
*mt
);
77 /* INTERNAL FUNCTIONS FOLLOW */
80 struct imap_refmsghash
{
81 struct imap_refmsghash
*nexthash
;
82 struct imap_refmsg
*msg
;
85 struct imap_subjlookup
{
86 struct imap_subjlookup
*nextsubj
;
88 struct imap_refmsg
*msg
;
92 struct imap_refmsg
*rfc822_threadallocmsg(struct imap_refmsgtable
*mt
,
94 void rfc822_threadprune(struct imap_refmsgtable
*mt
);
95 struct imap_refmsg
*rfc822_threadgetroot(struct imap_refmsgtable
*mt
);
96 struct imap_refmsg
*rfc822_threadsearchmsg(struct imap_refmsgtable
*mt
,
98 int rfc822_threadsortsubj(struct imap_refmsg
*root
);
99 int rfc822_threadgathersubj(struct imap_refmsgtable
*mt
,
100 struct imap_refmsg
*root
);
101 int rfc822_threadmergesubj(struct imap_refmsgtable
*mt
,
102 struct imap_refmsg
*root
);
103 int rfc822_threadsortbydate(struct imap_refmsgtable
*mt
);