135 lines
2.7 KiB
C
135 lines
2.7 KiB
C
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;
|
|
|