1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
#include "webcit.h"
#include "webserver.h"
#include "dav.h"
static inline void CheckConvertBufs(struct wcsession *WCC)
{
if (WCC->ConvertBuf1 == NULL)
WCC->ConvertBuf1 = NewStrBuf();
if (WCC->ConvertBuf2 == NULL)
WCC->ConvertBuf2 = NewStrBuf();
}
int ParseMessageListHeaders_Detail(StrBuf *Line,
const char **pos,
message_summary *Msg,
StrBuf *ConversionBuffer,
void **ViewSpecific)
{
wcsession *WCC = WC;
long len;
long totallen;
CheckConvertBufs(WCC);
totallen = StrLength(Line);
Msg->from = NewStrBufPlain(NULL, totallen);
len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|');
if (len > 0) {
/* Handle senders with RFC2047 encoding */
StrBuf_RFC822_2_Utf8(Msg->from,
ConversionBuffer,
WCC->DefaultCharset,
NULL,
WCC->ConvertBuf1,
WCC->ConvertBuf2);
}
/* node name */
len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|');
if ((len > 0 ) &&
( ((WCC->CurRoom.QRFlags & QR_NETWORK)
|| ((strcasecmp(ChrPtr(ConversionBuffer), ChrPtr(WCC->serv_info->serv_nodename))
&& (strcasecmp(ChrPtr(ConversionBuffer), ChrPtr(WCC->serv_info->serv_fqdn))))))))
{
StrBufAppendBufPlain(Msg->from, HKEY(" @ "), 0);
StrBufAppendBuf(Msg->from, ConversionBuffer, 0);
}
/* Internet address (not used)
* StrBufExtract_token(Msg->inetaddr, Line, 4, '|');
*/
StrBufSkip_NTokenS(Line, pos, '|', 1);
Msg->subj = NewStrBufPlain(NULL, totallen);
FlushStrBuf(ConversionBuffer);
/* we assume the subject is the last parameter inside of the list;
* thus we don't use the tokenizer to fetch it, since it will hick up
* on tokenizer chars inside of the subjects
StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|');
*/
len = 0;
if (*pos != StrBufNOTNULL) {
len = totallen - (*pos - ChrPtr(Line));
StrBufPlain(ConversionBuffer, *pos, len);
*pos = StrBufNOTNULL;
if ((len > 0) &&
(*(ChrPtr(ConversionBuffer) + len - 1) == '|'))
StrBufCutRight(ConversionBuffer, 1);
}
if (len == 0)
StrBufAppendBufPlain(Msg->subj, _("(no subject)"), -1,0);
else {
StrBuf_RFC822_2_Utf8(Msg->subj,
ConversionBuffer,
WCC->DefaultCharset,
NULL,
WCC->ConvertBuf1,
WCC->ConvertBuf2);
}
return 1;
}
int mailview_GetParamsGetServerCall(SharedMessageStatus *Stat,
void **ViewSpecific,
long oper,
char *cmd,
long len,
char *filter,
long flen)
{
DoTemplate(HKEY("msg_listview"),NULL,&NoCtx);
return 200;
}
int mailview_Cleanup(void **ViewSpecific)
{
/* Note: wDumpContent() will output one additional </div> tag. */
/* We ought to move this out into template */
wDumpContent(1);
return 0;
}
void
InitModule_MAILVIEW_RENDERERS
(void)
{
RegisterCTX(CTX_MIME_ATACH);
RegisterReadLoopHandlerset(
VIEW_MAILBOX,
mailview_GetParamsGetServerCall,
NULL, /* TODO: is this right? */
NULL,
ParseMessageListHeaders_Detail,
NULL,
NULL,
mailview_Cleanup,
NULL);
}
|