* finish message displaying.
authorWilfried Göesgens <willi@citadel.org>
Sat, 15 Nov 2008 13:09:57 +0000 (13:09 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sat, 15 Nov 2008 13:09:57 +0000 (13:09 +0000)
webcit/context_loop.c
webcit/messages.c
webcit/msg_renderers.c
webcit/static/t/view_message.html
webcit/static/t/view_message_inline_attach.html
webcit/webcit.c
webcit/webcit.h

index c2943f07e221142ce7fb28f89edebf4f3ab777b2..9bbb477c40418ed28ee477c42ed2cece7bea182d 100644 (file)
@@ -454,6 +454,7 @@ void context_loop(int *sock)
 #ifdef TECH_PREVIEW
        if ((strncmp(ChrPtr(ReqLine), "/sslg", 5) != 0) &&
            (strncmp(ChrPtr(ReqLine), "/static/", 8) != 0) &&
+           (strncmp(ChrPtr(ReqLine), "/tiny_mce/", 10) != 0) &&
            (strncmp(ChrPtr(ReqLine), "/wholist_section", 16) != 0) &&
            (strstr(ChrPtr(ReqLine), "wholist_section") == NULL)) {
 #endif
index 171373b4a48e17c33636bb25ea553300362b2a43..f263d5c1b45160fb2f1a3930a9f5ee1d75367833 100644 (file)
@@ -228,10 +228,12 @@ int summcmp_rdate(const void *s1, const void *s2) {
  * printable_view      Nonzero to display a printable view
  * section             Optional for encapsulated message/rfc822 submessage
  */
-void read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, int printable_view, const StrBuf *section) {
+int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, int printable_view, const StrBuf *PartNum) {
        StrBuf *Buf;
        StrBuf *Token;
        StrBuf *FoundCharset;
+       HashPos  *it;
+       void *vMime;
        message_summary *Msg = NULL;
        headereval *Hdr;
        void *vHdr;
@@ -240,20 +242,21 @@ void read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, i
        char reply_references[1024] = "";
        int Done = 0;
        int state=0;
-       
+       long len;
+       const char *Key;
 
        Buf = NewStrBuf();
-       lprintf(1, "-------------------MSG4 %ld|%s--------------\n", msgnum, ChrPtr(section));
-       serv_printf("MSG4 %ld|%s", msgnum, ChrPtr(section));
+       lprintf(1, "-------------------MSG4 %ld|%s--------------\n", msgnum, ChrPtr(PartNum));
+       serv_printf("MSG4 %ld|%s", msgnum, ChrPtr(PartNum));
        StrBuf_ServGetln(Buf);
        if (GetServerStatus(Buf, NULL) != 1) {
                StrBufAppendPrintf(Target, "<strong>");
                StrBufAppendPrintf(Target, _("ERROR:"));
                StrBufAppendPrintf(Target, "</strong> %s<br />\n", &buf[4]);
                FreeStrBuf(&Buf);
-               return;
+               return 0;
        }
-       svputlong("MsgPrintable", printable_view);
+
        /** begin everythingamundo table */
 
 
@@ -261,6 +264,9 @@ void read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, i
        Msg = (message_summary *)malloc(sizeof(message_summary));
        memset(Msg, 0, sizeof(message_summary));
        Msg->msgnum = msgnum;
+       Msg->PartNum = PartNum;
+       Msg->MsgBody =  (wc_mime_attachment*) malloc(sizeof(wc_mime_attachment));
+       memset(Msg->MsgBody, 0, sizeof(wc_mime_attachment));
        FoundCharset = NewStrBuf();
        while ((StrBuf_ServGetln(Buf)>=0) && !Done) {
                if ( (StrLength(Buf)==3) && 
@@ -268,6 +274,7 @@ void read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, i
                {
                        Done = 1;
                        if (state < 2) {
+                               lprintf(1, _("unexpected end of message"));
                                StrBufAppendPrintf(Target, "<i>");
                                StrBufAppendPrintf(Target, _("unexpected end of message"));
                                StrBufAppendPrintf(Target, " (1)</i><br /><br />\n");
@@ -276,7 +283,7 @@ void read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, i
                                FreeStrBuf(&Token);
                                DestroyMessageSummary(Msg);
                                FreeStrBuf(&FoundCharset);
-                               return;
+                               return 0;
                        }
                        else {
                                break;
@@ -305,9 +312,9 @@ void read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, i
                case 1:/* Message Mime Header */
                        if (StrLength(Buf) == 0) {
                                state++;
-                               if (Msg->MsgBody.ContentType == NULL)
+                               if (Msg->MsgBody->ContentType == NULL)
                                        /* end of header or no header? */
-                                       Msg->MsgBody.ContentType = NewStrBufPlain(HKEY("text/plain"));
+                                       Msg->MsgBody->ContentType = NewStrBufPlain(HKEY("text/plain"));
                                 /* usual end of mime header */
                        }
                        else
@@ -326,34 +333,38 @@ void read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, i
                        }
                case 2: /* Message Body */
                        
-                       if (Msg->MsgBody.size_known > 0) {
-                               StrBuf_ServGetBLOB(Msg->MsgBody.Data, Msg->MsgBody.length);
+                       if (Msg->MsgBody->size_known > 0) {
+                               StrBuf_ServGetBLOB(Msg->MsgBody->Data, Msg->MsgBody->length);
                                state ++;
                                        /// todo: check next line, if not 000, append following lines
                        }
                        else if (1){
-                               if (StrLength(Msg->MsgBody.Data) > 0)
-                                       StrBufAppendBufPlain(Msg->MsgBody.Data, "\n", 1, 0);
-                               StrBufAppendBuf(Msg->MsgBody.Data, Buf, 0);
+                               if (StrLength(Msg->MsgBody->Data) > 0)
+                                       StrBufAppendBufPlain(Msg->MsgBody->Data, "\n", 1, 0);
+                               StrBufAppendBuf(Msg->MsgBody->Data, Buf, 0);
                        }
                        break;
                case 3:
-                       StrBufAppendBuf(Msg->MsgBody.Data, Buf, 0);
+                       StrBufAppendBuf(Msg->MsgBody->Data, Buf, 0);
                        break;
                }
        }
+
+       if (Msg->AllAttach == NULL)
+               Msg->AllAttach = NewHash(1,NULL);
+       Put(Msg->AllAttach, SKEY(Msg->MsgBody->PartNum), Msg->MsgBody, DestroyMime);
+
        
        /* strip the bare contenttype, so we ommit charset etc. */
-       StrBufExtract_token(Buf, Msg->MsgBody.ContentType, 0, ';');
+       StrBufExtract_token(Buf, Msg->MsgBody->ContentType, 0, ';');
        StrBufTrim(Buf);
        if (GetHash(MimeRenderHandler, SKEY(Buf), &vHdr) &&
            (vHdr != NULL)) {
                RenderMimeFunc Render;
                Render = (RenderMimeFunc)vHdr;
-               Render(&Msg->MsgBody, NULL, FoundCharset);
+               Render(Msg->MsgBody, NULL, FoundCharset);
        }
 
-
        if (StrLength(Msg->reply_references)> 0) {
                /* Trim down excessively long lists of thread references.  We eliminate the
                 * second one in the list so that the thread root remains intact.
@@ -397,12 +408,21 @@ void read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, i
                        StrBufAppendBuf(Msg->reply_to, Msg->from, 0);
                }
        }
+       it = GetNewHashPos();
+       while (GetNextHashPos(Msg->AllAttach, it, &len, &Key, &vMime) && 
+              (vMime != NULL)) {
+               wc_mime_attachment *Mime = (wc_mime_attachment*) vMime;
+               evaluate_mime_part(Msg, Mime);
+       }
+       DeleteHashPos(&it);
+
        DoTemplate(tmpl, tmpllen, Target, Msg, CTX_MAILSUM);
 
        DestroyMessageSummary(Msg);
        FreeStrBuf(&FoundCharset);
        FreeStrBuf(&Token);
        FreeStrBuf(&Buf);
+       return 1;
 }
 
 
index 8f6232abd08af63d39ffa7fb979dffa72229ebd8..6b81166f9f12937bf96cf937a10414a13f8b8241 100644 (file)
@@ -46,9 +46,6 @@ void DestroyMessageSummary(void *vMsg)
        DeleteHash(&Msg->Submessages);
        DeleteHash(&Msg->AttachLinks);
        DeleteHash(&Msg->AllAttach);
-
-       DestroyMimeParts(&Msg->MsgBody);
-
        free(Msg);
 }
 
@@ -315,82 +312,97 @@ void render_MIME_ICS(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCha
 
 void examine_mime_part(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
 {
-       wc_mime_attachment *mime;
+       wc_mime_attachment *Mime;
        StrBuf *Buf;
-       void *vMimeRenderer;
-       int IsSubSub;
-
-       mime = (wc_mime_attachment*) malloc(sizeof(wc_mime_attachment));
-       memset(mime, 0, sizeof(wc_mime_attachment));
-       mime->msgnum = Msg->msgnum;
+       
+       Mime = (wc_mime_attachment*) malloc(sizeof(wc_mime_attachment));
+       memset(Mime, 0, sizeof(wc_mime_attachment));
+       Mime->msgnum = Msg->msgnum;
        Buf = NewStrBuf();
 
-       mime->Name = NewStrBuf();
-       StrBufExtract_token(mime->Name, HdrLine, 0, '|');
+       Mime->Name = NewStrBuf();
+       StrBufExtract_token(Mime->Name, HdrLine, 0, '|');
+       StrBufTrim(Mime->Name);
 
        StrBufExtract_token(Buf, HdrLine, 1, '|');
-       mime->FileName = NewStrBuf();
-       StrBuf_RFC822_to_Utf8(mime->FileName, Buf, WC->DefaultCharset, FoundCharset);
-
-       mime->PartNum = NewStrBuf();
-       StrBufExtract_token(mime->PartNum, HdrLine, 2, '|');
-       IsSubSub = (strchr(ChrPtr(mime->PartNum), '.') != NULL);
-
-       mime->Disposition = NewStrBuf();
-       StrBufExtract_token(mime->Disposition, HdrLine, 3, '|');
-
-       mime->ContentType = NewStrBuf();
-       StrBufExtract_token(mime->ContentType, HdrLine, 4, '|');
-
-       mime->length = StrBufExtract_int(HdrLine, 5, '|');
-
-       StrBufTrim(mime->Name);
-       StrBufTrim(mime->FileName);
+       Mime->FileName = NewStrBuf();
+       StrBuf_RFC822_to_Utf8(Mime->FileName, Buf, WC->DefaultCharset, FoundCharset);
+       StrBufTrim(Mime->FileName);
+
+       Mime->PartNum = NewStrBuf();
+       StrBufExtract_token(Mime->PartNum, HdrLine, 2, '|');
+       StrBufTrim(Mime->PartNum);
+       if (strchr(ChrPtr(Mime->PartNum), '.') != NULL)
+               Mime->level = 2;
+       else
+               Mime->level = 1;
+
+       Mime->Disposition = NewStrBuf();
+       StrBufExtract_token(Mime->Disposition, HdrLine, 3, '|');
+
+       Mime->ContentType = NewStrBuf();
+       StrBufExtract_token(Mime->ContentType, HdrLine, 4, '|');
+       StrBufTrim(Mime->ContentType);
+       StrBufLowerCase(Mime->ContentType);
+
+       Mime->length = StrBufExtract_int(HdrLine, 5, '|');
+
+       if ( (StrLength(Mime->FileName) == 0) && (StrLength(Mime->Name) > 0) ) {
+               StrBufAppendBuf(Mime->FileName, Mime->Name, 0);
+       }
 
-       if ( (StrLength(mime->FileName) == 0) && (StrLength(mime->Name) > 0) ) {
-               StrBufAppendBuf(mime->FileName, mime->Name, 0);
+       if (StrLength(Msg->PartNum) > 0) {
+               StrBuf *tmp;
+               StrBufPrintf(Buf, "%s.%s", ChrPtr(Msg->PartNum), ChrPtr(Mime->PartNum));
+               tmp = Mime->PartNum;
+               Mime->PartNum = Buf;
+               Buf = tmp;
        }
 
        if (Msg->AllAttach == NULL)
                Msg->AllAttach = NewHash(1,NULL);
-       Put(Msg->AllAttach, SKEY(mime->PartNum), mime, DestroyMime);
+       Put(Msg->AllAttach, SKEY(Mime->PartNum), Mime, DestroyMime);
+       FreeStrBuf(&Buf);
+}
 
-       if (IsSubSub){
-               FreeStrBuf(&Buf);
-               return;
-       }
 
-       if (GetHash(MimeRenderHandler, SKEY(mime->ContentType), &vMimeRenderer) &&
+void evaluate_mime_part(message_summary *Msg, wc_mime_attachment *Mime)
+{
+       void *vMimeRenderer;
+
+       /* just print the root-node */
+       if ((Mime->level == 1) &&
+           GetHash(MimeRenderHandler, SKEY(Mime->ContentType), &vMimeRenderer) &&
            vMimeRenderer != NULL)
        {
-               mime->Renderer = (RenderMimeFunc) vMimeRenderer;
+               Mime->Renderer = (RenderMimeFunc) vMimeRenderer;
                if (Msg->Submessages == NULL)
                        Msg->Submessages = NewHash(1,NULL);
-               Put(Msg->Submessages, SKEY(mime->PartNum), mime, reference_free_handler);
+               Put(Msg->Submessages, SKEY(Mime->PartNum), Mime, reference_free_handler);
        }
-       else if ((!strcasecmp(ChrPtr(mime->Disposition), "inline"))
-                && (!strncasecmp(ChrPtr(mime->ContentType), "image/", 6)) ){
+       else if ((Mime->level == 1) &&
+                (!strcasecmp(ChrPtr(Mime->Disposition), "inline"))
+                && (!strncasecmp(ChrPtr(Mime->ContentType), "image/", 6)) ){
                if (Msg->AttachLinks == NULL)
                        Msg->AttachLinks = NewHash(1,NULL);
-               Put(Msg->AttachLinks, SKEY(mime->PartNum), mime, reference_free_handler);
+               Put(Msg->AttachLinks, SKEY(Mime->PartNum), Mime, reference_free_handler);
        }
-       else if ((StrLength(mime->ContentType) > 0) &&
-                 ( (!strcasecmp(ChrPtr(mime->Disposition), "attachment")) 
-                   || (!strcasecmp(ChrPtr(mime->Disposition), "inline"))
-                   || (!strcasecmp(ChrPtr(mime->Disposition), ""))))
+       else if ((Mime->level == 1) &&
+                (StrLength(Mime->ContentType) > 0) &&
+                 ( (!strcasecmp(ChrPtr(Mime->Disposition), "attachment")) 
+                   || (!strcasecmp(ChrPtr(Mime->Disposition), "inline"))
+                   || (!strcasecmp(ChrPtr(Mime->Disposition), ""))))
        {               
                if (Msg->AttachLinks == NULL)
                        Msg->AttachLinks = NewHash(1,NULL);
-               Put(Msg->AttachLinks, SKEY(mime->PartNum), mime, reference_free_handler);
-               if (strcasecmp(ChrPtr(mime->ContentType), "application/octet-stream") == 0) {
-                       FlushStrBuf(mime->ContentType);
-                       StrBufAppendBufPlain(mime->ContentType,
-                                            GuessMimeByFilename(SKEY(mime->FileName)),
+               Put(Msg->AttachLinks, SKEY(Mime->PartNum), Mime, reference_free_handler);
+               if (strcasecmp(ChrPtr(Mime->ContentType), "application/octet-stream") == 0) {
+                       FlushStrBuf(Mime->ContentType);
+                       StrBufAppendBufPlain(Mime->ContentType,
+                                            GuessMimeByFilename(SKEY(Mime->FileName)),
                                             -1, 0);
                }
        }
-
-       FreeStrBuf(&Buf);
 }
 
 void tmplput_MAIL_SUMM_NATTACH(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *Context, int ContextType)
@@ -425,14 +437,14 @@ int Conditional_MAIL_SUMM_H_NODE(WCTemplateToken *Tokens, void *Context, int Con
 
 
 void examine_text(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
-{////TODO: read messages here
-       Msg->MsgBody.Data = NewStrBuf();
+{
+       Msg->MsgBody->Data = NewStrBuf();
 }
 
 void examine_msg4_partnum(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
 {
-       Msg->MsgBody.PartNum = NewStrBufDup(HdrLine);
-       StrBufTrim(Msg->MsgBody.PartNum);/////TODO: striplt == trim?
+       Msg->MsgBody->PartNum = NewStrBufDup(HdrLine);
+       StrBufTrim(Msg->MsgBody->PartNum);/////TODO: striplt == trim?
 }
 
 void examine_content_encoding(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
@@ -442,18 +454,18 @@ void examine_content_encoding(message_summary *Msg, StrBuf *HdrLine, StrBuf *Fou
 
 void examine_content_lengh(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
 {
-       Msg->MsgBody.length = StrTol(HdrLine);
-       Msg->MsgBody.size_known = 1;
+       Msg->MsgBody->length = StrTol(HdrLine);
+       Msg->MsgBody->size_known = 1;
 }
 
 void examine_content_type(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
 {////TODO
        int len, i;
-       Msg->MsgBody.ContentType = NewStrBufDup(HdrLine);
-       StrBufTrim(Msg->MsgBody.ContentType);/////todo==striplt?
-       len = StrLength(Msg->MsgBody.ContentType);
+       Msg->MsgBody->ContentType = NewStrBufDup(HdrLine);
+       StrBufTrim(Msg->MsgBody->ContentType);/////todo==striplt?
+       len = StrLength(Msg->MsgBody->ContentType);
        for (i=0; i<len; ++i) {
-               if (!strncasecmp(ChrPtr(Msg->MsgBody.ContentType) + i, "charset=", 8)) {/// TODO: WHUT?
+               if (!strncasecmp(ChrPtr(Msg->MsgBody->ContentType) + i, "charset=", 8)) {/// TODO: WHUT?
 //                     safestrncpy(mime_charset, &mime_content_type[i+8],
                        ///                         sizeof mime_charset);
                }
@@ -519,7 +531,7 @@ void tmplput_QUOTED_MAIL_BODY(StrBuf *Target, int nArgs, WCTemplateToken *Token,
 void tmplput_MAIL_BODY(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *Context, int ContextType)
 {
        message_summary *Msg = (message_summary*) Context;
-       StrBufAppendBuf(Target, Msg->MsgBody.Data, 0);
+       StrBufAppendBuf(Target, Msg->MsgBody->Data, 0);
 }
 
 
@@ -553,7 +565,8 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F
        if ((StrLength(Mime->Data) == 0) && (Mime->length > 0)) {
                FreeStrBuf(&Mime->Data);
                Mime->Data = NewStrBufPlain(NULL, Mime->length);
-               read_message(Mime->Data, HKEY("view_submessage"), Mime->msgnum, 0, Mime->PartNum);
+               if (!read_message(Mime->Data, HKEY("view_submessage"), Mime->msgnum, 0, Mime->PartNum))
+                       return;
        }
 
        /* Boring old 80-column fixed format text gets handled this way... */
index 6b01cc69834e3d892359b26136357a2ea40460b9..69e086d7d3bd68c1285355e2860990972cd586c7 100644 (file)
@@ -5,13 +5,13 @@ onMouseOut=document.getElementById("msg<?MAIL:SUMM:N>").style.visibility="hidden
 <div class="message_header">
  <span><?MAIL:SUMM:DATESTR></span>
  <?_("from ")>
- <??("COND:MAIL:ANON",1)><a href="showuser?who=<?MAIL:SUMM:FROM("Q")>"><?MAIL:SUMM:FROM("X")></a><??("X", 1)>
+ <??("COND:MAIL:ANON",1)><a href="showuser?who=<?MAIL:SUMM:FROM("Q")>">"<?MAIL:SUMM:FROM("X")>"&lt;<?MAIL:SUMM:RFCA>&gt;</a><??("X", 1)>
  <?!("COND:MAIL:ANON",2)>***<??("X", 2)>
  <p style="visibility: hidden;" id="msg<?MAIL:SUMM:N>" class="msgbuttons">
 
-   <a href="display_enter?recp=<?MAIL:SUMM:FROM("U")>&references=<?MAIL:SUMM:INREPLYTO("U")>&subject=<?MAIL:SUMM:SUBJECT("U", 0, "Re:%%20", "Re:")>"><span>[</span><?_("Reply")><span>]</span></a> 
+   <a href="display_enter?recp=<?MAIL:SUMM:FROM("U")>&references=<?MAIL:SUMM:INREPLYTO("U")>%3C<?MAIL:SUMM:RFCA("U")>%3E&subject=<?MAIL:SUMM:SUBJECT("U", 0, "Re:%%20", "Re:")>"><span>[</span><?_("Reply")><span>]</span></a> 
 
-   <a href="display_enter?replyquote=<?MAIL:SUMM:N>&recp=<?MAIL:SUMM:FROM("U")>&references=<?MAIL:SUMM:INREPLYTO("U")>&subject=<?MAIL:SUMM:SUBJECT("U", 0, "Re:%%20", "Re:")>"><span>[</span><?_("ReplyQuoted")><span>]</span></a> 
+   <a href="display_enter?replyquote=<?MAIL:SUMM:N>&recp=<?MAIL:SUMM:FROM("U")>&references=<?MAIL:SUMM:INREPLYTO("U")>%3C<?MAIL:SUMM:RFCA("U")>%3E&subject=<?MAIL:SUMM:SUBJECT("U", 0, "Re:%%20", "Re:")>"><span>[</span><?_("ReplyQuoted")><span>]</span></a> 
 
    <a href="display_enter?fwdquote=<?MAIL:SUMM:N>&subject=<?MAIL:SUMM:SUBJECT("U", 0, "Fwd:%%20", "Fwd:")>"><span>[</span><?_("Forward")><span>]</span></a> 
 
@@ -26,12 +26,10 @@ onMouseOut=document.getElementById("msg<?MAIL:SUMM:N>").style.visibility="hidden
  <p class="message_subject"><?MAIL:SUMM:SUBJECT></p>
 </div>
 <div class="message_content"><div align="justify">
-<?MAIL:BODY>    
-<hr>
+<?MAIL:BODY>
 <?!("COND:MAIL:MIME:ATTACH:SUBMESSAGES", 3)>
 <?ITERATE("MAIL:MIME:ATTACH:SUBMESSAGES", "view_message_inline_attach")>
 <?!("X", 3)>
-<hr>
 <?!("COND:MAIL:MIME:ATTACH:LINKS", 2)>
 <?ITERATE("MAIL:MIME:ATTACH:LINKS", "view_message_list_attach")>
 <?!("X", 2)>
index 9c02dcb5bd1358f527b243ec067a0701592d9695..aa57ae280f5a9573b0e3dc772c6ecc0b10b83117 100644 (file)
@@ -1,5 +1 @@
 <?MAIL:MIME:DATA>
-<img src="display_mime_icon?type=<?MAIL:MIME:CONTENTTYPE("U")>" border=0 align=middle>
-<?MAIL:MIME:FILENAME("X")>  (<?MAIL:MIME:CONTENTTYPE>, <?MAIL:MIME:LENGTH> bytes) 
-[ <a href="mimepart/<?MAIL:MIME:MSGNUM>/<?MAIL:MIME:PARTNUM>/<?MAIL:MIME:FILENAME("U")>" target="wc.<?MAIL:MIME:MSGNUM>.<?MAIL:MIME:PARTNUM>"><?_("View")></a> | 
- <a href="mimepart_download/<?MAIL:MIME:MSGNUM>/<?MAIL:MIME:PARTNUM>/<?MAIL:MIME:FILENAME("U")>"><?_("Download")></a> ]<br />
index c4fd3648c431acc66e7a9bf098c6cb35c8ebf812..1983f166fd9a8fbae12b91be5161a35df845e621 100644 (file)
@@ -758,10 +758,12 @@ void http_redirect(const char *whichpage) {
 void http_transmit_thing(const char *content_type,
                         int is_static) {
 
+#ifndef TECH_PREVIEW
        lprintf(9, "http_transmit_thing(%s)%s\n",
                content_type,
                (is_static ? " (static)" : "")
        );
+#endif
        output_headers(0, 0, 0, 0, 0, is_static);
 
        hprintf("Content-type: %s\r\n"
@@ -856,7 +858,9 @@ void output_static(char *what)
 
 
                close(fd);
+#ifndef TECH_PREVIEW
                lprintf(9, "output_static('%s')  %s\n", what, content_type);
+#endif
                http_transmit_thing(content_type, 1);
        }
        if (yesbstr("force_close_session")) {
index 15b7318e5151fbe1aeed4eefc83f551ad3b688fa..4e1f24c491c8cd8536079ef0504db92b68e22aa0 100644 (file)
@@ -401,6 +401,7 @@ void free_attachment(void *vattach);
 typedef struct wc_mime_attachment wc_mime_attachment;
 typedef void (*RenderMimeFunc)(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset);
 struct wc_mime_attachment {
+       int level;
        StrBuf *Name;
        StrBuf *FileName;
        StrBuf *PartNum;
@@ -440,6 +441,7 @@ typedef struct _message_summary {
        StrBuf *Room;
        StrBuf *Rfca;
        StrBuf *OtherNode;
+       const StrBuf *PartNum;
 
        HashList *Attachments;  /**< list of Accachments */
        HashList *Submessages;
@@ -452,17 +454,13 @@ typedef struct _message_summary {
 
 
        /** The mime part of the message */
-       wc_mime_attachment MsgBody;
-
-
-       /** Referencces; don't neeed to be freed: */
-       wc_mime_attachment *cal_partnum_ref;
-       wc_mime_attachment *vcard_partnum_ref;
+       wc_mime_attachment *MsgBody;
 } message_summary;
 void DestroyMessageSummary(void *vMsg);
 
 typedef void (*ExamineMsgHeaderFunc)(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset);
 
+void evaluate_mime_part(message_summary *Msg, wc_mime_attachment *Mime);
 
 
 
@@ -783,7 +781,7 @@ void dump_vars(void);
 void embed_main_menu(void);
 void serv_read(char *buf, int bytes);
 void readloop(char *oper);
-void read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, int printable_view, const StrBuf *section);
+int  read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, int printable_view, const StrBuf *section);
 void do_addrbook_view(addrbookent *addrbook, int num_ab);
 void display_vcard(StrBuf *Target, const char *vcard_source, char alpha, int full, char *storename, long msgnum);
 void text_to_server(char *ptr);