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();
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,
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,
*/
}
-void render_MIME_VCard(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset)
-{
- wc_mime_attachment *Mime = (wc_mime_attachment *) CTX(CTX_MIME_ATACH);
- wcsession *WCC = WC;
- if (StrLength(Mime->Data) == 0)
- MimeLoadData(Mime);
- if (StrLength(Mime->Data) > 0) {
- StrBuf *Buf;
- Buf = NewStrBuf();
- /** If it's my vCard I can edit it */
- if ( (!strcasecmp(ChrPtr(WCC->CurRoom.name), USERCONFIGROOM))
- || (!strcasecmp(&(ChrPtr(WCC->CurRoom.name)[11]), USERCONFIGROOM))
- || (WC->CurRoom.view == VIEW_ADDRESSBOOK)
- ) {
- StrBufAppendPrintf(Buf, "<a href=\"edit_vcard?msgnum=%ld?partnum=%s\">",
- Mime->msgnum, ChrPtr(Mime->PartNum));
- StrBufAppendPrintf(Buf, "[%s]</a>", _("edit"));
- }
-
- /* In all cases, display the full card */
- display_vcard(Buf, Mime, 0, 1, NULL, -1);
- FreeStrBuf(&Mime->Data);
- Mime->Data = Buf;
- }
-
-}
-
void render_MIME_ICS(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset)
{
wc_mime_attachment *Mime = (wc_mime_attachment *) CTX(CTX_MIME_ATACH);
}
}
+
+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);
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);
}
*/
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);
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 <mkdio.h>
+ 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);
/* mime renderers translate an attachment into webcit viewable html text */
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);
//*/
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 */