box.h (2802B)
1 enum 2 { 3 FlagJunk = 1<<0, 4 FlagNonJunk = 1<<1, 5 FlagReplied = 1<<2, 6 FlagFlagged = 1<<3, 7 FlagDeleted = 1<<4, 8 FlagDraft = 1<<5, 9 FlagSeen = 1<<6, 10 FlagNoInferiors = 1<<7, 11 FlagMarked = 1<<8, 12 FlagNoSelect = 1<<9, 13 FlagUnMarked = 1<<10, 14 FlagRecent = 1<<11 15 }; 16 17 typedef struct Box Box; 18 typedef struct Hdr Hdr; 19 typedef struct Msg Msg; 20 typedef struct Part Part; 21 22 struct Box 23 { 24 char* name; /* name of mailbox */ 25 char* elem; /* last element in name */ 26 uint ix; /* index in box[] array */ 27 uint id; /* id shown in file system */ 28 uint flags; /* FlagNoInferiors, etc. */ 29 uint time; /* last update time */ 30 uint msgid; /* last message id used */ 31 32 Msg** msg; /* array of messages (can have nils) */ 33 uint nmsg; 34 35 char* imapname; /* name on IMAP server */ 36 u32int validity; /* IMAP validity number */ 37 uint uidnext; /* IMAP expected next uid */ 38 uint recent; /* IMAP first recent message */ 39 uint exists; /* IMAP last message in box */ 40 uint maxseen; /* maximum IMAP uid seen */ 41 int mark; 42 uint imapinit; /* up-to-date w.r.t. IMAP */ 43 44 Box* parent; /* in tree */ 45 Box** sub; 46 uint nsub; 47 }; 48 49 struct Hdr 50 { 51 /* LATER: store date as int, reformat for programs */ 52 /* order known by fs.c */ 53 char* date; 54 char* subject; 55 char* from; 56 char* sender; 57 char* replyto; 58 char* to; 59 char* cc; 60 char* bcc; 61 char* inreplyto; 62 char* messageid; 63 char* digest; 64 }; 65 66 struct Msg 67 { 68 Box* box; /* mailbox containing msg */ 69 uint ix; /* index in box->msg[] array */ 70 uint id; /* id shown in file system */ 71 uint imapuid; /* IMAP uid */ 72 uint imapid; /* IMAP id */ 73 uint flags; /* FlagDeleted etc. */ 74 uint date; /* smtp envelope date */ 75 uint size; 76 77 Part** part; /* message subparts - part[0] is root */ 78 uint npart; 79 }; 80 81 struct Part 82 { 83 Msg* msg; /* msg containing part */ 84 uint ix; /* index in msg->part[] */ 85 uint pix; /* id in parent->sub[] */ 86 Part* parent; /* parent in structure */ 87 Part** sub; /* children in structure */ 88 uint nsub; 89 90 /* order known by fs.c */ 91 char* type; /* e.g., "text/plain" */ 92 char* idstr; 93 char* desc; 94 char* encoding; 95 char* charset; 96 char* filename; 97 char* raw; 98 char* rawheader; 99 char* rawbody; 100 char* mimeheader; 101 102 /* order known by fs.c */ 103 uint size; 104 uint lines; 105 106 char* body; 107 uint nbody; 108 Hdr* hdr; /* RFC822 envelope for message/rfc822 */ 109 }; 110 111 void boxinit(void); 112 Box* boxbyname(char*); 113 Box* boxbyid(uint); 114 Box* boxcreate(char*); 115 void boxfree(Box*); 116 Box* subbox(Box*, char*); 117 Msg* msgcreate(Box*); 118 Part* partcreate(Msg*, Part*); 119 120 void hdrfree(Hdr*); 121 122 Msg* msgbyid(Box*, uint); 123 Msg* msgbyimapuid(Box*, uint, int); 124 void msgfree(Msg*); 125 void msgplumb(Msg*, int); 126 127 Part* partbyid(Msg*, uint); 128 Part* subpart(Part*, uint); 129 void partfree(Part*); 130 131 extern Box** boxes; 132 extern uint nboxes; 133 134 extern Box* rootbox;