DeleteHash(&Msg->Submessages);
DeleteHash(&Msg->AttachLinks);
DeleteHash(&Msg->AllAttach);
-
- DestroyMimeParts(&Msg->MsgBody);
-
free(Msg);
}
{
message_summary *Msg = (message_summary*) Context;
StrBufAppendBuf(Target, Msg->from, 0);
- lprintf(1,"%s", ChrPtr(Msg->from));
}
FreeStrBuf(&Msg->subj);
Msg->subj = NewStrBufPlain(NULL, StrLength(HdrLine));
StrBuf_RFC822_to_Utf8(Msg->subj, HdrLine, WC->DefaultCharset, FoundCharset);
- lprintf(1,"%s", ChrPtr(Msg->subj));
}
void tmplput_MAIL_SUMM_SUBJECT(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *Context, int ContextType)
{/////TODO: Fwd: and RE: filter!!
message_summary *Msg = (message_summary*) Context;
StrBufAppendBuf(Target, Msg->Rfca, 0);
}
-
+int Conditional_MAIL_SUMM_RFCA(WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ message_summary *Msg = (message_summary*) Context;
+ return StrLength(Msg->Rfca) > 0;
+}
void examine_node(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
void render_MAIL(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *FoundCharset)
{
+ Mime->Data = NewStrBufPlain(NULL, Mime->length);
+ read_message(Mime->Data, HKEY("view_submessage"), Mime->msgnum, 0, Mime->PartNum);
/*
if ( (!IsEmptyStr(mime_submessages)) && (!section[0]) ) {
for (i=0; i<num_tokens(mime_submessages, '|'); ++i) {
void examine_mime_part(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCharset)
{
- wc_mime_attachment *mime;
+ wc_mime_attachment *Mime;
StrBuf *Buf;
- void *vMimeRenderer;
-
- 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, '|');
-
- 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 (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)
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)
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);
}
/*----------------------------------------------------------------------------*/
-
+void tmplput_QUOTED_MAIL_BODY(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *Context, int ContextType)
+{
+ long MsgNum;
+ MsgNum = LBstr(Token->Params[0]->Start, Token->Params[0]->len);
+ read_message(Target, HKEY("view_message_replyquote"), MsgNum, 0, NULL);
+}
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);
}
iconv_t ic = (iconv_t)(-1) ;
#endif
+ if ((StrLength(Mime->Data) == 0) && (Mime->length > 0)) {
+ FreeStrBuf(&Mime->Data);
+ Mime->Data = NewStrBufPlain(NULL, Mime->length);
+ 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... */
if ((strcasecmp(ChrPtr(Mime->Charset), "us-ascii") == 0) &&
(strcasecmp(ChrPtr(Mime->Charset), "UTF-8") == 0))
StrBufAppendPrintf(Target, "%ld", mime->length);
}
+HashList *iterate_get_registered_Attachments(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ return WC->attachments;
+}
+
+void tmplput_ATT_Length(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *Context, int ContextType)
+{
+ wc_attachment *att = (wc_attachment*) Context;
+ StrBufAppendPrintf(Target, "%ld", att->length);
+}
+
+void tmplput_ATT_Contenttype(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *Context, int ContextType)
+{
+ wc_attachment *att = (wc_attachment*) Context;
+ StrBufAppendBuf(Target, att->content_type, 0);
+}
+
+void tmplput_ATT_FileName(StrBuf *Target, int nArgs, WCTemplateToken *Token, void *Context, int ContextType)
+{
+ wc_attachment *att = (wc_attachment*) Context;
+ StrBufAppendBuf(Target, att->filename, 0);
+}
+
+
RegisterNamespace("MAIL:SUMM:REFIDS", 0, 0, 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);
+ RegisterNamespace("ATT:SIZE", 0, 1, tmplput_ATT_Length, CTX_ATT);
+ RegisterNamespace("ATT:TYPE", 0, 1, tmplput_ATT_Contenttype, CTX_ATT);
+ RegisterNamespace("ATT:FILENAME", 0, 1, tmplput_ATT_FileName, CTX_ATT);
-
+ RegisterConditional(HKEY("MAIL:SUMM:RFCA"), 0, Conditional_MAIL_SUMM_RFCA, CTX_MAILSUM);
RegisterConditional(HKEY("COND:MAIL:SUMM:UNREAD"), 0, Conditional_MAIL_SUMM_UNREAD, CTX_MAILSUM);
RegisterConditional(HKEY("COND:MAIL:SUMM:H_NODE"), 0, Conditional_MAIL_SUMM_H_NODE, CTX_MAILSUM);
RegisterConditional(HKEY("COND:MAIL:SUMM:OTHERNODE"), 0, Conditional_MAIL_SUMM_OTHERNODE, CTX_MAILSUM);
RegisterNamespace("MAIL:MIME:LENGTH", 0, 2, tmplput_MIME_Length, CTX_MIME_ATACH);
RegisterNamespace("MAIL:MIME:DATA", 0, 2, tmplput_MIME_Data, CTX_MIME_ATACH);
-
+ RegisterIterator("MSG:ATTACHNAMES", 0, NULL, iterate_get_registered_Attachments,
+ NULL, NULL, CTX_ATT, CTX_NONE);
RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL);
RegisterMimeRenderer(HKEY("text/x-vcard"), render_MIME_VCard);