* BIG rewrite of header handling and slimming of context_loop and session_loop; shuff...
[citadel.git] / webcit / msg_renderers.c
index 6554be70d67d4bf9214c9d1d1f64de7be941acf1..dbb69d20bf0510a0e0c177389c94ba6d6ac64449 100644 (file)
@@ -441,7 +441,7 @@ void tmplput_MAIL_SUMM_DATE_BRIEF(StrBuf *Target, WCTemplputParams *TP)
 {
        char datebuf[64];
        message_summary *Msg = (message_summary*) CTX;
-       webcit_fmt_date(datebuf, Msg->date, 1);
+       webcit_fmt_date(datebuf, 64, Msg->date, DATEFMT_BRIEF);
        StrBufAppendBufPlain(Target, datebuf, -1, 0);
 }
 
@@ -449,7 +449,7 @@ void tmplput_MAIL_SUMM_DATE_FULL(StrBuf *Target, WCTemplputParams *TP)
 {
        char datebuf[64];
        message_summary *Msg = (message_summary*) CTX;
-       webcit_fmt_date(datebuf, Msg->date, 0);
+       webcit_fmt_date(datebuf, 64, Msg->date, DATEFMT_FULL);
        StrBufAppendBufPlain(Target, datebuf, -1, 0);
 }
 void tmplput_MAIL_SUMM_DATE_NO(StrBuf *Target, WCTemplputParams *TP)
@@ -462,8 +462,10 @@ void tmplput_MAIL_SUMM_DATE_NO(StrBuf *Target, WCTemplputParams *TP)
 
 void render_MAIL(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
 {
+       const StrBuf *TemplateMime;
+
        Mime->Data = NewStrBufPlain(NULL, Mime->length);
-       read_message(Mime->Data, HKEY("view_submessage"), Mime->msgnum, 0, Mime->PartNum);
+       read_message(Mime->Data, HKEY("view_submessage"), Mime->msgnum, Mime->PartNum, &TemplateMime);
 /*
        if ( (!IsEmptyStr(mime_submessages)) && (!section[0]) ) {
                for (i=0; i<num_tokens(mime_submessages, '|'); ++i) {
@@ -495,13 +497,42 @@ void render_MIME_VCard(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundC
                }
 
                /* In all cases, display the full card */
-               display_vcard(Buf, ChrPtr(Mime->Data), 0, 1, NULL, Mime->msgnum);
+               display_vcard(Buf, Mime->Data, 0, 1, NULL, Mime->msgnum);
                FreeStrBuf(&Mime->Data);
                Mime->Data = Buf;
        }
 
 }
 
