From 3343e92810bc5ec3f3602cf41dc64f7480be4d28 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Mon, 3 Nov 2008 22:14:24 +0000 Subject: [PATCH] * remove duplicate function * variformat renderer * fix loop handling --- webcit/decode.c | 8 +++--- webcit/messages.c | 29 ++++++++++++-------- webcit/serv_func.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++ webcit/webcit.h | 2 ++ 4 files changed, 92 insertions(+), 15 deletions(-) diff --git a/webcit/decode.c b/webcit/decode.c index 4e72f191d..cf64886ee 100644 --- a/webcit/decode.c +++ b/webcit/decode.c @@ -8,7 +8,7 @@ * * tocode Target encoding * fromcode Source encoding - */ + * / iconv_t ctdl_iconv_open(const char *tocode, const char *fromcode) { iconv_t ic = (iconv_t)(-1) ; @@ -24,7 +24,7 @@ iconv_t ctdl_iconv_open(const char *tocode, const char *fromcode) } return(ic); } - +*/ inline char *FindNextEnd (char *bptr) @@ -83,7 +83,7 @@ void utf8ify_rfc822_string(char *buf) { get_preference("default_header_charset", &default_header_charset); if ( (strcasecmp(ChrPtr(default_header_charset), "UTF-8")) && (strcasecmp(ChrPtr(default_header_charset), "us-ascii")) ) { - ic = ctdl_iconv_open("UTF-8", ChrPtr(default_header_charset)); + ctdl_iconv_open("UTF-8", ChrPtr(default_header_charset), &ic); if (ic != (iconv_t)(-1) ) { ibuf = malloc(1024); isav = ibuf; @@ -184,7 +184,7 @@ void utf8ify_rfc822_string(char *buf) { ibuflen = strlen(istr); } - ic = ctdl_iconv_open("UTF-8", charset); + ctdl_iconv_open("UTF-8", charset, &ic); if (ic != (iconv_t)(-1) ) { obuflen = 1024; obuf = (char *) malloc(obuflen); diff --git a/webcit/messages.c b/webcit/messages.c index e41b83b6f..c7cd05a81 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -581,6 +581,7 @@ void examine_content_encoding(message_summary *Msg, StrBuf *HdrLine) void examine_content_lengh(message_summary *Msg, StrBuf *HdrLine) { Msg->MsgBody.length = StrTol(HdrLine); + Msg->MsgBody.size_known = 1; } void examine_content_type(message_summary *Msg, StrBuf *HdrLine) @@ -639,8 +640,10 @@ void tmplput_MAIL_BODY(StrBuf *Target, int nArgs, WCTemplateToken *Token, void * void render_MAIL_variformat(wc_mime_attachment *Mime, StrBuf *RawData) { /* Messages in legacy Citadel variformat get handled thusly... */ - fmout("JUSTIFY");///todo: this won't work that way. - + StrBuf *Target = NewStrBufPlain(NULL, StrLength(Mime->Data)); + FmOut(Target, "JUSTIFY", Mime->Data); + FreeStrBuf(&Mime->Data); + Mime->Data = Target; } void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData) @@ -654,7 +657,7 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData) int ConvertIt = 1; int bn = 0; int bq = 0; - int i; + int i, n, done = 0; long len; #ifdef HAVE_ICONV iconv_t ic = (iconv_t)(-1) ; @@ -675,11 +678,11 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData) } #endif - while (StrBufSipLine(Line, Mime->Data, &BufPtr) > 0) + while ((n = StrBufSipLine(Line, Mime->Data, &BufPtr), n >= 0) && !done) { + done = n == 0; bq = 0; i = 0; - ptr = ChrPtr(Line); len = StrLength(Line); pte = ptr + len; @@ -711,7 +714,7 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData) bn = bq; } - for (i = bq; i < bn; i++) + for (i = 0; i < bn; i++) StrBufAppendBufPlain(Target, HKEY(""), 0); StrBufAppendBufPlain(Target, HKEY("
"), 0); @@ -722,7 +725,9 @@ void render_MAIL_text_plain(wc_mime_attachment *Mime, StrBuf *RawData) #endif FreeStrBuf(&Mime->Data); Mime->Data = Target; - + FreeStrBuf(&Line); + FreeStrBuf(&Line1); + FreeStrBuf(&Line2); } void render_MAIL_html(wc_mime_attachment *Mime, StrBuf *RawData) @@ -741,8 +746,10 @@ void render_MAIL_html(wc_mime_attachment *Mime, StrBuf *RawData) void render_MAIL_UNKNOWN(wc_mime_attachment *Mime, StrBuf *RawData) { /* Unknown weirdness */ -//// wprintf(_("I don't know how to display %s"), Msg->MsgBody->ContentType); - wprintf("
\n"); + 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); } @@ -1308,7 +1315,7 @@ void read_message(long msgnum, int printable_view, char *section) { Token = NewStrBuf(); Msg = (message_summary *)malloc(sizeof(message_summary)); memset(Msg, 0, sizeof(message_summary)); - Msg->MsgBody.length=-1; + while ((StrBuf_ServGetln(Buf)>=0) && !Done) { if ( (StrLength(Buf)==3) && !strcmp(ChrPtr(Buf), "000")) @@ -1372,7 +1379,7 @@ void read_message(long msgnum, int printable_view, char *section) { } case 2: /* Message Body */ - if (Msg->MsgBody.length > 0) { + 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 diff --git a/webcit/serv_func.c b/webcit/serv_func.c index aa43d350b..fbaa088d8 100644 --- a/webcit/serv_func.c +++ b/webcit/serv_func.c @@ -155,6 +155,74 @@ void _fmout(StrBuf *Target, char *align) wprintf("
\n"); } +void FmOut(StrBuf *Target, char *align, StrBuf *Source) +{ + const char *ptr, *pte; + const char *BufPtr = NULL; + StrBuf *Line = NewStrBuf(); + StrBuf *Line1 = NewStrBuf(); + StrBuf *Line2 = NewStrBuf(); + int bn = 0; + int bq = 0; + int i, n, done = 0; + long len; + int intext = 0; + + StrBufAppendPrintf(Target, "
\n", align); + while ((n = StrBufSipLine(Line, Source, &BufPtr), n >= 0) && !done) + { + done = n == 0; + bq = 0; + i = 0; + ptr = ChrPtr(Line); + len = StrLength(Line); + pte = ptr + len; + + if ((intext == 1) && (isspace(*ptr))) { + StrBufAppendBufPlain(Target, HKEY("
"), 0); + } + intext = 1; + if (isspace(*ptr)) while ((ptr < pte) && + ((*ptr == '>') || + isspace(*ptr))) + { + if (*ptr == '>') + bq++; + ptr ++; + i++; + } + + /** + * Quoted text should be displayed in italics and in a + * different colour. This code understands Citadel-style + * " >" quotes and will convert to
tags. + */ + if (i > 0) StrBufCutLeft(Line, i); + + + for (i = bn; i < bq; i++) + StrBufAppendBufPlain(Target, HKEY("
"), 0); + for (i = bq; i < bn; i++) + StrBufAppendBufPlain(Target, HKEY("
"), 0); + bn = bq; + + if (StrLength(Line) == 0) + continue; + /** Activate embedded URL's */ + UrlizeText(Line1, Line, Line2); + + StrEscAppend(Target, Line1, NULL, 0, 0); + + StrBufAppendBufPlain(Target, HKEY("\n"), 0); + } + for (i = 0; i < bn; i++) + StrBufAppendBufPlain(Target, HKEY("
"), 0); + StrBufAppendBufPlain(Target, HKEY("

\n"), 0); + FreeStrBuf(&Line); + FreeStrBuf(&Line1); + FreeStrBuf(&Line2); +} + diff --git a/webcit/webcit.h b/webcit/webcit.h index e5cc2e905..5140def26 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -401,6 +401,7 @@ typedef struct _wc_mime_attachment { StrBuf *Charset; StrBuf *Data; size_t length; /* length of the mimeatachment */ + long size_known; char content_type[SIZ]; /* the content itself ???*/ char filename[SIZ]; /* the filename hooked to this content ??? */ char *data; /* the data pool; aka this content */ @@ -671,6 +672,7 @@ void who_inner_div(void); void ajax_mini_calendar(void); void fmout(char *align); void _fmout(StrBuf *Targt, char *align); +void FmOut(StrBuf *Target, char *align, StrBuf *Source); void pullquote_fmout(void); void wDumpContent(int); -- 2.30.2