| enum |
| { |
| FlagJunk = 1<<0, |
| FlagNonJunk = 1<<1, |
| FlagReplied = 1<<2, |
| FlagFlagged = 1<<3, |
| FlagDeleted = 1<<4, |
| FlagDraft = 1<<5, |
| FlagSeen = 1<<6, |
| FlagNoInferiors = 1<<7, |
| FlagMarked = 1<<8, |
| FlagNoSelect = 1<<9, |
| FlagUnMarked = 1<<10, |
| FlagRecent = 1<<11 |
| }; |
| |
| typedef struct Box Box; |
| typedef struct Hdr Hdr; |
| typedef struct Msg Msg; |
| typedef struct Part Part; |
| |
| struct Box |
| { |
| char* name; /* name of mailbox */ |
| char* elem; /* last element in name */ |
| uint ix; /* index in box[] array */ |
| uint id; /* id shown in file system */ |
| uint flags; /* FlagNoInferiors, etc. */ |
| uint time; /* last update time */ |
| uint msgid; /* last message id used */ |
| |
| Msg** msg; /* array of messages (can have nils) */ |
| uint nmsg; |
| |
| char* imapname; /* name on IMAP server */ |
| u32int validity; /* IMAP validity number */ |
| uint uidnext; /* IMAP expected next uid */ |
| uint recent; /* IMAP first recent message */ |
| uint exists; /* IMAP last message in box */ |
| uint maxseen; /* maximum IMAP uid seen */ |
| int mark; |
| uint imapinit; /* up-to-date w.r.t. IMAP */ |
| |
| Box* parent; /* in tree */ |
| Box** sub; |
| uint nsub; |
| }; |
| |
| struct Hdr |
| { |
| /* LATER: store date as int, reformat for programs */ |
| /* order known by fs.c */ |
| char* date; |
| char* subject; |
| char* from; |
| char* sender; |
| char* replyto; |
| char* to; |
| char* cc; |
| char* bcc; |
| char* inreplyto; |
| char* messageid; |
| char* digest; |
| }; |
| |
| struct Msg |
| { |
| Box* box; /* mailbox containing msg */ |
| uint ix; /* index in box->msg[] array */ |
| uint id; /* id shown in file system */ |
| uint imapuid; /* IMAP uid */ |
| uint imapid; /* IMAP id */ |
| uint flags; /* FlagDeleted etc. */ |
| uint date; /* smtp envelope date */ |
| uint size; |
| |
| Part** part; /* message subparts - part[0] is root */ |
| uint npart; |
| }; |
| |
| struct Part |
| { |
| Msg* msg; /* msg containing part */ |
| uint ix; /* index in msg->part[] */ |
| uint pix; /* id in parent->sub[] */ |
| Part* parent; /* parent in structure */ |
| Part** sub; /* children in structure */ |
| uint nsub; |
| |
| /* order known by fs.c */ |
| char* type; /* e.g., "text/plain" */ |
| char* idstr; |
| char* desc; |
| char* encoding; |
| char* charset; |
| char* filename; |
| char* raw; |
| char* rawheader; |
| char* rawbody; |
| char* mimeheader; |
| |
| /* order known by fs.c */ |
| uint size; |
| uint lines; |
| |
| char* body; |
| uint nbody; |
| Hdr* hdr; /* RFC822 envelope for message/rfc822 */ |
| }; |
| |
| void boxinit(void); |
| Box* boxbyname(char*); |
| Box* boxbyid(uint); |
| Box* boxcreate(char*); |
| void boxfree(Box*); |
| Box* subbox(Box*, char*); |
| Msg* msgcreate(Box*); |
| Part* partcreate(Msg*, Part*); |
| |
| void hdrfree(Hdr*); |
| |
| Msg* msgbyid(Box*, uint); |
| Msg* msgbyimapuid(Box*, uint, int); |
| void msgfree(Msg*); |
| void msgplumb(Msg*, int); |
| |
| Part* partbyid(Msg*, uint); |
| Part* subpart(Part*, uint); |
| void partfree(Part*); |
| |
| extern Box** boxes; |
| extern uint nboxes; |
| |
| extern Box* rootbox; |
| |