X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fmessages.c;h=dde57cc4a2f2761d53818c81cea621958ef895cb;hb=27e6a22f021cffe2cee1a41accbf9d2f78b20dab;hp=171373b4a48e17c33636bb25ea553300362b2a43;hpb=8a38099b09f3080925ce7c4a62a016d6884f31bf;p=citadel.git
diff --git a/webcit/messages.c b/webcit/messages.c
index 171373b4a..dde57cc4a 100644
--- a/webcit/messages.c
+++ b/webcit/messages.c
@@ -12,275 +12,77 @@
HashList *MsgHeaderHandler = NULL;
HashList *MsgEvaluators = NULL;
HashList *MimeRenderHandler = NULL;
+int dbg_analyze_msg = 0;
#define SUBJ_COL_WIDTH_PCT 50 /**< Mailbox view column width */
#define SENDER_COL_WIDTH_PCT 30 /**< Mailbox view column width */
#define DATE_PLUS_BUTTONS_WIDTH_PCT 20 /**< Mailbox view column width */
-
+void jsonMessageListHdr(void);
void display_enter(void);
-int longcmp_r(const void *s1, const void *s2);
-int summcmp_subj(const void *s1, const void *s2);
-int summcmp_rsubj(const void *s1, const void *s2);
-int summcmp_sender(const void *s1, const void *s2);
-int summcmp_rsender(const void *s1, const void *s2);
-int summcmp_date(const void *s1, const void *s2);
-int summcmp_rdate(const void *s1, const void *s2);
/*----------------------------------------------------------------------------*/
typedef void (*MsgPartEvaluatorFunc)(message_summary *Sum, StrBuf *Buf);
-
-
-const char* SortIcons[3] = {
- "static/up_pointer.gif",
- "static/down_pointer.gif",
- "static/sort_none.gif"
-};
-
-enum {/// SortByEnum
- eDate,
- eRDate,
- eSubject,
- eRSubject,
- eSender,
- eRSender,
- eReverse,
- eUnSet
-};
-
-/* SortEnum to plain string representation */
-static const char* SortByStrings[] = {
- "date",
- "rdate",
- "subject",
- "rsubject",
- "sender",
- "rsender",
- "reverse",
- "unset"
-};
-
-/* SortEnum to sort-Function Table */
-const CompareFunc SortFuncs[eUnSet] = {
- summcmp_date,
- summcmp_rdate,
- summcmp_subj,
- summcmp_rsubj,
- summcmp_sender,
- summcmp_rsender,
- summcmp_rdate
-};
-
-/* given a SortEnum, which icon should we choose? */
-const int SortDateToIcon[eUnSet] = { eUp, eDown, eNone, eNone, eNone, eNone, eNone};
-const int SortSubjectToIcon[eUnSet] = { eNone, eNone, eUp, eDown, eNone, eNone, eNone};
-const int SortSenderToIcon[eUnSet] = { eNone, eNone, eNone, eNone, eUp, eDown, eNone};
-
-/* given a SortEnum, which would be the "opposite" search option? */
-const int DateInvertSortString[eUnSet] = { eRDate, eDate, eDate, eDate, eDate, eDate, eDate};
-const int SubjectInvertSortString[eUnSet] = { eSubject, eSubject, eRSubject, eUnSet, eSubject, eSubject, eSubject};
-const int SenderInvertSortString[eUnSet] = { eSender, eSender, eSender, eSender, eRSender, eUnSet, eSender};
-
+typedef struct _MsgPartEvaluatorStruct {
+ MsgPartEvaluatorFunc f;
+}MsgPartEvaluatorStruct;
/*----------------------------------------------------------------------------*/
-/*
- * Translates sortoption String to its SortEnum representation
- * returns the enum matching the string; defaults to RDate
- */
-//SortByEnum
-int StrToESort (const StrBuf *sortby)
-{////todoo: hash
- int result = eDate;
-
- if (!IsEmptyStr(ChrPtr(sortby))) while (result < eUnSet){
- if (!strcasecmp(ChrPtr(sortby),
- SortByStrings[result]))
- return result;
- result ++;
- }
- return eRDate;
-}
-
-
-typedef int (*QSortFunction) (const void*, const void*);
-
-/*
- * qsort() compatible function to compare two longs in descending order.
- */
-int longcmp_r(const void *s1, const void *s2) {
- long l1;
- long l2;
-
- l1 = *(long *)GetSearchPayload(s1);
- l2 = *(long *)GetSearchPayload(s2);
-
- if (l1 > l2) return(-1);
- if (l1 < l2) return(+1);
- return(0);
-}
-
-/*
- * qsort() compatible function to compare two longs in descending order.
- */
-int qlongcmp_r(const void *s1, const void *s2) {
- long l1 = (long) s1;
- long l2 = (long) s2;
-
- if (l1 > l2) return(-1);
- if (l1 < l2) return(+1);
- return(0);
-}
-
-
-/*
- * qsort() compatible function to compare two message summary structs by ascending subject.
- */
-int summcmp_subj(const void *s1, const void *s2) {
- message_summary *summ1;
- message_summary *summ2;
-
- summ1 = (message_summary *)GetSearchPayload(s1);
- summ2 = (message_summary *)GetSearchPayload(s2);
- return strcasecmp(ChrPtr(summ1->subj), ChrPtr(summ2->subj));
-}
-
-/*
- * qsort() compatible function to compare two message summary structs by descending subject.
- */
-int summcmp_rsubj(const void *s1, const void *s2) {
- message_summary *summ1;
- message_summary *summ2;
-
- summ1 = (message_summary *)GetSearchPayload(s1);
- summ2 = (message_summary *)GetSearchPayload(s2);
- return strcasecmp(ChrPtr(summ2->subj), ChrPtr(summ1->subj));
-}
-
-/*
- * qsort() compatible function to compare two message summary structs by ascending sender.
- */
-int summcmp_sender(const void *s1, const void *s2) {
- message_summary *summ1;
- message_summary *summ2;
-
- summ1 = (message_summary *)GetSearchPayload(s1);
- summ2 = (message_summary *)GetSearchPayload(s2);
- return strcasecmp(ChrPtr(summ1->from), ChrPtr(summ2->from));
-}
-
-/*
- * qsort() compatible function to compare two message summary structs by descending sender.
- */
-int summcmp_rsender(const void *s1, const void *s2) {
- message_summary *summ1;
- message_summary *summ2;
-
- summ1 = (message_summary *)GetSearchPayload(s1);
- summ2 = (message_summary *)GetSearchPayload(s2);
- return strcasecmp(ChrPtr(summ2->from), ChrPtr(summ1->from));
-}
-
-/*
- * qsort() compatible function to compare two message summary structs by ascending date.
- */
-int summcmp_date(const void *s1, const void *s2) {
- message_summary *summ1;
- message_summary *summ2;
-
- summ1 = (message_summary *)GetSearchPayload(s1);
- summ2 = (message_summary *)GetSearchPayload(s2);
- if (summ1->date < summ2->date) return -1;
- else if (summ1->date > summ2->date) return +1;
- else return 0;
-}
-
-/*
- * qsort() compatible function to compare two message summary structs by descending date.
- */
-int summcmp_rdate(const void *s1, const void *s2) {
- message_summary *summ1;
- message_summary *summ2;
-
- summ1 = (message_summary *)GetSearchPayload(s1);
- summ2 = (message_summary *)GetSearchPayload(s2);
-
- if (summ1->date < summ2->date) return +1;
- else if (summ1->date > summ2->date) return -1;
- else return 0;
-}
-
-
-
-
-
-
-/*
- * I wanna SEE that message!
- *
- * msgnum Message number to display
- * 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 load_message(message_summary *Msg,
+ StrBuf *FoundCharset,
+ StrBuf **Error)
+{
+ wcsession *WCC = WC;
StrBuf *Buf;
- StrBuf *Token;
- StrBuf *FoundCharset;
- message_summary *Msg = NULL;
+ StrBuf *HdrToken;
headereval *Hdr;
void *vHdr;
char buf[SIZ];
-// char mime_submessages[256] = "";
- char reply_references[1024] = "";
int Done = 0;
int state=0;
-
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", Msg->msgnum, ChrPtr(Msg->PartNum));
+ if (Msg->PartNum != NULL)
+ serv_printf("MSG4 %ld|%s", Msg->msgnum, ChrPtr(Msg->PartNum));
+ else
+ serv_printf("MSG4 %ld", Msg->msgnum);
+
StrBuf_ServGetln(Buf);
if (GetServerStatus(Buf, NULL) != 1) {
- StrBufAppendPrintf(Target, "");
- StrBufAppendPrintf(Target, _("ERROR:"));
- StrBufAppendPrintf(Target, " %s
\n", &buf[4]);
+ *Error = NewStrBuf();
+ StrBufAppendPrintf(*Error, "");
+ StrBufAppendPrintf(*Error, _("ERROR:"));
+ StrBufAppendPrintf(*Error, " %s
\n", &buf[4]);
FreeStrBuf(&Buf);
- return;
+ return 0;
}
- svputlong("MsgPrintable", printable_view);
- /** begin everythingamundo table */
-
- Token = NewStrBuf();
- Msg = (message_summary *)malloc(sizeof(message_summary));
- memset(Msg, 0, sizeof(message_summary));
- Msg->msgnum = msgnum;
- FoundCharset = NewStrBuf();
+ /** begin everythingamundo table */
+ HdrToken = NewStrBuf();
while ((StrBuf_ServGetln(Buf)>=0) && !Done) {
if ( (StrLength(Buf)==3) &&
!strcmp(ChrPtr(Buf), "000"))
{
Done = 1;
if (state < 2) {
- StrBufAppendPrintf(Target, "");
- StrBufAppendPrintf(Target, _("unexpected end of message"));
- StrBufAppendPrintf(Target, " (1)
\n");
- StrBufAppendPrintf(Target, "\n");
- FreeStrBuf(&Buf);
- FreeStrBuf(&Token);
- DestroyMessageSummary(Msg);
- FreeStrBuf(&FoundCharset);
- return;
- }
- else {
- break;
+ lprintf(1, _("unexpected end of message"));
+ if (Msg->MsgBody->Data == NULL)
+ Msg->MsgBody->Data = NewStrBuf();
+ Msg->MsgBody->ContentType = NewStrBufPlain(HKEY("text/html"));
+ StrBufAppendPrintf(Msg->MsgBody->Data, "
"); - bq = 1; - } else if ((bq == 1) && - (strncmp(buf, ">", 1)) && (strncmp(buf, " >", 2)) ) { - wprintf(""); - bq = 0; - } - wprintf(""); - url(buf, sizeof(buf)); - msgescputs1(buf); - wprintf("