X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fmsg_renderers.c;h=10e20e90d2f2bfda4cf5baf2be49bf54f83bc62e;hb=5dd116cf07d991263431624a735698374c6fb692;hp=a58f64043a5dbb6aff7e6e5e56568c788fc6f0ed;hpb=0293bdf3780431dfcb548a25226f526bb735ac1f;p=citadel.git diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c index a58f64043..10e20e90d 100644 --- a/webcit/msg_renderers.c +++ b/webcit/msg_renderers.c @@ -51,9 +51,7 @@ void DestroyMessageSummary(void *vMsg) FreeStrBuf(&Msg->Rfca); FreeStrBuf(&Msg->OtherNode); - FreeStrBuf(&Msg->reply_to); - - DeleteHash(&Msg->Attachments); /**< list of Accachments */ + DeleteHash(&Msg->Attachments); /* list of Attachments */ DeleteHash(&Msg->Submessages); DeleteHash(&Msg->AttachLinks); DeleteHash(&Msg->AllAttach); @@ -853,7 +851,7 @@ void examine_content_type(message_summary *Msg, StrBuf *HdrLine, StrBuf *FoundCh Hdr = (headereval*)vHdr; Hdr->evaluator(Msg, Value, FoundCharset); } - else lprintf(1, "don't know how to handle content type sub-header[%s]\n", ChrPtr(Token)); + else syslog(1, "don't know how to handle content type sub-header[%s]\n", ChrPtr(Token)); } FreeStrBuf(&Token); FreeStrBuf(&Value); @@ -867,6 +865,21 @@ void tmplput_MAIL_SUMM_N(StrBuf *Target, WCTemplputParams *TP) } +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); +} + int Conditional_MAIL_MIME_ALL(StrBuf *Target, WCTemplputParams *TP) { @@ -963,7 +976,8 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F StrBuf *Line1; StrBuf *Line2; StrBuf *Target; - + long Linecount; + long nEmptyLines; int bn = 0; int bq = 0; int i; @@ -999,7 +1013,7 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F else { ctdl_iconv_open("UTF-8", ChrPtr(cs), &ic); if (ic == (iconv_t)(-1) ) { - lprintf(5, "%s:%d iconv_open(UTF-8, %s) failed: %s\n", + syslog(5, "%s:%d iconv_open(UTF-8, %s) failed: %s\n", __FILE__, __LINE__, ChrPtr(Mime->Charset), strerror(errno)); } } @@ -1009,7 +1023,8 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F Line1 = NewStrBufPlain(NULL, SIZ); Line2 = NewStrBufPlain(NULL, SIZ); Target = NewStrBufPlain(NULL, StrLength(Mime->Data)); - + Linecount = 0; + nEmptyLines = 0; if (StrLength(Mime->Data) > 0) do { @@ -1032,10 +1047,14 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F if (i > 0) StrBufCutLeft(Line, i); if (StrLength(Line) == 0) { - StrBufAppendBufPlain(Target, HKEY("
\n"), 0); + if (Linecount == 0) + continue; + StrBufAppendBufPlain(Target, HKEY("
\n"), 0); + + nEmptyLines ++; continue; } - + nEmptyLines = 0; for (i = bn; i < bq; i++) StrBufAppendBufPlain(Target, HKEY("
"), 0); for (i = bq; i < bn; i++) @@ -1049,16 +1068,19 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *F UrlizeText(Line1, Line, Line2); StrEscAppend(Target, Line1, NULL, 0, 0); - StrBufAppendBufPlain(Target, HKEY("
\n"), 0); + StrBufAppendBufPlain(Target, HKEY("
\n"), 0); bn = bq; + Linecount ++; } while ((BufPtr != StrBufNOTNULL) && (BufPtr != NULL)); + if (nEmptyLines > 0) + StrBufCutRight(Target, nEmptyLines * (sizeof ("
\n") - 1)); for (i = 0; i < bn; i++) StrBufAppendBufPlain(Target, HKEY("
"), 0); - StrBufAppendBufPlain(Target, HKEY("
"), 0); + StrBufAppendBufPlain(Target, HKEY("
"), 0); #ifdef HAVE_ICONV if (ic != (iconv_t)(-1) ) { iconv_close(ic); @@ -1100,7 +1122,7 @@ void render_MAIL_UNKNOWN(wc_mime_attachment *Mime, StrBuf *RawData, StrBuf *Foun FlushStrBuf(Mime->Data); StrBufAppendBufPlain(Mime->Data, _("I don't know how to display "), -1, 0); StrBufAppendBuf(Mime->Data, Mime->ContentType, 0); - StrBufAppendBufPlain(Mime->Data, HKEY("
\n"), 0); + StrBufAppendBufPlain(Mime->Data, HKEY("
\n"), 0); } @@ -1221,6 +1243,11 @@ HashList *iterate_get_registered_Attachments(StrBuf *Target, WCTemplputParams *T return WC->attachments; } +void get_registered_Attachments_Count(StrBuf *Target, WCTemplputParams *TP) +{ + StrBufAppendPrintf(Target, "%ld", GetCount (WC->attachments)); +} + void servcmd_do_search(char *buf, long bufsize) { snprintf(buf, bufsize, "MSGS SEARCH|%s", bstr("query")); @@ -1275,12 +1302,15 @@ int ParseMessageListHeaders_Detail(StrBuf *Line, StrBuf *ConversionBuffer) { wcsession *WCC = WC; + long len; + long totallen; CheckConvertBufs(WCC); - Msg->from = NewStrBufPlain(NULL, StrLength(Line)); - StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); - if (StrLength(ConversionBuffer) != 0) { + 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, @@ -1291,9 +1321,9 @@ int ParseMessageListHeaders_Detail(StrBuf *Line, } /* node name */ - StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); - if ((StrLength(ConversionBuffer) !=0 ) && - ( ((WCC->CurRoom.QRFlags & QR_NETWORK) + 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)))))))) { @@ -1305,7 +1335,7 @@ int ParseMessageListHeaders_Detail(StrBuf *Line, * StrBufExtract_token(Msg->inetaddr, Line, 4, '|'); */ StrBufSkip_NTokenS(Line, pos, '|', 1); - Msg->subj = NewStrBufPlain(NULL, StrLength(Line)); + Msg->subj = NewStrBufPlain(NULL, totallen); FlushStrBuf(ConversionBuffer); /* we assume the subject is the last parameter inside of the list; @@ -1313,17 +1343,17 @@ int ParseMessageListHeaders_Detail(StrBuf *Line, * on tokenizer chars inside of the subjects StrBufExtract_NextToken(ConversionBuffer, Line, pos, '|'); */ + len = 0; if (*pos != StrBufNOTNULL) { - StrBufPlain(ConversionBuffer, *pos, - StrLength(Line) - (*pos - ChrPtr(Line))); + len = totallen - (*pos - ChrPtr(Line)); + StrBufPlain(ConversionBuffer, *pos, len); *pos = StrBufNOTNULL; - if ((StrLength(ConversionBuffer) > 0) && - (*(ChrPtr(ConversionBuffer) + - StrLength(ConversionBuffer) - 1) == '|')) + if ((len > 0) && + (*(ChrPtr(ConversionBuffer) + len - 1) == '|')) StrBufCutRight(ConversionBuffer, 1); } - if (StrLength(ConversionBuffer) == 0) + if (len == 0) StrBufAppendBufPlain(Msg->subj, _("(no subject)"), -1,0); else { StrBuf_RFC822_2_Utf8(Msg->subj, @@ -1403,9 +1433,9 @@ InitModule_MSGRENDERERS RegisterReadLoopHandlerset( VIEW_MAILBOX, mailview_GetParamsGetServerCall, - NULL, /// TODO: is this right? + NULL, /* TODO: is this right? */ ParseMessageListHeaders_Detail, - NULL, //// "" + NULL, mailview_RenderView_or_Tail, mailview_Cleanup); @@ -1438,6 +1468,7 @@ InitModule_MSGRENDERERS RegisterNamespace("MAIL:SUMM:DATEFULL", 0, 0, tmplput_MAIL_SUMM_DATE_FULL, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:DATENO", 0, 0, tmplput_MAIL_SUMM_DATE_NO, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:N", 0, 0, tmplput_MAIL_SUMM_N, NULL, CTX_MAILSUM); + RegisterNamespace("MAIL:SUMM:PERMALINK", 0, 0, tmplput_MAIL_SUMM_PERMALINK, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:FROM", 0, 2, tmplput_MAIL_SUMM_FROM, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:TO", 0, 2, tmplput_MAIL_SUMM_TO, NULL, CTX_MAILSUM); RegisterNamespace("MAIL:SUMM:SUBJECT", 0, 4, tmplput_MAIL_SUMM_SUBJECT, NULL, CTX_MAILSUM); @@ -1495,6 +1526,8 @@ InitModule_MSGRENDERERS RegisterIterator("MSG:ATTACHNAMES", 0, NULL, iterate_get_registered_Attachments, NULL, NULL, CTX_MIME_ATACH, CTX_NONE, IT_NOFLAG); + RegisterNamespace("MSG:NATTACH", 0, 0, get_registered_Attachments_Count, NULL, CTX_NONE); + /* mime renderers translate an attachment into webcit viewable html text */ RegisterMimeRenderer(HKEY("message/rfc822"), render_MAIL, 0, 150); RegisterMimeRenderer(HKEY("text/vnote"), render_MIME_VNote, 1, 300);