From da50399f0bdee623a41a7c7b9a5469ef2a920359 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Sun, 13 Dec 2015 16:26:18 +0100 Subject: [PATCH] Allow to stack contexts into message renderers. --- .../emailaddresses/email_recipientstrings.txt | 2 ++ webcit/bbsview_renderer.c | 2 +- webcit/blogview_renderer.c | 28 ++++++++++--------- webcit/messages.c | 14 +++++----- webcit/messages.h | 3 +- webcit/msg_renderers.c | 8 +++--- webcit/smtpqueue.c | 2 +- webcit/vcard_edit.c | 2 +- webcit/wiki.c | 2 +- 9 files changed, 34 insertions(+), 29 deletions(-) diff --git a/libcitadel/tests/testdata/emailaddresses/email_recipientstrings.txt b/libcitadel/tests/testdata/emailaddresses/email_recipientstrings.txt index f7877dd91..d4dcc0c4b 100644 --- a/libcitadel/tests/testdata/emailaddresses/email_recipientstrings.txt +++ b/libcitadel/tests/testdata/emailaddresses/email_recipientstrings.txt @@ -6,3 +6,5 @@ Art Cancro , Art Cancro Hüttemann Detlef "Hüttemann Detlef",Wilfried Goesgens , Lang Adrian , Gohr Andreas Holger Müller +=?utf-8?Q?voycontigo_-_5_Jahre_Barfu=C3=9Fschuhexperten!?= . +=?utf-8?B?6LS56bqf5Y2T?= . diff --git a/webcit/bbsview_renderer.c b/webcit/bbsview_renderer.c index aefcccf95..d9f255ac0 100644 --- a/webcit/bbsview_renderer.c +++ b/webcit/bbsview_renderer.c @@ -285,7 +285,7 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, } } if (BBS->msgs[i] > 0L) { - read_message(WC->WBuf, HKEY("view_message"), BBS->msgs[i], NULL, &Mime); + read_message(WC->WBuf, HKEY("view_message"), BBS->msgs[i], NULL, &Mime, NULL); } if ( (i == (BBS->num_msgs - 1)) diff --git a/webcit/blogview_renderer.c b/webcit/blogview_renderer.c index 0a0510a29..d727650bf 100644 --- a/webcit/blogview_renderer.c +++ b/webcit/blogview_renderer.c @@ -111,19 +111,19 @@ void tmplput_blog_comment_unread_count(StrBuf *Target, WCTemplputParams *TP) { /* * Render a single blog post and (optionally) its comments */ -void blogpost_render(blogpost *bp, int with_comments) +void blogpost_render(blogpost *bp, int with_comments, WCTemplputParams *TP) { wcsession *WCC = WC; WCTemplputParams SubTP; const StrBuf *Mime; int i; - memset(&SubTP, 0, sizeof(WCTemplputParams)); - StackContext(NULL, &SubTP, bp, CTX_BLOGPOST, 0, NULL); + memset(&SubTP, 0, sizeof(WCTemplputParams)); + StackContext(TP, &SubTP, bp, CTX_BLOGPOST, 0, NULL); /* Always show the top level post, unless we somehow ended up with an empty list */ if (bp->num_msgs > 0) { - read_message(WC->WBuf, HKEY("view_blog_post"), bp->msgs[0], NULL, &Mime); + read_message(WC->WBuf, HKEY("view_blog_post"), bp->msgs[0], NULL, &Mime, TP); } if (with_comments) { @@ -131,7 +131,7 @@ void blogpost_render(blogpost *bp, int with_comments) DoTemplate(HKEY("view_blog_show_commentlink"), WCC->WBuf, &SubTP); for (i=1; inum_msgs; ++i) { - read_message(WC->WBuf, HKEY("view_blog_comment"), bp->msgs[i], NULL, &Mime); + read_message(WC->WBuf, HKEY("view_blog_comment"), bp->msgs[i], NULL, &Mime, &SubTP); } DoTemplate(HKEY("view_blog_comment_box"), WCC->WBuf, &SubTP); } @@ -297,9 +297,11 @@ int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper) int firstp = 0; int maxp = 0; WCTemplputParams SubTP; + WCTemplputParams StopSubTP; blogpost oneBP; memset(&SubTP, 0, sizeof(WCTemplputParams)); + memset(&StopSubTP, 0, sizeof(WCTemplputParams)); memset(&oneBP, 0, sizeof(blogpost)); /* Comments are shown if we are only viewing a single blog post */ @@ -327,7 +329,7 @@ int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper) } } if (unread_count == 1) { - blogpost_render(unread_bp, 1); + blogpost_render(unread_bp, 1, NULL);/// TODO other than null? DeleteHashPos(&it); return 0; @@ -370,22 +372,22 @@ int blogview_render(SharedMessageStatus *Stat, void **ViewSpecific, long oper) /* Now go through the list and render what we've got */ for (i=start_here; i 0) && (i == start_here)) { - int j = i - maxp; - if (j < 0) j = 0; - StackContext(NULL, &SubTP, &blogposts[j], CTX_BLOGPOST, 0, NULL); DoTemplate(HKEY("view_blog_post_start"), WCC->WBuf, &SubTP); - UnStackContext(&SubTP); } if (i < (start_here + maxp)) { - blogpost_render(blogposts[i], with_comments); + blogpost_render(blogposts[i], with_comments, &SubTP); } else if (i == (start_here + maxp)) { - StackContext(NULL, &SubTP, &blogposts[i], CTX_BLOGPOST, 0, NULL); + StackContext(&SubTP, &StopSubTP, &blogposts[i], CTX_BLOGPOST, 0, NULL); DoTemplate(HKEY("view_blog_post_stop"), WCC->WBuf, &SubTP); - UnStackContext(&SubTP); + UnStackContext(&StopSubTP); } + UnStackContext(&SubTP); } /* Done. We are only freeing the array of pointers; the data itself diff --git a/webcit/messages.c b/webcit/messages.c index 405656eab..7ac906d62 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -171,7 +171,7 @@ int load_message(message_summary *Msg, * printable_view Nonzero to display a printable view * section Optional for encapsulated message/rfc822 submessage */ -int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, const StrBuf *PartNum, const StrBuf **OutMime) +int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, const StrBuf *PartNum, const StrBuf **OutMime, WCTemplputParams *TP) { StrBuf *Buf; StrBuf *FoundCharset; @@ -208,7 +208,7 @@ int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, co StrBufTrim(Buf); StrBufLowerCase(Buf); - StackContext(NULL, &SuperTP, Msg, CTX_MAILSUM, 0, NULL); + StackContext(TP, &SuperTP, Msg, CTX_MAILSUM, 0, NULL); { /* Locate a renderer capable of converting this MIME part into HTML */ if (GetHash(MimeRenderHandler, SKEY(Buf), &vHdr) && @@ -357,9 +357,9 @@ void handle_one_message(void) case ePOST: Tmpl = sbstr("template"); if (StrLength(Tmpl) > 0) - read_message(WCC->WBuf, SKEY(Tmpl), msgnum, NULL, &Mime); + read_message(WCC->WBuf, SKEY(Tmpl), msgnum, NULL, &Mime, NULL); else - read_message(WCC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime); + read_message(WCC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime, NULL); http_transmit_thing(ChrPtr(Mime), 0); break; case eDELETE: @@ -416,9 +416,9 @@ void embed_message(void) { case ePOST: Tmpl = sbstr("template"); if (StrLength(Tmpl) > 0) - read_message(WCC->WBuf, SKEY(Tmpl), msgnum, NULL, &Mime); + read_message(WCC->WBuf, SKEY(Tmpl), msgnum, NULL, &Mime, NULL); else - read_message(WCC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime); + read_message(WCC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime, NULL); http_transmit_thing(ChrPtr(Mime), 0); break; case eDELETE: @@ -455,7 +455,7 @@ void print_message(void) { begin_burst(); - read_message(WC->WBuf, HKEY("view_message_print"), msgnum, NULL, &Mime); + read_message(WC->WBuf, HKEY("view_message_print"), msgnum, NULL, &Mime, NULL); wDumpContent(0); } diff --git a/webcit/messages.h b/webcit/messages.h index eb014f438..d81bdea7b 100644 --- a/webcit/messages.h +++ b/webcit/messages.h @@ -139,7 +139,8 @@ int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, const StrBuf *section, - const StrBuf **OutMime); + const StrBuf **OutMime, + WCTemplputParams *TP); int load_message(message_summary *Msg, StrBuf *FoundCharset, StrBuf **Error); diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c index d68911edc..13451c169 100644 --- a/webcit/msg_renderers.c +++ b/webcit/msg_renderers.c @@ -598,7 +598,7 @@ void render_MAIL(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset) Mime->Data = NewStrBufPlain(NULL, Mime->length); else FlushStrBuf(Mime->Data); - read_message(Mime->Data, HKEY("view_submessage"), Mime->msgnum, Mime->PartNum, &TemplateMime); + read_message(Mime->Data, HKEY("view_submessage"), Mime->msgnum, Mime->PartNum, &TemplateMime, TP); /* if ( (!IsEmptyStr(mime_submessages)) && (!section[0]) ) { for (i=0; i= 0L) { Buf = NewStrBuf(); - read_message(Buf, HKEY("view_message_wikiedit"), msgnum, NULL, &Mime); + read_message(Buf, HKEY("view_message_wikiedit"), msgnum, NULL, &Mime, TP); StrBufAppendTemplate(Target, TP, Buf, 1); FreeStrBuf(&Buf); } diff --git a/webcit/smtpqueue.c b/webcit/smtpqueue.c index ff9e9dc8e..b9b6de783 100644 --- a/webcit/smtpqueue.c +++ b/webcit/smtpqueue.c @@ -373,7 +373,7 @@ int qview_LoadMsgFromServer(SharedMessageStatus *Stat, const StrBuf *Mime; /* Not (yet?) needed here? calview *c = (calview *) *ViewSpecific; */ - read_message(WCC->WBuf, HKEY("view_mailq_message_bearer"), Msg->msgnum, NULL, &Mime); + read_message(WCC->WBuf, HKEY("view_mailq_message_bearer"), Msg->msgnum, NULL, &Mime, NULL); return 0; } diff --git a/webcit/vcard_edit.c b/webcit/vcard_edit.c index d5cbe0b35..608d74025 100644 --- a/webcit/vcard_edit.c +++ b/webcit/vcard_edit.c @@ -1030,7 +1030,7 @@ int vcard_RenderView_or_Tail(SharedMessageStatus *Stat, void **ViewSpecific, lon VS = (vcardview_struct*) *ViewSpecific; if (VS->is_singlecard) - read_message(WC->WBuf, HKEY("view_message"), lbstr("startmsg"), NULL, &Mime); + read_message(WC->WBuf, HKEY("view_message"), lbstr("startmsg"), NULL, &Mime, NULL); else do_addrbook_view(VS); /* Render the address book */ return 0; diff --git a/webcit/wiki.c b/webcit/wiki.c index ec746fe86..0ea7dd120 100644 --- a/webcit/wiki.c +++ b/webcit/wiki.c @@ -76,7 +76,7 @@ void display_wiki_page_backend(char *pagename, char *rev, int do_revert) } if (msgnum >= 0L) { - read_message(WCC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime); + read_message(WCC->WBuf, HKEY("view_message"), msgnum, NULL, &Mime, NULL); return; } -- 2.30.2