From: Wilfried Goesgens Date: Sun, 20 Dec 2015 13:59:27 +0000 (+0100) Subject: Split mailview renderers from mailview tokens X-Git-Tag: Release_902~109 X-Git-Url: https://code.citadel.org/?p=citadel.git;a=commitdiff_plain;h=22e4e5ffb65d6973b0a613d5b410f3a9dcf6a71c Split mailview renderers from mailview tokens --- diff --git a/webcit/Makefile.in b/webcit/Makefile.in index 5042e54cd..8538c4c2b 100644 --- a/webcit/Makefile.in +++ b/webcit/Makefile.in @@ -55,10 +55,11 @@ setup: setup.o gettext.o webcit: webserver.o context_loop.o ical_dezonify.o \ cookie_conversion.o locate_host.o summary.o \ webcit.o auth.o tcp_sockets.o mainmenu.o serv_func.o who.o marchlist.o \ - roomops.o roomlist.o roomtokens.o roomviews.o blogview_renderer.o \ - messages.o msg_renderers.o paging.o sysmsgs.o \ + roomops.o roomlist.o roomtokens.o roomviews.o \ + blogview_renderer.o msg_renderers.o jsonview_renderer.o mailview_renderer.o bbsview_renderer.o \ + messages.o paging.o sysmsgs.o \ useredit.o vcard_edit.o preferences.o html2html.o listsub.o roomchat.o \ - graphics.o netconf.o siteconfig.o subst.o bbsview_renderer.o \ + graphics.o netconf.o siteconfig.o subst.o \ calendar.o calendar_tools.o calendar_view.o tasks.o event.o smtpqueue.o \ availability.o iconbar.o icontheme.o crypto.o inetconf.o notes.o wiki.o \ dav_main.o dav_get.o dav_propfind.o dav_report.o fmt_date.o \ @@ -72,10 +73,11 @@ webcit: webserver.o context_loop.o ical_dezonify.o \ $(CC) $(LDFLAGS) -o webcit $(LIBOBJS) \ webserver.o context_loop.o cookie_conversion.o marchlist.o \ webcit.o auth.o tcp_sockets.o mainmenu.o serv_func.o who.o listsub.o \ - roomops.o roomlist.o roomtokens.o roomviews.o blogview_renderer.o \ + roomops.o roomlist.o roomtokens.o roomviews.o \ messages.o msg_renderers.o paging.o sysmsgs.o \ + blogview_renderer.o jsonview_renderer.o mailview_renderer.o bbsview_renderer.o \ useredit.o locate_host.o siteconfig.o subst.o vcard_edit.o roomchat.o \ - graphics.o netconf.o preferences.o html2html.o openid.o bbsview_renderer.o \ + graphics.o netconf.o preferences.o html2html.o openid.o \ summary.o calendar.o calendar_tools.o calendar_view.o tasks.o event.o wiki.o \ availability.o ical_dezonify.o iconbar.o icontheme.o crypto.o inetconf.o notes.o \ dav_main.o dav_get.o dav_propfind.o dav_report.o dav_delete.o \ diff --git a/webcit/jsonview_renderer.c b/webcit/jsonview_renderer.c new file mode 100644 index 000000000..7f2f1b7be --- /dev/null +++ b/webcit/jsonview_renderer.c @@ -0,0 +1,73 @@ +#include "webcit.h" +#include "webserver.h" +#include "dav.h" + +int json_GetParamsGetServerCall(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper, + char *cmd, + long len, + char *filter, + long flen) +{ + Stat->defaultsortorder = 2; + Stat->sortit = 1; + Stat->load_seen = 1; + /* Generally using maxmsgs|startmsg is not required + in mailbox view, but we have a 'safemode' for clients + (*cough* Exploder) that simply can't handle too many */ + if (havebstr("maxmsgs")) Stat->maxmsgs = ibstr("maxmsgs"); + else Stat->maxmsgs = 9999999; + if (havebstr("startmsg")) Stat->startmsg = lbstr("startmsg"); + snprintf(cmd, len, "MSGS %s|%s||1", + (oper == do_search) ? "SEARCH" : "ALL", + (oper == do_search) ? bstr("query") : "" + ); + + return 200; +} +int json_MessageListHdr(SharedMessageStatus *Stat, void **ViewSpecific) +{ + /* TODO: make a generic function */ + hprintf("HTTP/1.1 200 OK\r\n"); + hprintf("Content-type: application/json; charset=utf-8\r\n"); + hprintf("Server: %s / %s\r\n", PACKAGE_STRING, ChrPtr(WC->serv_info->serv_software)); + hprintf("Connection: close\r\n"); + hprintf("Pragma: no-cache\r\nCache-Control: no-store\r\nExpires:-1\r\n"); + begin_burst(); + return 0; +} + +int json_RenderView_or_Tail(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper) +{ + DoTemplate(HKEY("mailsummary_json"),NULL, NULL); + + return 0; +} + +int json_Cleanup(void **ViewSpecific) +{ + /* Note: wDumpContent() will output one additional tag. */ + /* We ought to move this out into template */ + end_burst(); + + return 0; +} + +void +InitModule_JSONRENDERER +(void) +{ + RegisterReadLoopHandlerset( + VIEW_JSON_LIST, + json_GetParamsGetServerCall, + json_MessageListHdr, + NULL, /* TODO: is this right? */ + ParseMessageListHeaders_Detail, + NULL, + json_RenderView_or_Tail, + json_Cleanup); + +} diff --git a/webcit/mailview_renderer.c b/webcit/mailview_renderer.c new file mode 100644 index 000000000..e1fb6ecdc --- /dev/null +++ b/webcit/mailview_renderer.c @@ -0,0 +1,122 @@ +#include "webcit.h" +#include "webserver.h" +#include "dav.h" + +static inline void CheckConvertBufs(struct wcsession *WCC) +{ + if (WCC->ConvertBuf1 == NULL) + WCC->ConvertBuf1 = NewStrBuf(); + if (WCC->ConvertBuf2 == NULL) + WCC->ConvertBuf2 = NewStrBuf(); +} + +int ParseMessageListHeaders_Detail(StrBuf *Line, + const char **pos, + message_summary *Msg, + StrBuf *ConversionBuffer) +{ + wcsession *WCC = WC; + long len; + long totallen; + + CheckConvertBufs(WCC); + + totallen = StrLength(Line); + Msg->from = NewStrBufPlain(NULL, totallen); + len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); + if (len > 0) { + /* Handle senders with RFC2047 encoding */ + StrBuf_RFC822_2_Utf8(Msg->from, + ConversionBuffer, + WCC->DefaultCharset, + NULL, + WCC->ConvertBuf1, + WCC->ConvertBuf2); + } + + /* node name */ + len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); + if ((len > 0 ) && + ( ((WCC->CurRoom.QRFlags & QR_NETWORK) + || ((strcasecmp(ChrPtr(ConversionBuffer), ChrPtr(WCC->serv_info->serv_nodename)) + && (strcasecmp(ChrPtr(ConversionBuffer), ChrPtr(WCC->serv_info->serv_fqdn)))))))) + { + StrBufAppendBufPlain(Msg->from, HKEY(" @ "), 0); + StrBufAppendBuf(Msg->from, ConversionBuffer, 0); + } + + /* Internet address (not used) + * StrBufExtract_token(Msg->inetaddr, Line, 4, '|'); + */ + StrBufSkip_NTokenS(Line, pos, '|', 1); + Msg->subj = NewStrBufPlain(NULL, totallen); + + FlushStrBuf(ConversionBuffer); + /* we assume the subject is the last parameter inside of the list; + * thus we don't use the tokenizer to fetch it, since it will hick up + * on tokenizer chars inside of the subjects + StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); + */ + len = 0; + if (*pos != StrBufNOTNULL) { + len = totallen - (*pos - ChrPtr(Line)); + StrBufPlain(ConversionBuffer, *pos, len); + *pos = StrBufNOTNULL; + if ((len > 0) && + (*(ChrPtr(ConversionBuffer) + len - 1) == '|')) + StrBufCutRight(ConversionBuffer, 1); + } + + if (len == 0) + StrBufAppendBufPlain(Msg->subj, _("(no subject)"), -1,0); + else { + StrBuf_RFC822_2_Utf8(Msg->subj, + ConversionBuffer, + WCC->DefaultCharset, + NULL, + WCC->ConvertBuf1, + WCC->ConvertBuf2); + } + + return 1; +} + + +int mailview_GetParamsGetServerCall(SharedMessageStatus *Stat, + void **ViewSpecific, + long oper, + char *cmd, + long len, + char *filter, + long flen) +{ + DoTemplate(HKEY("msg_listview"),NULL,&NoCtx); + + return 200; +} + +int mailview_Cleanup(void **ViewSpecific) +{ + /* Note: wDumpContent() will output one additional tag. */ + /* We ought to move this out into template */ + wDumpContent(1); + + return 0; +} + +void +InitModule_MAILVIEW_RENDERERS +(void) +{ + RegisterCTX(CTX_MIME_ATACH); + RegisterReadLoopHandlerset( + VIEW_MAILBOX, + mailview_GetParamsGetServerCall, + NULL, /* TODO: is this right? */ + NULL, + ParseMessageListHeaders_Detail, + NULL, + NULL, + mailview_Cleanup); + +} diff --git a/webcit/messages.h b/webcit/messages.h index d81bdea7b..7dd909c33 100644 --- a/webcit/messages.h +++ b/webcit/messages.h @@ -9,6 +9,8 @@ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ +#ifndef MESSAGES_H +#define MESSAGES_H extern CtxType CTX_MAILSUM; extern CtxType CTX_MIME_ATACH; @@ -294,3 +296,6 @@ void RegisterMimeRenderer(const char *HeaderName, long HdrNLen, * @param buf linebuffer used to buffer citserver replies */ int ReadOneMessageSummary(message_summary *Msg, StrBuf *FoundCharset, StrBuf *Buf); + + +#endif diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c index 13451c169..d04959865 100644 --- a/webcit/msg_renderers.c +++ b/webcit/msg_renderers.c @@ -1374,182 +1374,12 @@ readloop_struct rlid[] = { }; -int ParseMessageListHeaders_Detail(StrBuf *Line, - const char **pos, - message_summary *Msg, - StrBuf *ConversionBuffer) -{ - wcsession *WCC = WC; - long len; - long totallen; - - CheckConvertBufs(WCC); - - totallen = StrLength(Line); - Msg->from = NewStrBufPlain(NULL, totallen); - len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); - if (len > 0) { - /* Handle senders with RFC2047 encoding */ - StrBuf_RFC822_2_Utf8(Msg->from, - ConversionBuffer, - WCC->DefaultCharset, - NULL, - WCC->ConvertBuf1, - WCC->ConvertBuf2); - } - - /* node name */ - len = StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); - if ((len > 0 ) && - ( ((WCC->CurRoom.QRFlags & QR_NETWORK) - || ((strcasecmp(ChrPtr(ConversionBuffer), ChrPtr(WCC->serv_info->serv_nodename)) - && (strcasecmp(ChrPtr(ConversionBuffer), ChrPtr(WCC->serv_info->serv_fqdn)))))))) - { - StrBufAppendBufPlain(Msg->from, HKEY(" @ "), 0); - StrBufAppendBuf(Msg->from, ConversionBuffer, 0); - } - - /* Internet address (not used) - * StrBufExtract_token(Msg->inetaddr, Line, 4, '|'); - */ - StrBufSkip_NTokenS(Line, pos, '|', 1); - Msg->subj = NewStrBufPlain(NULL, totallen); - - FlushStrBuf(ConversionBuffer); - /* we assume the subject is the last parameter inside of the list; - * thus we don't use the tokenizer to fetch it, since it will hick up - * on tokenizer chars inside of the subjects - StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); - */ - len = 0; - if (*pos != StrBufNOTNULL) { - len = totallen - (*pos - ChrPtr(Line)); - StrBufPlain(ConversionBuffer, *pos, len); - *pos = StrBufNOTNULL; - if ((len > 0) && - (*(ChrPtr(ConversionBuffer) + len - 1) == '|')) - StrBufCutRight(ConversionBuffer, 1); - } - - if (len == 0) - StrBufAppendBufPlain(Msg->subj, _("(no subject)"), -1,0); - else { - StrBuf_RFC822_2_Utf8(Msg->subj, - ConversionBuffer, - WCC->DefaultCharset, - NULL, - WCC->ConvertBuf1, - WCC->ConvertBuf2); - } - - return 1; -} - - -int mailview_GetParamsGetServerCall(SharedMessageStatus *Stat, - void **ViewSpecific, - long oper, - char *cmd, - long len, - char *filter, - long flen) -{ - DoTemplate(HKEY("msg_listview"),NULL,&NoCtx); - - return 200; -} - -int mailview_Cleanup(void **ViewSpecific) -{ - /* Note: wDumpContent() will output one additional tag. */ - /* We ought to move this out into template */ - wDumpContent(1); - - return 0; -} - - -int json_GetParamsGetServerCall(SharedMessageStatus *Stat, - void **ViewSpecific, - long oper, - char *cmd, - long len, - char *filter, - long flen) -{ - Stat->defaultsortorder = 2; - Stat->sortit = 1; - Stat->load_seen = 1; - /* Generally using maxmsgs|startmsg is not required - in mailbox view, but we have a 'safemode' for clients - (*cough* Exploder) that simply can't handle too many */ - if (havebstr("maxmsgs")) Stat->maxmsgs = ibstr("maxmsgs"); - else Stat->maxmsgs = 9999999; - if (havebstr("startmsg")) Stat->startmsg = lbstr("startmsg"); - snprintf(cmd, len, "MSGS %s|%s||1", - (oper == do_search) ? "SEARCH" : "ALL", - (oper == do_search) ? bstr("query") : "" - ); - - return 200; -} -int json_MessageListHdr(SharedMessageStatus *Stat, void **ViewSpecific) -{ - /* TODO: make a generic function */ - hprintf("HTTP/1.1 200 OK\r\n"); - hprintf("Content-type: application/json; charset=utf-8\r\n"); - hprintf("Server: %s / %s\r\n", PACKAGE_STRING, ChrPtr(WC->serv_info->serv_software)); - hprintf("Connection: close\r\n"); - hprintf("Pragma: no-cache\r\nCache-Control: no-store\r\nExpires:-1\r\n"); - begin_burst(); - return 0; -} - -int json_RenderView_or_Tail(SharedMessageStatus *Stat, - void **ViewSpecific, - long oper) -{ - DoTemplate(HKEY("mailsummary_json"),NULL, NULL); - - return 0; -} - -int json_Cleanup(void **ViewSpecific) -{ - /* Note: wDumpContent() will output one additional tag. */ - /* We ought to move this out into template */ - end_burst(); - - return 0; -} - - - void InitModule_MSGRENDERERS (void) { RegisterCTX(CTX_MAILSUM); RegisterCTX(CTX_MIME_ATACH); - RegisterReadLoopHandlerset( - VIEW_MAILBOX, - mailview_GetParamsGetServerCall, - NULL, /* TODO: is this right? */ - NULL, - ParseMessageListHeaders_Detail, - NULL, - NULL, - mailview_Cleanup); - - RegisterReadLoopHandlerset( - VIEW_JSON_LIST, - json_GetParamsGetServerCall, - json_MessageListHdr, - NULL, /* TODO: is this right? */ - ParseMessageListHeaders_Detail, - NULL, - json_RenderView_or_Tail, - json_Cleanup); RegisterSortFunc(HKEY("date"), NULL, 0,