X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fmsg_renderers.c;h=8de9f45d53be633716ea8ad3daf4c5ff730c6479;hb=5d38a76f8f06640e3a3f097d584ac52336110f7c;hp=2be17adfda411f905633b8ed13a9f047647280c4;hpb=64739000c20cd3605c6a68efbea7227796ee6009;p=citadel.git
diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c
index 2be17adfd..8de9f45d5 100644
--- a/webcit/msg_renderers.c
+++ b/webcit/msg_renderers.c
@@ -1,8 +1,9 @@
#include "webcit.h"
#include "webserver.h"
-#include "groupdav.h"
-
+#include "dav.h"
+CtxType CTX_MAILSUM = CTX_NONE;
+CtxType CTX_MIME_ATACH = CTX_NONE;
inline void CheckConvertBufs(struct wcsession *WCC)
{
@@ -45,15 +46,14 @@ void DestroyMessageSummary(void *vMsg)
FreeStrBuf(&Msg->reply_inreplyto);
FreeStrBuf(&Msg->reply_references);
FreeStrBuf(&Msg->cccc);
+ FreeStrBuf(&Msg->ReplyTo);
FreeStrBuf(&Msg->hnod);
FreeStrBuf(&Msg->AllRcpt);
FreeStrBuf(&Msg->Room);
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);
@@ -249,7 +249,7 @@ void examine_nhdr(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
int Conditional_ANONYMOUS_MESSAGE(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return Msg->nhdr != 0;
}
@@ -275,7 +275,7 @@ void examine_from(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_FROM(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->from, 0);
}
@@ -295,7 +295,7 @@ void examine_subj(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_SUBJECT(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
if (TP->Tokens->nParameters == 4)
{
@@ -314,7 +314,7 @@ void tmplput_MAIL_SUMM_SUBJECT(StrBuf *Target, WCTemplputParams *TP)
}
int Conditional_MAIL_SUMM_SUBJECT(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return StrLength(Msg->subj) > 0;
@@ -337,13 +337,13 @@ void examine_msgn(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_INREPLYTO(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->reply_inreplyto, 0);
}
int Conditional_MAIL_SUMM_UNREAD(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return (Msg->Flags & MSGFLAG_READ) != 0;
}
@@ -363,10 +363,35 @@ void examine_wefw(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_REFIDS(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->reply_references, 0);
}
+void examine_replyto(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
+{
+ wcsession *WCC = WC;
+
+ CheckConvertBufs(WCC);
+ FreeStrBuf(&Msg->ReplyTo);
+ Msg->ReplyTo = NewStrBufPlain(NULL, StrLength(HdrLine));
+ StrBuf_RFC822_2_Utf8(Msg->ReplyTo,
+ HdrLine,
+ WCC->DefaultCharset,
+ FoundCharset,
+ WCC->ConvertBuf1,
+ WCC->ConvertBuf2);
+ if (Msg->AllRcpt == NULL)
+ Msg->AllRcpt = NewStrBufPlain(NULL, StrLength(HdrLine));
+ if (StrLength(Msg->AllRcpt) > 0) {
+ StrBufAppendBufPlain(Msg->AllRcpt, HKEY(", "), 0);
+ }
+ StrBufAppendBuf(Msg->AllRcpt, Msg->ReplyTo, 0);
+}
+void tmplput_MAIL_SUMM_REPLYTO(StrBuf *Target, WCTemplputParams *TP)
+{
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
+ StrBufAppendTemplate(Target, TP, Msg->ReplyTo, 0);
+}
void examine_cccc(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
@@ -390,7 +415,7 @@ void examine_cccc(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_CCCC(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->cccc, 0);
}
@@ -405,7 +430,7 @@ void examine_room(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_ORGROOM(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->Room, 0);
}
@@ -417,19 +442,24 @@ void examine_rfca(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_RFCA(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->Rfca, 0);
}
int Conditional_MAIL_SUMM_RFCA(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return StrLength(Msg->Rfca) > 0;
}
int Conditional_MAIL_SUMM_CCCC(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return StrLength(Msg->cccc) > 0;
}
+int Conditional_MAIL_SUMM_REPLYTO(StrBuf *Target, WCTemplputParams *TP)
+{
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
+ return StrLength(Msg->ReplyTo) > 0;
+}
void examine_node(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
@@ -445,12 +475,12 @@ void examine_node(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_OTHERNODE(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->OtherNode, 0);
}
int Conditional_MAIL_SUMM_OTHERNODE(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return StrLength(Msg->OtherNode) > 0;
}
@@ -477,22 +507,22 @@ void examine_rcpt(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_TO(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->to, 0);
}
int Conditional_MAIL_SUMM_TO(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return StrLength(Msg->to) != 0;
}
int Conditional_MAIL_SUMM_SUBJ(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return StrLength(Msg->subj) != 0;
}
void tmplput_MAIL_SUMM_ALLRCPT(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->AllRcpt, 0);
}
@@ -515,27 +545,27 @@ void examine_time(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
void tmplput_MAIL_SUMM_DATE_BRIEF(StrBuf *Target, WCTemplputParams *TP)
{
char datebuf[64];
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
webcit_fmt_date(datebuf, 64, Msg->date, DATEFMT_BRIEF);
StrBufAppendBufPlain(Target, datebuf, -1, 0);
}
void tmplput_MAIL_SUMM_EUID(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->euid, 0);
}
void tmplput_MAIL_SUMM_DATE_FULL(StrBuf *Target, WCTemplputParams *TP)
{
char datebuf[64];
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
webcit_fmt_date(datebuf, 64, Msg->date, DATEFMT_FULL);
StrBufAppendBufPlain(Target, datebuf, -1, 0);
}
void tmplput_MAIL_SUMM_DATE_NO(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendPrintf(Target, "%ld", Msg->date, 0);
}
@@ -589,40 +619,6 @@ 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)
{
if (StrLength(Mime->Data) == 0) {
@@ -757,7 +753,7 @@ void evaluate_mime_part(message_summary *Msg, wc_mime_attachment *Mime)
void tmplput_MAIL_SUMM_NATTACH(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendPrintf(Target, "%ld", GetCount(Msg->Attachments));
}
@@ -778,12 +774,12 @@ void examine_hnod(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
}
void tmplput_MAIL_SUMM_H_NODE(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->hnod, 0);
}
int Conditional_MAIL_SUMM_H_NODE(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return StrLength(Msg->hnod) > 0;
}
@@ -853,7 +849,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);
@@ -862,33 +858,44 @@ void examine_content_type(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCh
void tmplput_MAIL_SUMM_N(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendPrintf(Target, "%ld", Msg->msgnum);
}
+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);
+}
+
int Conditional_MAIL_MIME_ALL(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return GetCount(Msg->Attachments) > 0;
}
int Conditional_MAIL_MIME_SUBMESSAGES(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return GetCount(Msg->Submessages) > 0;
}
int Conditional_MAIL_MIME_ATTACHLINKS(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return GetCount(Msg->AttachLinks) > 0;
}
int Conditional_MAIL_MIME_ATTACH(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
return GetCount(Msg->AllAttach) > 0;
}
@@ -929,7 +936,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);
@@ -941,7 +951,7 @@ void tmplput_EDIT_WIKI_BODY(StrBuf *Target, WCTemplputParams *TP)
void tmplput_MAIL_BODY(StrBuf *Target, WCTemplputParams *TP)
{
- message_summary *Msg = (message_summary*) CTX;
+ message_summary *Msg = (message_summary*) CTX(CTX_MAILSUM);
StrBufAppendTemplate(Target, TP, Msg->MsgBody->Data, 0);
}
@@ -963,7 +973,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;
@@ -999,7 +1010,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));
}
}
@@ -1009,7 +1020,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
{
@@ -1032,10 +1044,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++) @@ -1049,16 +1065,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(""), 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("