X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=webcit%2Fmessages.h;h=32a172a7bfa97a17669c3dbd8d7860faae16fb67;hp=21ae4746782909142e936b19f54e4e4f5a7548a0;hb=0008163783f3a3b6605813f2db138903450f9ea7;hpb=8fae1a3f7a2c53606f1c7418637f141e424e5b26 diff --git a/webcit/messages.h b/webcit/messages.h index 21ae47467..32a172a7b 100644 --- a/webcit/messages.h +++ b/webcit/messages.h @@ -1,9 +1,23 @@ +/* + * Copyright (c) 1996-2013 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ +#ifndef MESSAGES_H +#define MESSAGES_H -extern HashList *MsgHeaderHandler; +extern CtxType CTX_MAILSUM; +extern CtxType CTX_MIME_ATACH; extern HashList *MimeRenderHandler; extern HashList *ReadLoopHandler; typedef struct wc_mime_attachment wc_mime_attachment; -typedef void (*RenderMimeFunc)(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset); +typedef void (*RenderMimeFunc)(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset); typedef struct _RenderMimeFuncStruct { RenderMimeFunc f; } RenderMimeFuncStruct; @@ -39,30 +53,64 @@ typedef struct _message_summary { StrBuf *to; /* the recipient */ StrBuf *subj; /* the title / subject */ StrBuf *reply_inreplyto; + long reply_inreplyto_hash; StrBuf *reply_references; + long reply_references_hash; StrBuf *ReplyTo; StrBuf *cccc; - StrBuf *hnod; StrBuf *AllRcpt; StrBuf *Room; StrBuf *Rfca; - StrBuf *OtherNode; + StrBuf *EnvTo; const StrBuf *PartNum; - HashList *Attachments; /* list of attachments */ HashList *Submessages; HashList *AttachLinks; - HashList *AllAttach; - int hasattachments; - /* The mime part of the message */ wc_mime_attachment *MsgBody; } message_summary; void DestroyMessageSummary(void *vMsg); +/* 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) @@ -79,7 +127,7 @@ static inline message_summary* GetMessagePtrAt(int n, HashList *Summ) typedef void (*ExamineMsgHeaderFunc)(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset); -void evaluate_mime_part(message_summary *Msg, wc_mime_attachment *Mime); +void evaluate_mime_part(StrBuf *Target, WCTemplputParams *TP); typedef enum _eCustomRoomRenderer { @@ -102,12 +150,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); @@ -123,7 +173,8 @@ int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, const StrBuf *section, - const StrBuf **OutMime); + const StrBuf **OutMime, + WCTemplputParams *TP); int load_message(message_summary *Msg, StrBuf *FoundCharset, StrBuf **Error); @@ -141,6 +192,7 @@ typedef struct _SharedMessageStatus { long startmsg; /* which is the start message? */ long nummsgs; /* How many messages are available to your view? */ + long numNewmsgs; /* if you load the seen-status, this is the count of them. */ long num_displayed; /* counted up for LoadMsgFromServer */ /* TODO: unclear who should access this and why */ long lowest_found; /* smallest Message ID found; */ @@ -150,8 +202,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, @@ -236,7 +293,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 @@ -252,9 +314,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 @@ -267,3 +328,14 @@ void RegisterMimeRenderer(const char *HeaderName, long HdrNLen, RenderMimeFunc MimeRenderer, int InlineRenderable, int Priority); + + +/** + * @brief fill the header parts of Msg with the headers loaded by MSG0 + * @param Msg empty message struct, only preinitialized with the msgid + * @param FoundCharset buffer with the prefered charset of the headers + * @param buf linebuffer used to buffer citserver replies + */ +int ReadOneMessageSummary(message_summary *Msg, StrBuf *FoundCharset, StrBuf *Buf); + +#endif