Began fixing http://uncensored.citadel.org/wiki?page=stefan2012mar07?go=exterminate
[citadel.git] / webcit / msg_renderers.c
index 8255449cab317b5373c36b7aea9c184c14a20b7c..d2de1f4bdf89313408ce64e2eff38ed9169b9876 100644 (file)
@@ -869,15 +869,11 @@ void tmplput_MAIL_SUMM_PERMALINK(StrBuf *Target, WCTemplputParams *TP)
 {
        message_summary *Msg = (message_summary*) CTX;
        char perma_link[1024];
-       char encoded_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);
-
-
-       CtdlEncodeBase64(encoded_link, perma_link, strlen(perma_link), 0);
-       StrBufAppendPrintf(Target, "/B64%s", encoded_link);
+       StrBufAppendPrintf(Target, "%s", perma_link);
 }
 
 
@@ -942,7 +938,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);
@@ -1367,59 +1366,83 @@ int ParseMessageListHeaders_Detail(StrBuf *Line,
        return 1;
 }
 
-/* Spit out the new summary view. This is basically a static page, so clients can cache the layout, all the dirty work is javascript :) */
-void new_summary_view(void) {
-       DoTemplate(HKEY("msg_listview"),NULL,&NoCtx);
-}
-
 
 int mailview_GetParamsGetServerCall(SharedMessageStatus *Stat, 
                                    void **ViewSpecific, 
                                    long oper, 
                                    char *cmd, 
-                                   long len)
-{
-       if (!WC->is_ajax) {
-               new_summary_view();
-               return 200;
-       } else {
-               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") : ""
-                       );
-       }
+                                   long len,
+                                   char *filter,
+                                   long flen)
+{
+       DoTemplate(HKEY("msg_listview"),NULL,&NoCtx);
+
        return 200;
 }
 
-int mailview_RenderView_or_Tail(SharedMessageStatus *Stat, 
+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)
+                               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)
 {
        WCTemplputParams SubTP;
 
-       if (WC->is_ajax)
-               DoTemplate(HKEY("mailsummary_json"),NULL, &SubTP);
+       memset(&SubTP, 0, sizeof(WCTemplputParams));
+       DoTemplate(HKEY("mailsummary_json"),NULL, &SubTP);
        
        return 0;
 }
 
-int mailview_Cleanup(void **ViewSpecific)
+int json_Cleanup(void **ViewSpecific)
 {
        /* Note: wDumpContent() will output one additional </div> tag. */
        /* We ought to move this out into template */
-       if (WC->is_ajax)
-               end_burst();
-       else
-               wDumpContent(1);
+       end_burst();
 
        return 0;
 }
@@ -1434,11 +1457,22 @@ InitModule_MSGRENDERERS
                VIEW_MAILBOX,
                mailview_GetParamsGetServerCall,
                NULL, /* TODO: is this right? */
+               NULL,
                ParseMessageListHeaders_Detail,
                NULL,
-               mailview_RenderView_or_Tail,
+               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,
                         summcmp_date,
@@ -1540,8 +1574,6 @@ InitModule_MSGRENDERERS
        RegisterMimeRenderer(HKEY("text"), render_MAIL_text_plain, 1, 1);
        RegisterMimeRenderer(HKEY("text/html"), render_MAIL_html, 1, 100);
        RegisterMimeRenderer(HKEY(""), render_MAIL_UNKNOWN, 0, 0);
-       /* and finalize the anouncement to the server... */
-       CreateMimeStr();
 
        /* these headers are citserver replies to MSG4 and friends. one evaluator for each */
        RegisterMsgHdr(HKEY("nhdr"), examine_nhdr, 0);
@@ -1572,6 +1604,13 @@ InitModule_MSGRENDERERS
        RegisterMsgHdr(HKEY("path"), examine_path, 0);
 }
 
+void 
+InitModule2_MSGRENDERERS
+(void)
+{
+       /* and finalize the anouncement to the server... */
+       CreateMimeStr();
+}
 void 
 ServerStartModule_MSGRENDERERS
 (void)