X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fnotes.c;h=079bb960b687d7b49e463e3bd5a2138841e4805c;hb=HEAD;hp=7ffd32c0c5fb19057422c5db0e059e96d0af6638;hpb=6ec73d6906542ea2f8cca2e62f7625ee2e17ae03;p=citadel.git diff --git a/webcit/notes.c b/webcit/notes.c index 7ffd32c0c..60c4d83a1 100644 --- a/webcit/notes.c +++ b/webcit/notes.c @@ -1,11 +1,9 @@ -/* - * $Id$ - * - */ #include "webcit.h" -#include "groupdav.h" -#include "webserver.h" +#include "dav.h" + + +CtxType CTX_VNOTE = CTX_NONE; int pastel_palette[9][3] = { { 0x80, 0x80, 0x80 }, @@ -34,7 +32,6 @@ struct vnote *vnote_new_from_msg(long msgnum,int unread) char mime_filename[256]; char mime_content_type[256]; char mime_disposition[256]; - int mime_length; char relevant_partnum[256]; int phase = 0; /* 0 = citadel headers, 1 = mime headers, 2 = body */ char msg4_content_type[256] = ""; @@ -68,7 +65,6 @@ struct vnote *vnote_new_from_msg(long msgnum,int unread) extract_token(mime_partnum, &bptr[5], 2, '|', sizeof mime_partnum); extract_token(mime_disposition, &bptr[5], 3, '|', sizeof mime_disposition); extract_token(mime_content_type, &bptr[5], 4, '|', sizeof mime_content_type); - mime_length = extract_int(&bptr[5], 5); if (!strcasecmp(mime_content_type, "text/vnote")) { strcpy(relevant_partnum, mime_partnum); @@ -82,11 +78,11 @@ struct vnote *vnote_new_from_msg(long msgnum,int unread) if (!IsEmptyStr(bptr)) { if (!strncasecmp(bptr, "Content-type: ", 14)) { safestrncpy(msg4_content_type, &bptr[14], sizeof msg4_content_type); - striplt(msg4_content_type); + string_trim(msg4_content_type); } else if (!strncasecmp(bptr, "Content-transfer-encoding: ", 27)) { safestrncpy(msg4_content_encoding, &bptr[27], sizeof msg4_content_encoding); - striplt(msg4_content_type); + string_trim(msg4_content_type); } else if ((!strncasecmp(bptr, "Content-length: ", 16))) { msg4_content_length = atoi(&bptr[16]); @@ -213,7 +209,7 @@ void ajax_update_note(void) { if (!havebstr("note_uid")) { begin_ajax_response(); - wprintf("Received ajax_update_note() request without a note UID."); + wc_printf("Received ajax_update_note() request without a note UID."); end_ajax_response(); return; } @@ -222,7 +218,7 @@ void ajax_update_note(void) { serv_getln(buf, sizeof buf); if (buf[0] != '2') { begin_ajax_response(); - wprintf("Cannot find message containing vNote with the requested uid!"); + wc_printf("Cannot find message containing vNote with the requested uid!"); end_ajax_response(); return; } @@ -234,7 +230,7 @@ void ajax_update_note(void) { serv_printf("DELE %d", msgnum); serv_getln(buf, sizeof buf); begin_ajax_response(); - wprintf("%s", buf); + wc_printf("%s", buf); end_ajax_response(); return; } @@ -244,7 +240,7 @@ void ajax_update_note(void) { v = vnote_new_from_msg(msgnum, 0); if (!v) { begin_ajax_response(); - wprintf("Cannot locate a vNote within message %d\n", msgnum); + wc_printf("Cannot locate a vNote within message %d\n", msgnum); end_ajax_response(); return; } @@ -296,7 +292,7 @@ void ajax_update_note(void) { * * msgnum = Message number on the local server of the note to be displayed */ -////TODO: falscher hook +/*TODO: wrong hook */ int notes_LoadMsgFromServer(SharedMessageStatus *Stat, void **ViewSpecific, message_summary* Msg, @@ -351,67 +347,67 @@ void add_new_note(void) { vnote_free(v); } - readloop(readfwd); + readloop(readfwd, eUseDefault); } void tmpl_vcard_put_posleft(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); StrBufAppendPrintf(Target, "%d", v->pos_left); } void tmpl_vcard_put_postop(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); StrBufAppendPrintf(Target, "%d", v->pos_top); } void tmpl_vcard_put_poswidth(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); StrBufAppendPrintf(Target, "%d", v->pos_width); } void tmpl_vcard_put_posheight(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); StrBufAppendPrintf(Target, "%d", v->pos_height); } void tmpl_vcard_put_posheight2(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); StrBufAppendPrintf(Target, "%d", (v->pos_height / 16) - 5); } void tmpl_vcard_put_width2(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); StrBufAppendPrintf(Target, "%d", (v->pos_width / 9) - 1); } void tmpl_vcard_put_color(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); StrBufAppendPrintf(Target, "%02X%02X%02X", v->color_red, v->color_green, v->color_blue); } void tmpl_vcard_put_bgcolor(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); StrBufAppendPrintf(Target, "%02X%02X%02X", v->color_red/2, v->color_green/2, v->color_blue/2); } void tmpl_vcard_put_message(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; - StrEscAppend(Target, NULL, v->body, 0, 0); ///TODO? + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); + StrEscAppend(Target, NULL, v->body, 0, 0); /*TODO?*/ } void tmpl_vcard_put_uid(StrBuf *Target, WCTemplputParams *TP) { - struct vnote *v = (struct vnote *) CTX; + struct vnote *v = (struct vnote *) CTX(CTX_VNOTE); StrBufAppendBufPlain(Target, v->uid, -1, 0); } @@ -422,11 +418,13 @@ int notes_GetParamsGetServerCall(SharedMessageStatus *Stat, void **ViewSpecific, long oper, char *cmd, - long len) + long len, + char *filter, + long flen) { strcpy(cmd, "MSGS ALL"); Stat->maxmsgs = 32767; - wprintf("
\n"); + wc_printf("
\n"); return 200; } @@ -437,18 +435,60 @@ int notes_Cleanup(void **ViewSpecific) return 0; } +void render_MIME_VNote(StrBuf *Target, WCTemplputParams *TP, StrBuf *FoundCharset) +{ + wc_mime_attachment *Mime = CTX(CTX_MIME_ATACH); + + if (StrLength(Mime->Data) == 0) + MimeLoadData(Mime); + if (StrLength(Mime->Data) > 0) { + struct vnote *v; + StrBuf *Buf; + char *vcard; + + Buf = NewStrBuf(); + vcard = SmashStrBuf(&Mime->Data); + v = vnote_new_from_str(vcard); + free (vcard); + if (v) { + WCTemplputParams TP; + + memset(&TP, 0, sizeof(WCTemplputParams)); + TP.Filter.ContextType = CTX_VNOTE; + TP.Context = v; + DoTemplate(HKEY("mail_vnoteitem"), + Buf, &TP); + + vnote_free(v); + Mime->Data = Buf; + } + else { + if (Mime->Data == NULL) + Mime->Data = NewStrBuf(); + else + FlushStrBuf(Mime->Data); + } + } +} + + void InitModule_NOTES (void) { + RegisterCTX(CTX_VNOTE); + RegisterReadLoopHandlerset( VIEW_NOTES, notes_GetParamsGetServerCall, NULL, + NULL, + NULL, notes_LoadMsgFromServer, NULL, - notes_Cleanup); + notes_Cleanup, + NULL); WebcitAddUrlHandler(HKEY("add_new_note"), "", 0, add_new_note, 0); WebcitAddUrlHandler(HKEY("ajax_update_note"), "", 0, ajax_update_note, 0); @@ -463,4 +503,6 @@ InitModule_NOTES RegisterNamespace("VNOTE:BGCOLOR", 0, 0,tmpl_vcard_put_bgcolor, NULL, CTX_VNOTE); RegisterNamespace("VNOTE:MSG", 0, 1, tmpl_vcard_put_message, NULL, CTX_VNOTE); RegisterNamespace("VNOTE:UID", 0, 0, tmpl_vcard_put_uid, NULL, CTX_VNOTE); + + RegisterMimeRenderer(HKEY("text/vnote"), render_MIME_VNote, 1, 300); }