+void render_MIME_VNote(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
+{
+       MimeLoadData(Mime);
+       if (StrLength(Mime->Data) > 0) {
+               struct vnote *v;
+               StrBuf *Buf;
+
+               Buf = NewStrBuf();
+               v = vnote_new_from_str(ChrPtr(Mime->Data));
+               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);
+                       
+                       FreeStrBuf(&Mime->Data);
+                       Mime->Data = Buf;
+               }
+               else
+                       FlushStrBuf(Mime->Data);
+       }
+
+}
+
 void render_MIME_ICS(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
 {
        if (StrLength(Mime->Data) == 0) {
@@ -537,7 +568,7 @@ void examine_mime_part(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundChars
        Mime->PartNum = NewStrBuf();
        StrBufExtract_token(Mime->PartNum, HdrLine, 2, '|');
        StrBufTrim(Mime->PartNum);
-       if (strchr(ChrPtr(Mime->PartNum), '.') != NULL)
+       if (strchr(ChrPtr(Mime->PartNum), '.') != NULL) 
                Mime->level = 2;
        else
                Mime->level = 1;
@@ -550,6 +581,10 @@ void examine_mime_part(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundChars
        StrBufTrim(Mime->ContentType);
        StrBufLowerCase(Mime->ContentType);
 
+       if (!strcmp(ChrPtr(Mime->ContentType), "application/octet-stream")) {
+               StrBufPlain(Mime->ContentType, 
+                           GuessMimeByFilename(SKEY(Mime->FileName)), -1);
+       }
        Mime->length = StrBufExtract_int(HdrLine, 5, '|');
 
        if ( (StrLength(Mime->FileName) == 0) && (StrLength(Mime->Name) > 0) ) {
@@ -742,12 +777,13 @@ int Conditional_MAIL_MIME_ATTACH(StrBuf *Target, WCTemplputParams *TP)
 /*----------------------------------------------------------------------------*/
 void tmplput_QUOTED_MAIL_BODY(StrBuf *Target, WCTemplputParams *TP)
 {
+       const StrBuf *Mime;
         long MsgNum;
        StrBuf *Buf;
 
        MsgNum = LBstr(TKEY(0));
        Buf = NewStrBuf();
-       read_message(Buf, HKEY("view_message_replyquote"), MsgNum, 0, NULL);
+       read_message(Buf, HKEY("view_message_replyquote"), MsgNum, NULL, &Mime);
        StrBufAppendTemplate(Target, TP, Buf, 1);
        FreeStrBuf(&Buf);
 }
@@ -1071,6 +1107,7 @@ readloop_struct rlid[] = {
 
 void SetAccessCommand(long Oper)
 {
+/* TODO: whats achieved by this?
        wcsession *WCC = WC;    
 
        if (WCC->UrlFragment1 != NULL ) {
@@ -1080,6 +1117,7 @@ void SetAccessCommand(long Oper)
        }
        else 
                WCC->UrlFragment1 = NewStrBufPlain(rlid[Oper].name.Key, rlid[Oper].name.len);
+*/
 }
                
 
@@ -1128,7 +1166,7 @@ InitModule_MSGRENDERERS
        RegisterNamespace("MAIL:SUMM:ORGROOM", 0, 2, tmplput_MAIL_SUMM_ORGROOM,  CTX_MAILSUM);
        RegisterNamespace("MAIL:SUMM:RFCA", 0, 2, tmplput_MAIL_SUMM_RFCA,  CTX_MAILSUM);
        RegisterNamespace("MAIL:SUMM:OTHERNODE", 2, 0, tmplput_MAIL_SUMM_OTHERNODE,  CTX_MAILSUM);
-       RegisterNamespace("MAIL:SUMM:REFIDS", 0, 0, tmplput_MAIL_SUMM_REFIDS,  CTX_MAILSUM);
+       RegisterNamespace("MAIL:SUMM:REFIDS", 0, 1, tmplput_MAIL_SUMM_REFIDS,  CTX_MAILSUM);
        RegisterNamespace("MAIL:SUMM:INREPLYTO", 0, 2, tmplput_MAIL_SUMM_INREPLYTO,  CTX_MAILSUM);
        RegisterNamespace("MAIL:BODY", 0, 2, tmplput_MAIL_BODY,  CTX_MAILSUM);
        RegisterNamespace("MAIL:QUOTETEXT", 1, 2, tmplput_QUOTED_MAIL_BODY,  CTX_NONE);
@@ -1175,6 +1213,7 @@ InitModule_MSGRENDERERS
 
        /* mime renderers translate an attachment into webcit viewable html text */
        RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL);
+       RegisterMimeRenderer(HKEY("text/vnote"), render_MIME_VNote);
        RegisterMimeRenderer(HKEY("text/x-vcard"), render_MIME_VCard);
        RegisterMimeRenderer(HKEY("text/vcard"), render_MIME_VCard);
        RegisterMimeRenderer(HKEY("text/calendar"), render_MIME_ICS);
@@ -1213,3 +1252,28 @@ InitModule_MSGRENDERERS
        RegisterMsgHdr(HKEY("suff"), examine_suff, 0);
        RegisterMsgHdr(HKEY("path"), examine_path, 0);
 }
+
+void 
+ServerStartModule_MSGRENDERERS
+(void)
+{
+       MsgHeaderHandler = NewHash(1, NULL);
+       MimeRenderHandler = NewHash(1, NULL);
+}
+
+void 
+ServerShutdownModule_MSGRENDERERS
+(void)
+{
+       DeleteHash(&MsgHeaderHandler);
+       DeleteHash(&MimeRenderHandler);
+}
+
+
+
+void 
+SessionDestroyModule_MSGRENDERERS
+(wcsession *sess)
+{
+       DeleteHash(&sess->attachments);
+}