X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fmsg_renderers.c;h=d2de1f4bdf89313408ce64e2eff38ed9169b9876;hb=dca4414169da8ea7161d5b95fc9ccbefe5d39651;hp=d3a7c423f2b86bef184cee2fb329365607b8ce79;hpb=4979a34ac506540f12389a7ae42d64085636be3b;p=citadel.git diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c index d3a7c423f..d2de1f4bd 100644 --- a/webcit/msg_renderers.c +++ b/webcit/msg_renderers.c @@ -1,6 +1,16 @@ #include "webcit.h" #include "webserver.h" -#include "groupdav.h" +#include "dav.h" + + + +inline void CheckConvertBufs(struct wcsession *WCC) +{ + if (WCC->ConvertBuf1 == NULL) + WCC->ConvertBuf1 = NewStrBuf(); + if (WCC->ConvertBuf2 == NULL) + WCC->ConvertBuf2 = NewStrBuf(); +} /* * message index functions @@ -41,9 +51,7 @@ void DestroyMessageSummary(void *vMsg) FreeStrBuf(&Msg->Rfca); FreeStrBuf(&Msg->OtherNode); - FreeStrBuf(&Msg->reply_to); - - DeleteHash(&Msg->Attachments); /**< list of Accachments */ + DeleteHash(&Msg->Attachments); /* list of Attachments */ DeleteHash(&Msg->Submessages); DeleteHash(&Msg->AttachLinks); DeleteHash(&Msg->AllAttach); @@ -251,9 +259,17 @@ void examine_type(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) void examine_from(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) { + wcsession *WCC = WC; + + CheckConvertBufs(WCC); FreeStrBuf(&Msg->from); Msg->from = NewStrBufPlain(NULL, StrLength(HdrLine)); - StrBuf_RFC822_to_Utf8(Msg->from, HdrLine, WC->DefaultCharset, FoundCharset); + StrBuf_RFC822_2_Utf8(Msg->from, + HdrLine, + WCC->DefaultCharset, + FoundCharset, + WCC->ConvertBuf1, + WCC->ConvertBuf2); } void tmplput_MAIL_SUMM_FROM(StrBuf *Target, WCTemplputParams *TP) { @@ -261,32 +277,61 @@ void tmplput_MAIL_SUMM_FROM(StrBuf *Target, WCTemplputParams *TP) StrBufAppendTemplate(Target, TP, Msg->from, 0); } - - void examine_subj(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) { + wcsession *WCC = WC; + + CheckConvertBufs(WCC); FreeStrBuf(&Msg->subj); Msg->subj = NewStrBufPlain(NULL, StrLength(HdrLine)); - StrBuf_RFC822_to_Utf8(Msg->subj, HdrLine, WC->DefaultCharset, FoundCharset); + StrBuf_RFC822_2_Utf8(Msg->subj, + HdrLine, + WCC->DefaultCharset, + FoundCharset, + WCC->ConvertBuf1, + WCC->ConvertBuf2); } void tmplput_MAIL_SUMM_SUBJECT(StrBuf *Target, WCTemplputParams *TP) -{/*////TODO: Fwd: and RE: filter!!*/ - +{ message_summary *Msg = (message_summary*) CTX; + + if (TP->Tokens->nParameters == 4) + { + const char *pch; + long len; + + GetTemplateTokenString(Target, TP, 3, &pch, &len); + if ((len > 0)&& + (strstr(ChrPtr(Msg->subj), pch) == NULL)) + { + GetTemplateTokenString(Target, TP, 2, &pch, &len); + StrBufAppendBufPlain(Target, pch, len, 0); + } + } StrBufAppendTemplate(Target, TP, Msg->subj, 0); } int Conditional_MAIL_SUMM_SUBJECT(StrBuf *Target, WCTemplputParams *TP) { message_summary *Msg = (message_summary*) CTX; + + return StrLength(Msg->subj) > 0; } void examine_msgn(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) { + wcsession *WCC = WC; + + CheckConvertBufs(WCC); FreeStrBuf(&Msg->reply_inreplyto); Msg->reply_inreplyto = NewStrBufPlain(NULL, StrLength(HdrLine)); - StrBuf_RFC822_to_Utf8(Msg->reply_inreplyto, HdrLine, WC->DefaultCharset, FoundCharset); + StrBuf_RFC822_2_Utf8(Msg->reply_inreplyto, + HdrLine, + WCC->DefaultCharset, + FoundCharset, + WCC->ConvertBuf1, + WCC->ConvertBuf2); } void tmplput_MAIL_SUMM_INREPLYTO(StrBuf *Target, WCTemplputParams *TP) { @@ -297,14 +342,22 @@ void tmplput_MAIL_SUMM_INREPLYTO(StrBuf *Target, WCTemplputParams *TP) int Conditional_MAIL_SUMM_UNREAD(StrBuf *Target, WCTemplputParams *TP) { message_summary *Msg = (message_summary*) CTX; - return Msg->is_new != 0; + return (Msg->Flags & MSGFLAG_READ) != 0; } void examine_wefw(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) { + wcsession *WCC = WC; + + CheckConvertBufs(WCC); FreeStrBuf(&Msg->reply_references); Msg->reply_references = NewStrBufPlain(NULL, StrLength(HdrLine)); - StrBuf_RFC822_to_Utf8(Msg->reply_references, HdrLine, WC->DefaultCharset, FoundCharset); + StrBuf_RFC822_2_Utf8(Msg->reply_references, + HdrLine, + WCC->DefaultCharset, + FoundCharset, + WCC->ConvertBuf1, + WCC->ConvertBuf2); } void tmplput_MAIL_SUMM_REFIDS(StrBuf *Target, WCTemplputParams *TP) { @@ -315,9 +368,17 @@ void tmplput_MAIL_SUMM_REFIDS(StrBuf *Target, WCTemplputParams *TP) void examine_cccc(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) { + wcsession *WCC = WC; + + CheckConvertBufs(WCC); FreeStrBuf(&Msg->cccc); Msg->cccc = NewStrBufPlain(NULL, StrLength(HdrLine)); - StrBuf_RFC822_to_Utf8(Msg->cccc, HdrLine, WC->DefaultCharset, FoundCharset); + StrBuf_RFC822_2_Utf8(Msg->cccc, + HdrLine, + WCC->DefaultCharset, + FoundCharset, + WCC->ConvertBuf1, + WCC->ConvertBuf2); if (Msg->AllRcpt == NULL) Msg->AllRcpt = NewStrBufPlain(NULL, StrLength(HdrLine)); if (StrLength(Msg->AllRcpt) > 0) { @@ -394,9 +455,17 @@ int Conditional_MAIL_SUMM_OTHERNODE(StrBuf *Target, WCTemplputParams *TP) void examine_rcpt(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) { + wcsession *WCC = WC; + + CheckConvertBufs(WCC); FreeStrBuf(&Msg->to); Msg->to = NewStrBufPlain(NULL, StrLength(HdrLine)); - StrBuf_RFC822_to_Utf8(Msg->to, HdrLine, WC->DefaultCharset, FoundCharset); + StrBuf_RFC822_2_Utf8(Msg->to, + HdrLine, + WCC->DefaultCharset, + FoundCharset, + WCC->ConvertBuf1, + WCC->ConvertBuf2); if (Msg->AllRcpt == NULL) Msg->AllRcpt = NewStrBufPlain(NULL, StrLength(HdrLine)); if (StrLength(Msg->AllRcpt) > 0) { @@ -569,7 +638,9 @@ void examine_mime_part(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundChars const char *Ptr = NULL; wc_mime_attachment *Mime; StrBuf *Buf; - + wcsession *WCC = WC; + + CheckConvertBufs(WCC); Mime = (wc_mime_attachment*) malloc(sizeof(wc_mime_attachment)); memset(Mime, 0, sizeof(wc_mime_attachment)); Mime->msgnum = Msg->msgnum; @@ -577,12 +648,22 @@ void examine_mime_part(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundChars Mime->Name = NewStrBuf(); StrBufExtract_NextToken(Buf, HdrLine, &Ptr, '|'); - StrBuf_RFC822_to_Utf8(Mime->Name, Buf, WC->DefaultCharset, FoundCharset); + StrBuf_RFC822_2_Utf8(Mime->Name, + Buf, + WCC->DefaultCharset, + FoundCharset, + WCC->ConvertBuf1, + WCC->ConvertBuf2); StrBufTrim(Mime->Name); StrBufExtract_NextToken(Buf, HdrLine, &Ptr, '|'); Mime->FileName = NewStrBuf(); - StrBuf_RFC822_to_Utf8(Mime->FileName, Buf, WC->DefaultCharset, FoundCharset); + StrBuf_RFC822_2_Utf8(Mime->FileName, + Buf, + WCC->DefaultCharset, + FoundCharset, + WCC->ConvertBuf1, + WCC->ConvertBuf2); StrBufTrim(Mime->FileName); Mime->PartNum = NewStrBuf(); @@ -637,7 +718,7 @@ void evaluate_mime_part(message_summary *Msg, wc_mime_attachment *Mime) void *vMimeRenderer; /* just print the root-node */ - if ((Mime->level == 1) && + if ((Mime->level >= 1) && GetHash(MimeRenderHandler, SKEY(Mime->ContentType), &vMimeRenderer) && vMimeRenderer != NULL) { @@ -646,14 +727,14 @@ void evaluate_mime_part(message_summary *Msg, wc_mime_attachment *Mime) Msg->Submessages = NewHash(1,NULL); Put(Msg->Submessages, SKEY(Mime->PartNum), Mime, reference_free_handler); } - else if ((Mime->level == 1) && + else if ((Mime->level >= 1) && (!strcasecmp(ChrPtr(Mime->Disposition), "inline")) && (!strncasecmp(ChrPtr(Mime->ContentType), "image/", 6)) ){ if (Msg->AttachLinks == NULL) Msg->AttachLinks = NewHash(1,NULL); Put(Msg->AttachLinks, SKEY(Mime->PartNum), Mime, reference_free_handler); } - else if ((Mime->level == 1) && + else if ((Mime->level >= 1) && (StrLength(Mime->ContentType) > 0) && ( (!strcasecmp(ChrPtr(Mime->Disposition), "attachment")) || (!strcasecmp(ChrPtr(Mime->Disposition), "inline")) @@ -681,9 +762,17 @@ void tmplput_MAIL_SUMM_NATTACH(StrBuf *Target, WCTemplputParams *TP) void examine_hnod(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) { + wcsession *WCC = WC; + + CheckConvertBufs(WCC); FreeStrBuf(&Msg->hnod); Msg->hnod = NewStrBufPlain(NULL, StrLength(HdrLine)); - StrBuf_RFC822_to_Utf8(Msg->hnod, HdrLine, WC->DefaultCharset, FoundCharset); + StrBuf_RFC822_2_Utf8(Msg->hnod, + HdrLine, + WCC->DefaultCharset, + FoundCharset, + WCC->ConvertBuf1, + WCC->ConvertBuf2); } void tmplput_MAIL_SUMM_H_NODE(StrBuf *Target, WCTemplputParams *TP) { @@ -762,7 +851,7 @@ void examine_content_type(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCh Hdr = (headereval*)vHdr; Hdr->evaluator(Msg, Value, FoundCharset); } - else lprintf(1, "don't know how to handle content type sub-header[%s]\n", ChrPtr(Token)); + else syslog(1, "don't know how to handle content type sub-header[%s]\n", ChrPtr(Token)); } FreeStrBuf(&Token); FreeStrBuf(&Value); @@ -776,6 +865,17 @@ void tmplput_MAIL_SUMM_N(StrBuf *Target, WCTemplputParams *TP) } +void tmplput_MAIL_SUMM_PERMALINK(StrBuf *Target, WCTemplputParams *TP) +{ + message_summary *Msg = (message_summary*) CTX; + char perma_link[1024]; + + strcpy(perma_link, "/readfwd?go="); + urlesc(&perma_link[12], sizeof(perma_link) - 12, (char *)ChrPtr(WC->CurRoom.name) ); + sprintf(&perma_link[strlen(perma_link)], "?start_reading_at=%ld#%ld", Msg->msgnum, Msg->msgnum); + StrBufAppendPrintf(Target, "%s", perma_link); +} + int Conditional_MAIL_MIME_ALL(StrBuf *Target, WCTemplputParams *TP) { @@ -838,7 +938,10 @@ void tmplput_EDIT_WIKI_BODY(StrBuf *Target, WCTemplputParams *TP) * to do it again. */ if (!havebstr("attach_button")) { - msgnum = locate_message_by_uid(BSTR("page")); + char *wikipage = strdup(bstr("page")); + str_wiki_index(wikipage); + msgnum = locate_message_by_uid(wikipage); + free(wikipage); if (msgnum >= 0L) { Buf = NewStrBuf(); read_message(Buf, HKEY("view_message_wikiedit"), msgnum, NULL, &Mime); @@ -872,7 +975,8 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F StrBuf *Line1; StrBuf *Line2; StrBuf *Target; - + long Linecount; + long nEmptyLines; int bn = 0; int bq = 0; int i; @@ -908,7 +1012,7 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F else { ctdl_iconv_open("UTF-8", ChrPtr(cs), &ic); if (ic == (iconv_t)(-1) ) { - lprintf(5, "%s:%d iconv_open(UTF-8, %s) failed: %s\n", + syslog(5, "%s:%d iconv_open(UTF-8, %s) failed: %s\n", __FILE__, __LINE__, ChrPtr(Mime->Charset), strerror(errno)); } } @@ -918,7 +1022,8 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F Line1 = NewStrBufPlain(NULL, SIZ); Line2 = NewStrBufPlain(NULL, SIZ); Target = NewStrBufPlain(NULL, StrLength(Mime->Data)); - + Linecount = 0; + nEmptyLines = 0; if (StrLength(Mime->Data) > 0) do { @@ -941,10 +1046,14 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F if (i > 0) StrBufCutLeft(Line, i); if (StrLength(Line) == 0) { - StrBufAppendBufPlain(Target, HKEY("
\n"), 0); + if (Linecount == 0) + continue; + StrBufAppendBufPlain(Target, HKEY("
\n"), 0); + + nEmptyLines ++; continue; } - + nEmptyLines = 0; for (i = bn; i < bq; i++) StrBufAppendBufPlain(Target, HKEY("
"), 0); for (i = bq; i < bn; i++) @@ -958,16 +1067,19 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F UrlizeText(Line1, Line, Line2); StrEscAppend(Target, Line1, NULL, 0, 0); - StrBufAppendBufPlain(Target, HKEY("
\n"), 0); + StrBufAppendBufPlain(Target, HKEY("
\n"), 0); bn = bq; + Linecount ++; } while ((BufPtr != StrBufNOTNULL) && (BufPtr != NULL)); + if (nEmptyLines > 0) + StrBufCutRight(Target, nEmptyLines * (sizeof ("
\n") - 1)); for (i = 0; i < bn; i++) StrBufAppendBufPlain(Target, HKEY("
"), 0); - StrBufAppendBufPlain(Target, HKEY("
"), 0); + StrBufAppendBufPlain(Target, HKEY("
"), 0); #ifdef HAVE_ICONV if (ic != (iconv_t)(-1) ) { iconv_close(ic); @@ -1009,7 +1121,7 @@ void render_MAIL_UNKNOWN(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *Foun FlushStrBuf(Mime->Data); StrBufAppendBufPlain(Mime->Data, _("I don't know how to display "), -1, 0); StrBufAppendBuf(Mime->Data, Mime->ContentType, 0); - StrBufAppendBufPlain(Mime->Data, HKEY("
\n"), 0); + StrBufAppendBufPlain(Mime->Data, HKEY("
\n"), 0); } @@ -1130,6 +1242,11 @@ HashList *iterate_get_registered_Attachments(StrBuf *Target, WCTemplputParams *T return WC->attachments; } +void get_registered_Attachments_Count(StrBuf *Target, WCTemplputParams *TP) +{ + StrBufAppendPrintf(Target, "%ld", GetCount (WC->attachments)); +} + void servcmd_do_search(char *buf, long bufsize) { snprintf(buf, bufsize, "MSGS SEARCH|%s", bstr("query")); @@ -1184,18 +1301,28 @@ int ParseMessageListHeaders_Detail(StrBuf *Line, StrBuf *ConversionBuffer) { wcsession *WCC = WC; + long len; + long totallen; + + CheckConvertBufs(WCC); - Msg->from = NewStrBufPlain(NULL, StrLength(Line)); - StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); - if (StrLength(ConversionBuffer) != 0) { + totallen = StrLength(Line); + Msg->from = NewStrBufPlain(NULL, totallen); + len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); + if (len > 0) { /* Handle senders with RFC2047 encoding */ - StrBuf_RFC822_to_Utf8(Msg->from, ConversionBuffer, WCC->DefaultCharset, NULL); + StrBuf_RFC822_2_Utf8(Msg->from, + ConversionBuffer, + WCC->DefaultCharset, + NULL, + WCC->ConvertBuf1, + WCC->ConvertBuf2); } /* node name */ - StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); - if ((StrLength(ConversionBuffer) !=0 ) && - ( ((WCC->CurRoom.QRFlags & QR_NETWORK) + 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)))))))) { @@ -1207,7 +1334,7 @@ int ParseMessageListHeaders_Detail(StrBuf *Line, * StrBufExtract_token(Msg->inetaddr, Line, 4, '|'); */ StrBufSkip_NTokenS(Line, pos, '|', 1); - Msg->subj = NewStrBufPlain(NULL, StrLength(Line)); + Msg->subj = NewStrBufPlain(NULL, totallen); FlushStrBuf(ConversionBuffer); /* we assume the subject is the last parameter inside of the list; @@ -1215,88 +1342,107 @@ int ParseMessageListHeaders_Detail(StrBuf *Line, * on tokenizer chars inside of the subjects StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); */ + len = 0; if (*pos != StrBufNOTNULL) { - StrBufPlain(ConversionBuffer, *pos, - StrLength(Line) - (*pos - ChrPtr(Line))); + len = totallen - (*pos - ChrPtr(Line)); + StrBufPlain(ConversionBuffer, *pos, len); *pos = StrBufNOTNULL; - if ((StrLength(ConversionBuffer) > 0) && - (*(ChrPtr(ConversionBuffer) + - StrLength(ConversionBuffer) - 1) == '|')) + if ((len > 0) && + (*(ChrPtr(ConversionBuffer) + len - 1) == '|')) StrBufCutRight(ConversionBuffer, 1); } - if (StrLength(ConversionBuffer) == 0) + if (len == 0) StrBufAppendBufPlain(Msg->subj, _("(no subject)"), -1,0); else { - StrBuf_RFC822_to_Utf8(Msg->subj, ConversionBuffer, WCC->DefaultCharset, NULL); - if ((StrLength(Msg->subj) > 75) && - (StrBuf_Utf8StrLen(Msg->subj) > 75)) { - StrBuf_Utf8StrCut(Msg->subj, 72); - StrBufAppendBufPlain(Msg->subj, HKEY("..."), 0); - } + StrBuf_RFC822_2_Utf8(Msg->subj, + ConversionBuffer, + WCC->DefaultCharset, + NULL, + WCC->ConvertBuf1, + WCC->ConvertBuf2); } - if ((StrLength(Msg->from) > 25) && - (StrBuf_Utf8StrLen(Msg->from) > 25)) { - StrBuf_Utf8StrCut(Msg->from, 23); - StrBufAppendBufPlain(Msg->from, HKEY("..."), 0); - } return 1; } -/* Spit out the new summary view. This is basically a static page, so clients can cache the layout, all the dirty work is javascript :) */ -void new_summary_view(void) { - DoTemplate(HKEY("msg_listview"),NULL,&NoCtx); -} - int mailview_GetParamsGetServerCall(SharedMessageStatus *Stat, void **ViewSpecific, long oper, char *cmd, - long len) -{ - if (!WC->is_ajax) { - new_summary_view(); - return 200; - } else { - Stat->defaultsortorder = 2; - Stat->sortit = 1; - Stat->load_seen = 1; - /* Generally using maxmsgs|startmsg is not required - in mailbox view, but we have a 'safemode' for clients - (*cough* Exploder) that simply can't handle too many */ - if (havebstr("maxmsgs")) Stat->maxmsgs = ibstr("maxmsgs"); - else Stat->maxmsgs = 9999999; - if (havebstr("startmsg")) Stat->startmsg = lbstr("startmsg"); - snprintf(cmd, len, "MSGS %s|%s||1", - (oper == do_search) ? "SEARCH" : "ALL", - (oper == do_search) ? bstr("query") : "" - ); - } + long len, + char *filter, + long flen) +{ + DoTemplate(HKEY("msg_listview"),NULL,&NoCtx); + return 200; } -int mailview_RenderView_or_Tail(SharedMessageStatus *Stat, +int mailview_Cleanup(void **ViewSpecific) +{ + /* Note: wDumpContent() will output one additional tag. */ + /* We ought to move this out into template */ + wDumpContent(1); + + return 0; +} + + +int json_GetParamsGetServerCall(SharedMessageStatus *Stat, void **ViewSpecific, - long oper) + long oper, + char *cmd, + long len, + char *filter, + long flen) +{ + Stat->defaultsortorder = 2; + Stat->sortit = 1; + Stat->load_seen = 1; + /* Generally using maxmsgs|startmsg is not required + in mailbox view, but we have a 'safemode' for clients + (*cough* Exploder) that simply can't handle too many */ + if (havebstr("maxmsgs")) Stat->maxmsgs = ibstr("maxmsgs"); + else Stat->maxmsgs = 9999999; + if (havebstr("startmsg")) Stat->startmsg = lbstr("startmsg"); + snprintf(cmd, len, "MSGS %s|%s||1", + (oper == do_search) ? "SEARCH" : "ALL", + (oper == do_search) ? bstr("query") : "" + ); + + return 200; +} +int json_MessageListHdr(SharedMessageStatus *Stat, void **ViewSpecific) +{ + /* TODO: make a generic function */ + hprintf("HTTP/1.1 200 OK\r\n"); + hprintf("Content-type: application/json; charset=utf-8\r\n"); + hprintf("Server: %s / %s\r\n", PACKAGE_STRING, ChrPtr(WC->serv_info->serv_software)); + hprintf("Connection: close\r\n"); + hprintf("Pragma: no-cache\r\nCache-Control: no-store\r\nExpires:-1\r\n"); + begin_burst(); + return 0; +} + +int json_RenderView_or_Tail(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper) { WCTemplputParams SubTP; - if (WC->is_ajax) - DoTemplate(HKEY("mailsummary_json"),NULL, &SubTP); + memset(&SubTP, 0, sizeof(WCTemplputParams)); + DoTemplate(HKEY("mailsummary_json"),NULL, &SubTP); return 0; } -int mailview_Cleanup(void **ViewSpecific) +int json_Cleanup(void **ViewSpecific) { /* Note: wDumpContent() will output one additional tag. */ /* We ought to move this out into template */ - if (WC->is_ajax) - end_burst(); - else - wDumpContent(1); + end_burst(); return 0; } @@ -1310,12 +1456,23 @@ InitModule_MSGRENDERERS RegisterReadLoopHandlerset( VIEW_MAILBOX, mailview_GetParamsGetServerCall, - NULL, /// TODO: is this right? + NULL, /* TODO: is this right? */ + NULL, ParseMessageListHeaders_Detail, - NULL, //// "" - mailview_RenderView_or_Tail, + NULL, + NULL, mailview_Cleanup); + RegisterReadLoopHandlerset( + VIEW_JSON_LIST, + json_GetParamsGetServerCall, + json_MessageListHdr, + NULL, /* TODO: is this right? */ + ParseMessageListHeaders_Detail, + NULL, + json_RenderView_or_Tail, + json_Cleanup); + RegisterSortFunc(HKEY("date"), NULL, 0, summcmp_date, @@ -1345,6 +1502,7 @@ InitModule_MSGRENDERERS RegisterNamespace("MAIL:SUMM:DATEFULL", 0, 0, tmplput_MAIL_SUMM_DATE_FULL, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:DATENO", 0, 0, tmplput_MAIL_SUMM_DATE_NO, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:N", 0, 0, tmplput_MAIL_SUMM_N, NULL, CTX_MAILSUM); + RegisterNamespace("MAIL:SUMM:PERMALINK", 0, 0, tmplput_MAIL_SUMM_PERMALINK, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:FROM", 0, 2, tmplput_MAIL_SUMM_FROM, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:TO", 0, 2, tmplput_MAIL_SUMM_TO, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:SUBJECT", 0, 4, tmplput_MAIL_SUMM_SUBJECT, NULL, CTX_MAILSUM); @@ -1402,8 +1560,10 @@ InitModule_MSGRENDERERS RegisterIterator("MSG:ATTACHNAMES", 0, NULL, iterate_get_registered_Attachments, NULL, NULL, CTX_MIME_ATACH, CTX_NONE, IT_NOFLAG); + RegisterNamespace("MSG:NATTACH", 0, 0, get_registered_Attachments_Count, NULL, CTX_NONE); + /* mime renderers translate an attachment into webcit viewable html text */ - RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL, 1, 150); + RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL, 0, 150); RegisterMimeRenderer(HKEY("text/vnote"), render_MIME_VNote, 1, 300); RegisterMimeRenderer(HKEY("text/x-vcard"), render_MIME_VCard, 1, 201); RegisterMimeRenderer(HKEY("text/vcard"), render_MIME_VCard, 1, 200); @@ -1414,8 +1574,6 @@ InitModule_MSGRENDERERS RegisterMimeRenderer(HKEY("text"), render_MAIL_text_plain, 1, 1); RegisterMimeRenderer(HKEY("text/html"), render_MAIL_html, 1, 100); RegisterMimeRenderer(HKEY(""), render_MAIL_UNKNOWN, 0, 0); - /* and finalize the anouncement to the server... */ - CreateMimeStr(); /* these headers are citserver replies to MSG4 and friends. one evaluator for each */ RegisterMsgHdr(HKEY("nhdr"), examine_nhdr, 0); @@ -1446,6 +1604,13 @@ InitModule_MSGRENDERERS RegisterMsgHdr(HKEY("path"), examine_path, 0); } +void +InitModule2_MSGRENDERERS +(void) +{ + /* and finalize the anouncement to the server... */ + CreateMimeStr(); +} void ServerStartModule_MSGRENDERERS (void) @@ -1471,4 +1636,6 @@ SessionDestroyModule_MSGRENDERERS (wcsession *sess) { DeleteHash(&sess->attachments); + FreeStrBuf(&sess->ConvertBuf1); + FreeStrBuf(&sess->ConvertBuf2); }