Split mailview renderers from mailview tokens
authorWilfried Goesgens <willi@arangodb.com>
Sun, 20 Dec 2015 13:59:27 +0000 (14:59 +0100)
committerWilfried Goesgens <willi@arangodb.com>
Sun, 20 Dec 2015 13:59:27 +0000 (14:59 +0100)
webcit/Makefile.in
webcit/jsonview_renderer.c [new file with mode: 0644]
webcit/mailview_renderer.c [new file with mode: 0644]
webcit/messages.h
webcit/msg_renderers.c

index 5042e54cd562c61d99276a0736d51ea0f18a704b..8538c4c2bc5d2a0b7aa2867155c028b57a50ee42 100644 (file)
@@ -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 (file)
index 0000000..7f2f1b7
--- /dev/null
@@ -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 </div> 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 (file)
index 0000000..e1fb6ec
--- /dev/null
@@ -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 </div> 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);
+
+}
index d81bdea7ba47a13a2916fe33b4ec8ff255897995..7dd909c33668784a34af6e0cc2c2bb192f85a328 100644 (file)
@@ -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
index 13451c169c1fd43c50b98e47eec70fb3826b999f..d04959865188d830015890c6bfa9f9c1b66cefed 100644 (file)
@@ -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 </div> 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 </div> 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,