X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;ds=sidebyside;f=webcit%2Fmsg_renderers.c;h=9c63236903813da9046d502827dc2c5930e4a8a4;hb=dda7d0d3dfaa0a7fede33155e2795f4379d492e7;hp=3e5c29fcef4d1c93ee0e575c381161bbe0c10cba;hpb=7974c7b863e396a87e1479525a10db9b9cf93ca9;p=citadel.git
diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c
index 3e5c29fce..9c6323690 100644
--- a/webcit/msg_renderers.c
+++ b/webcit/msg_renderers.c
@@ -2,9 +2,10 @@
#include "webserver.h"
#include "dav.h"
+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();
@@ -50,6 +51,7 @@ void DestroyMessageSummary(void *vMsg)
FreeStrBuf(&Msg->AllRcpt);
FreeStrBuf(&Msg->Room);
FreeStrBuf(&Msg->Rfca);
+ FreeStrBuf(&Msg->EnvTo);
FreeStrBuf(&Msg->OtherNode);
DeleteHash(&Msg->Attachments); /* list of Attachments */
@@ -483,6 +485,21 @@ int Conditional_MAIL_SUMM_OTHERNODE(StrBuf *Target, WCTemplputParams *TP)
return StrLength(Msg->OtherNode) > 0;
}
+void examine_nvto(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
+{
+ wcsession *WCC = WC;
+
+ CheckConvertBufs(WCC);
+ FreeStrBuf(&Msg->EnvTo);
+ Msg->EnvTo = NewStrBufPlain(NULL, StrLength(HdrLine));
+ StrBuf_RFC822_2_Utf8(Msg->EnvTo,
+ HdrLine,
+ WCC->DefaultCharset,
+ FoundCharset,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
+}
+
void examine_rcpt(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
@@ -570,8 +587,9 @@ void tmplput_MAIL_SUMM_DATE_NO(StrBuf *Target, WCTemplputParams *TP)
-void render_MAIL(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
+void render_MAIL(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset)
{
+ wc_mime_attachment *Mime = (wc_mime_attachment *) CTX(CTX_MIME_ATACH);
const StrBuf *TemplateMime;
if (Mime->Data == NULL)
@@ -592,8 +610,9 @@ void render_MAIL(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset
*/
}
-void render_MIME_VCard(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
+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);
@@ -618,42 +637,9 @@ void render_MIME_VCard(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundC
}
-void render_MIME_VNote(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
-{
- if (StrLength(Mime->Data) == 0)
- MimeLoadData(Mime);
- if (StrLength(Mime->Data) > 0) {
- struct vnote *v;
- StrBuf *Buf;
- char *vcard;
-
- Buf = NewStrBuf();
- vcard = SmashStrBuf(&Mime->Data);
- v = vnote_new_from_str(vcard);
- free (vcard);
- if (v) {
- WCTemplputParams TP;
-
- memset(&TP, 0, sizeof(WCTemplputParams));
- TP.Filter.ContextType = CTX_VNOTE;
- TP.Context = v;
- DoTemplate(HKEY("mail_vnoteitem"),
- Buf, &TP);
-
- vnote_free(v);
- Mime->Data = Buf;
- }
- else {
- if (Mime->Data == NULL)
- Mime->Data = NewStrBuf();
- else
- FlushStrBuf(Mime->Data);
- }
- }
-}
-
-void render_MIME_ICS(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
+void render_MIME_ICS(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset)
{
+ wc_mime_attachment *Mime = (wc_mime_attachment *) CTX(CTX_MIME_ATACH);
if (StrLength(Mime->Data) == 0) {
MimeLoadData(Mime);
}
@@ -744,8 +730,10 @@ void examine_mime_part(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundChars
}
-void evaluate_mime_part(message_summary *Msg, wc_mime_attachment *Mime)
+void evaluate_mime_part(StrBuf *Target, WCTemplputParams *TP)
{
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
+ wc_mime_attachment *Mime = (wc_mime_attachment *) CTX(CTX_MIME_ATACH);
void *vMimeRenderer;
/* just print the root-node */
@@ -882,13 +870,57 @@ void examine_content_type(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCh
Hdr = (headereval*)vHdr;
Hdr->evaluator(Msg, Value, FoundCharset);
}
- else syslog(1, "don't know how to handle content type sub-header[%s]\n", ChrPtr(Token));
+ else syslog(LOG_WARNING, "don't know how to handle content type sub-header[%s]\n", ChrPtr(Token));
}
FreeStrBuf(&Token);
FreeStrBuf(&Value);
}
}
+
+message_summary *ReadOneMessageSummary(StrBuf *RawMessage, const char *DefaultSubject, StrBuf *FoundCharset, long MsgNum)
+{
+ void *vHdr;
+ headereval *Hdr;
+ message_summary *Msg;
+ StrBuf *Buf;
+ const char *buf;
+ const char *ebuf;
+ int nBuf;
+ long len;
+
+ Buf = NewStrBuf();
+
+ serv_printf("MSG0 %ld|1", MsgNum); /* ask for headers only */
+
+ StrBuf_ServGetln(Buf);
+ if (GetServerStatus(Buf, NULL) == 1) {
+ FreeStrBuf(&Buf);
+ return NULL;
+ }
+
+ Msg = (message_summary*)malloc(sizeof(message_summary));
+ memset(Msg, 0, sizeof(message_summary));
+ 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 Msg;
+}
+
void tmplput_MAIL_SUMM_N(StrBuf *Target, WCTemplputParams *TP)
{
message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
@@ -970,6 +1002,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);
@@ -989,23 +1022,25 @@ void tmplput_MAIL_BODY(StrBuf *Target, WCTemplputParams *TP)
}
-void render_MAIL_variformat(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
+void render_MAIL_variformat(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset)
{
/* Messages in legacy Citadel variformat get handled thusly... */
- StrBuf *Target = NewStrBufPlain(NULL, StrLength(Mime->Data));
- FmOut(Target, "JUSTIFY", Mime->Data);
+ wc_mime_attachment *Mime = (wc_mime_attachment *) CTX(CTX_MIME_ATACH);
+ StrBuf *TTarget = NewStrBufPlain(NULL, StrLength(Mime->Data));
+ FmOut(TTarget, "JUSTIFY", Mime->Data);
FreeStrBuf(&Mime->Data);
- Mime->Data = Target;
+ Mime->Data = TTarget;
}
-void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
+void render_MAIL_text_plain(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset)
{
+ wc_mime_attachment *Mime = (wc_mime_attachment *) CTX(CTX_MIME_ATACH);
const char *ptr, *pte;
const char *BufPtr = NULL;
StrBuf *Line;
StrBuf *Line1;
StrBuf *Line2;
- StrBuf *Target;
+ StrBuf *TTarget;
long Linecount;
long nEmptyLines;
int bn = 0;
@@ -1043,7 +1078,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) ) {
- syslog(5, "%s:%d iconv_open(UTF-8, %s) failed: %s\n",
+ syslog(LOG_WARNING, "%s:%d iconv_open(UTF-8, %s) failed: %s\n",
__FILE__, __LINE__, ChrPtr(Mime->Charset), strerror(errno));
}
}
@@ -1052,7 +1087,7 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F
Line = NewStrBufPlain(NULL, SIZ);
Line1 = NewStrBufPlain(NULL, SIZ);
Line2 = NewStrBufPlain(NULL, SIZ);
- Target = NewStrBufPlain(NULL, StrLength(Mime->Data));
+ TTarget = NewStrBufPlain(NULL, StrLength(Mime->Data));
Linecount = 0;
nEmptyLines = 0;
if (StrLength(Mime->Data) > 0)
@@ -1079,26 +1114,26 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F
if (StrLength(Line) == 0) {
if (Linecount == 0)
continue;
- StrBufAppendBufPlain(Target, HKEY("
\n"), 0);
+ StrBufAppendBufPlain(TTarget, HKEY("
\n"), 0);
nEmptyLines ++;
continue;
}
nEmptyLines = 0;
for (i = bn; i < bq; i++)
- StrBufAppendBufPlain(Target, HKEY("
"), 0); + StrBufAppendBufPlain(TTarget, HKEY(""), 0); #ifdef HAVE_ICONV if (ConvertIt) { StrBufConvert(Line, Line1, &ic); } #endif - StrBufAppendBufPlain(Target, HKEY(""), 0); + StrBufAppendBufPlain(TTarget, HKEY(""), 0); UrlizeText(Line1, Line, Line2); - StrEscAppend(Target, Line1, NULL, 0, 0); - StrBufAppendBufPlain(Target, HKEY(""), 0); for (i = bq; i < bn; i++) - StrBufAppendBufPlain(Target, HKEY(""), 0); + StrBufAppendBufPlain(TTarget, HKEY("