X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fmessages.h;h=872063170affd92ae37b48e0644ee3620f8701d2;hb=fcf307e182caecb456f8eb86b292143db529d8d8;hp=d81bdea7ba47a13a2916fe33b4ec8ff255897995;hpb=da50399f0bdee623a41a7c7b9a5469ef2a920359;p=citadel.git diff --git a/webcit/messages.h b/webcit/messages.h index d81bdea7b..872063170 100644 --- a/webcit/messages.h +++ b/webcit/messages.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996-2013 by the citadel.org team + * Copyright (c) 1996-2020 by the citadel.org team * * This program is open source software. You can redistribute it and/or * modify it under the terms of the GNU General Public License, version 3. @@ -9,10 +9,11 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ +#ifndef MESSAGES_H +#define MESSAGES_H extern CtxType CTX_MAILSUM; extern CtxType CTX_MIME_ATACH; -extern HashList *MsgHeaderHandler; extern HashList *MimeRenderHandler; extern HashList *ReadLoopHandler; typedef struct wc_mime_attachment wc_mime_attachment; @@ -41,67 +42,93 @@ void DestroyMime(void *vMime); #define MSGFLAG_READ (1<<0) typedef struct _message_summary { - long msgnum; /* the message number on the citadel server */ + long msgnum; // the message number on the citadel server int Flags; - - time_t date; /* its creation date */ + time_t date; // its creation date int nhdr; int format_type; StrBuf *euid; - StrBuf *from; /* the author */ - StrBuf *to; /* the recipient */ - StrBuf *subj; /* the title / subject */ + StrBuf *from; // display name of message author + StrBuf *to; // the recipient + StrBuf *subj; // title / subject StrBuf *reply_inreplyto; - long reply_inreplyto_hash; + long reply_inreplyto_hash; StrBuf *reply_references; - long reply_references_hash; + long reply_references_hash; StrBuf *ReplyTo; StrBuf *cccc; - StrBuf *hnod; StrBuf *AllRcpt; StrBuf *Room; - StrBuf *Rfca; + StrBuf *Rfca; // UPN or email address of message author StrBuf *EnvTo; - StrBuf *OtherNode; const StrBuf *PartNum; - - HashList *Attachments; /* list of attachments */ + HashList *Attachments; // list of attachments HashList *Submessages; HashList *AttachLinks; - HashList *AllAttach; - int hasattachments; - - - /* The mime part of the message */ - wc_mime_attachment *MsgBody; + wc_mime_attachment *MsgBody; // the MIME part of the message } message_summary; -void DestroyMessageSummary(void *vMsg); - +void DestroyMessageSummary(void *vMsg); -static inline message_summary* GetMessagePtrAt(int n, HashList *Summ) -{ +/* Maps to msgkeys[] in msgbase.c: */ + +typedef enum _eMessageField { + eAuthor, + eXclusivID, + erFc822Addr, + eHumanNode, + emessageId, + eJournal, + eReplyTo, + eListID, + eMesageText, + eNodeName, + eOriginalRoom, + eMessagePath, + eRecipient, + eSpecialField, + eTimestamp, + eMsgSubject, + eenVelopeTo, + eWeferences, + eCarbonCopY, + eHeaderOnly, + eFormatType, + eMessagePart, + ePevious, + eSubFolder, + eLastHeader +} eMessageField; + +extern const char* fieldMnemonics[]; + +int GetFieldFromMnemonic(eMessageField *f, const char* c); +int EvaluateMsgHdr(const char *HeaderName, long HdrNLen, message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset); +int EvaluateMsgHdrEnum(eMessageField f, message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset); + + +static inline message_summary* GetMessagePtrAt(int n, HashList *Summ) { const char *Key; long HKLen; void *vMsg; - if (Summ == NULL) + if (Summ == NULL) { return NULL; + } GetHashAt(Summ, n, &HKLen, &Key, &vMsg); return (message_summary*) vMsg; } -typedef void (*ExamineMsgHeaderFunc)(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset); +typedef void (*ExamineMsgHeaderFunc)(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset); void evaluate_mime_part(StrBuf *Target, WCTemplputParams *TP); - typedef enum _eCustomRoomRenderer { eUseDefault = VIEW_JOURNAL + 100, eReadEUIDS -}eCustomRoomRenderer; +} eCustomRoomRenderer; enum { do_search, @@ -118,12 +145,14 @@ enum { * @param Line the raw line with your message data * @param Msg put your parser results here... * @param ConversionBuffer if you need some workbuffer, don't free me! + * @param ViewSpecific your view specific context data * @returns 0: failure, trash this message. 1: all right, store it */ typedef int (*load_msg_ptrs_detailheaders) (StrBuf *Line, const char **pos, message_summary *Msg, - StrBuf *ConversionBuffer); + StrBuf *ConversionBuffer, + void **ViewSpecific); typedef void (*readloop_servcmd)(char *buf, long bufsize); @@ -168,8 +197,13 @@ typedef struct _SharedMessageStatus { int load_msg_ptrs(const char *servcmd, const char *filter, - SharedMessageStatus *Stat, - load_msg_ptrs_detailheaders LH); + StrBuf *FoundCharset, + SharedMessageStatus *Stat, + void **ViewSpecific, + load_msg_ptrs_detailheaders LH, + StrBuf *FetchMessageList, + eMessageField *MessageFieldList, + long HeaderCount); typedef int (*GetParamsGetServerCall_func)(SharedMessageStatus *Stat, void **ViewSpecific, @@ -254,7 +288,12 @@ void RegisterReadLoopHandlerset( * VALgrindHALLA. * it also should release the content for delivery via end_burst() or wDumpContent(1); */ - View_Cleanup_func ViewCleanup + View_Cleanup_func ViewCleanup, + /** + * brofwseListFields schould be a NULL-terminated list of message field mnemonics + * that will be the browse vector for the message header list. + */ + const char **browseListFields ); /* GetParamsGetServerCall @@ -270,9 +309,8 @@ RenderView_or_Tail int ParseMessageListHeaders_Detail(StrBuf *Line, const char **pos, message_summary *Msg, - StrBuf *ConversionBuffer); - - + StrBuf *ConversionBuffer, + void **ViewSpecific); /** * @brief function to register the availability to render a specific message @@ -294,3 +332,5 @@ void RegisterMimeRenderer(const char *HeaderName, long HdrNLen, * @param buf linebuffer used to buffer citserver replies */ int ReadOneMessageSummary(message_summary *Msg, StrBuf *FoundCharset, StrBuf *Buf); + +#endif