X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fmsg_renderers.c;h=ec0ebd1b7205f894ccd12b7796e2b9ef32d09937;hb=ef3faf330286149de6ca8841463b8909a9780ff9;hp=dcb187912186b2bd57b37eda40936367c15a6a70;hpb=156d3eaa1b5d85cb70a79046bd874ab832df6ff1;p=citadel.git diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c index dcb187912..ec0ebd1b7 100644 --- a/webcit/msg_renderers.c +++ b/webcit/msg_renderers.c @@ -5,7 +5,7 @@ CtxType CTX_MAILSUM = CTX_NONE; CtxType CTX_MIME_ATACH = CTX_NONE; -inline void CheckConvertBufs(struct wcsession *WCC) +static inline void CheckConvertBufs(struct wcsession *WCC) { if (WCC->ConvertBuf1 == NULL) WCC->ConvertBuf1 = NewStrBuf(); @@ -329,6 +329,7 @@ void examine_msgn(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) CheckConvertBufs(WCC); FreeStrBuf(&Msg->reply_inreplyto); Msg->reply_inreplyto = NewStrBufPlain(NULL, StrLength(HdrLine)); + Msg->reply_inreplyto_hash = ThreadIdHash(HdrLine); StrBuf_RFC822_2_Utf8(Msg->reply_inreplyto, HdrLine, WCC->DefaultCharset, @@ -355,6 +356,7 @@ void examine_wefw(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset) CheckConvertBufs(WCC); FreeStrBuf(&Msg->reply_references); Msg->reply_references = NewStrBufPlain(NULL, StrLength(HdrLine)); + Msg->reply_references_hash = ThreadIdHash(HdrLine); StrBuf_RFC822_2_Utf8(Msg->reply_references, HdrLine, WCC->DefaultCharset, @@ -877,6 +879,43 @@ void examine_content_type(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCh } } + +int ReadOneMessageSummary(message_summary *Msg, StrBuf *FoundCharset, StrBuf *Buf) +{ + void *vHdr; + headereval *Hdr; + const char *buf; + const char *ebuf; + int nBuf; + long len; + + serv_printf("MSG0 %ld|1", Msg->msgnum); /* ask for headers only */ + + StrBuf_ServGetln(Buf); + if (GetServerStatus(Buf, NULL) != 1) { + return 0; + } + + while (len = StrBuf_ServGetln(Buf), + (len >= 0) && + ((len != 3) || + strcmp(ChrPtr(Buf), "000"))) + { + buf = ChrPtr(Buf); + ebuf = strchr(ChrPtr(Buf), '='); + nBuf = ebuf - buf; + + if (GetHash(MsgHeaderHandler, buf, nBuf, &vHdr) && + (vHdr != NULL)) { + Hdr = (headereval*)vHdr; + StrBufCutLeft(Buf, nBuf + 1); + Hdr->evaluator(Msg, Buf, FoundCharset); + } + else syslog(LOG_INFO, "Don't know how to handle Message Headerline [%s]", ChrPtr(Buf)); + } + return 1; +} + void tmplput_MAIL_SUMM_N(StrBuf *Target, WCTemplputParams *TP) { message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM); @@ -887,12 +926,20 @@ void tmplput_MAIL_SUMM_N(StrBuf *Target, WCTemplputParams *TP) void tmplput_MAIL_SUMM_PERMALINK(StrBuf *Target, WCTemplputParams *TP) { message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM); - 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); + StrBuf *perma_link; + const StrBuf *View; + + perma_link = NewStrBufPlain(HKEY("/readfwd?go=")); + StrBufUrlescAppend(perma_link, WC->CurRoom.name, NULL); + View = SBSTR("view"); + if (View != NULL) { + StrBufAppendBufPlain(perma_link, HKEY("?view="), 0); + StrBufAppendBuf(perma_link, View, 0); + } + StrBufAppendBufPlain(perma_link, HKEY("?start_reading_at="), 0); + StrBufAppendPrintf(perma_link, "%ld#%ld", Msg->msgnum, Msg->msgnum); + StrBufAppendBuf(Target, perma_link, 0); + FreeStrBuf(&perma_link); } @@ -958,6 +1005,7 @@ void tmplput_EDIT_WIKI_BODY(StrBuf *Target, WCTemplputParams *TP) */ if (!havebstr("attach_button")) { char *wikipage = strdup(bstr("page")); + putbstr("format", NewStrBufPlain(HKEY("plain"))); str_wiki_index(wikipage); msgnum = locate_message_by_uid(wikipage); free(wikipage); @@ -1137,6 +1185,41 @@ void render_MAIL_html(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset Mime->Data = Buf; } +#ifdef HAVE_MARKDOWN +/* +char * MarkdownHandleURL(const char* SourceURL, const int len, void* something) +{ + +} +*/ +void render_MAIL_markdown(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset) +{ +#include + wc_mime_attachment *Mime = (wc_mime_attachment *) CTX(CTX_MIME_ATACH); + MMIOT *doc; + char *md_as_html = NULL; + const char *format; + + if (StrLength(Mime->Data) == 0) + return; + + format = bstr("format"); + + if ((format == NULL) || + strcmp(format, "plain")) + { + doc = mkd_string(ChrPtr(Mime->Data), StrLength(Mime->Data), 0); + mkd_basename(doc, "/wiki?page="); + mkd_compile(doc, 0); + if (mkd_document(doc, &md_as_html) != EOF) { + FreeStrBuf(&Mime->Data); + Mime->Data = NewStrBufPlain(md_as_html, -1); + } + mkd_cleanup(doc); + } +} +#endif + void render_MAIL_UNKNOWN(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset) { wc_mime_attachment *Mime = (wc_mime_attachment *) CTX(CTX_MIME_ATACH); @@ -1590,7 +1673,7 @@ InitModule_MSGRENDERERS RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL, 0, 150); RegisterMimeRenderer(HKEY("text/x-vcard"), render_MIME_VCard, 1, 201); RegisterMimeRenderer(HKEY("text/vcard"), render_MIME_VCard, 1, 200); -/* +//* RegisterMimeRenderer(HKEY("text/calendar"), render_MIME_ICS, 1, 501); RegisterMimeRenderer(HKEY("application/ics"), render_MIME_ICS, 1, 500); //*/ @@ -1598,6 +1681,9 @@ InitModule_MSGRENDERERS RegisterMimeRenderer(HKEY("text/plain"), render_MAIL_text_plain, 1, 3); RegisterMimeRenderer(HKEY("text"), render_MAIL_text_plain, 1, 1); RegisterMimeRenderer(HKEY("text/html"), render_MAIL_html, 1, 100); +#ifdef HAVE_MARKDOWN + RegisterMimeRenderer(HKEY("text/x-markdown"), render_MAIL_markdown, 1, 30); +#endif RegisterMimeRenderer(HKEY(""), render_MAIL_UNKNOWN, 0, 0); /* these headers are citserver replies to MSG4 and friends. one evaluator for each */