containing a rendered sticky note.
+ * Create a new note
*/
-void display_vnote_div(struct vnote *v, long msgnum) {
+void add_new_note(void) {
+ struct vnote *v;
+
+ v = vnote_new();
+ if (v) {
+ v->uid = malloc(128);
+ generate_uuid(v->uid);
+ v->color_red = pastel_palette[3][0];
+ v->color_green = pastel_palette[3][1];
+ v->color_blue = pastel_palette[3][2];
+ v->body = strdup(_("Click on any note to edit it."));
+ write_vnote_to_server(v);
+ vnote_free(v);
+ }
+
+ readloop(readfwd, eUseDefault);
+}
- /* begin outer div */
- wprintf("
pos_left);
- wprintf("top: %dpx; ", v->pos_top);
- wprintf("width: %dpx; ", v->pos_width);
- wprintf("height: %dpx; ", v->pos_height);
- wprintf("background-color: #%02X%02X%02X ", v->color_red, v->color_green, v->color_blue);
- wprintf("\">");
+void tmpl_vcard_put_posleft(StrBuf *Target, WCTemplputParams *TP)
+{
+ struct vnote *v = (struct vnote *) CTX(CTX_VNOTE);
+ StrBufAppendPrintf(Target, "%d", v->pos_left);
+}
- /* begin title bar */
+void tmpl_vcard_put_postop(StrBuf *Target, WCTemplputParams *TP)
+{
+ struct vnote *v = (struct vnote *) CTX(CTX_VNOTE);
+ StrBufAppendPrintf(Target, "%d", v->pos_top);
+}
- wprintf("
color_red/2, v->color_green/2, v->color_blue/2);
- wprintf("\">");
+void tmpl_vcard_put_poswidth(StrBuf *Target, WCTemplputParams *TP)
+{
+ struct vnote *v = (struct vnote *) CTX(CTX_VNOTE);
+ StrBufAppendPrintf(Target, "%d", v->pos_width);
+}
- wprintf("
");
- wprintf(" | ", msgnum);
+void tmpl_vcard_put_posheight(StrBuf *Target, WCTemplputParams *TP)
+{
+ struct vnote *v = (struct vnote *) CTX(CTX_VNOTE);
+ StrBufAppendPrintf(Target, "%d", v->pos_height);
+}
- wprintf("");
- wprintf(" |
");
+void tmpl_vcard_put_posheight2(StrBuf *Target, WCTemplputParams *TP)
+{
+ struct vnote *v = (struct vnote *) CTX(CTX_VNOTE);
+ StrBufAppendPrintf(Target, "%d", (v->pos_height / 16) - 5);
+}
- wprintf("
\n");
+void tmpl_vcard_put_width2(StrBuf *Target, WCTemplputParams *TP)
+{
+ struct vnote *v = (struct vnote *) CTX(CTX_VNOTE);
+ StrBufAppendPrintf(Target, "%d", (v->pos_width / 9) - 1);
+}
- escputs(v->body);
+void tmpl_vcard_put_color(StrBuf *Target, WCTemplputParams *TP)
+{
+ struct vnote *v = (struct vnote *) CTX(CTX_VNOTE);
+ StrBufAppendPrintf(Target, "%02X%02X%02X", v->color_red, v->color_green, v->color_blue);
+}
- wprintf("
\n");
+void tmpl_vcard_put_bgcolor(StrBuf *Target, WCTemplputParams *TP)
+{
+ 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(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(CTX_VNOTE);
+ StrBufAppendBufPlain(Target, v->uid, -1, 0);
+}
-/*
- * display sticky notes
- *
- * msgnum = Message number on the local server of the note to be displayed
- */
-void display_note(long msgnum, int unread) {
- char buf[1024];
- char mime_partnum[256];
- char mime_filename[256];
- char mime_content_type[256];
- char mime_disposition[256];
- int mime_length;
- char relevant_partnum[256];
- char *relevant_source = NULL;
- relevant_partnum[0] = '\0';
- sprintf(buf, "MSG4 %ld", msgnum); /* we need the mime headers */
- serv_puts(buf);
- serv_getln(buf, sizeof buf);
- if (buf[0] != '1') return;
-
- while (serv_getln(buf, sizeof buf), strcmp(buf, "000")) {
- if (!strncasecmp(buf, "part=", 5)) {
- extract_token(mime_filename, &buf[5], 1, '|', sizeof mime_filename);
- extract_token(mime_partnum, &buf[5], 2, '|', sizeof mime_partnum);
- extract_token(mime_disposition, &buf[5], 3, '|', sizeof mime_disposition);
- extract_token(mime_content_type, &buf[5], 4, '|', sizeof mime_content_type);
- mime_length = extract_int(&buf[5], 5);
-
- if (!strcasecmp(mime_content_type, "text/vnote")) {
- strcpy(relevant_partnum, mime_partnum);
- }
- }
- }
- if (!IsEmptyStr(relevant_partnum)) {
- relevant_source = load_mimepart(msgnum, relevant_partnum);
- if (relevant_source != NULL) {
- struct vnote *v = vnote_new_from_str(relevant_source);
- free(relevant_source);
- display_vnote_div(v, msgnum);
- vnote_free(v);
+int notes_GetParamsGetServerCall(SharedMessageStatus *Stat,
+ void **ViewSpecific,
+ long oper,
+ char *cmd,
+ long len,
+ char *filter,
+ long flen)
+{
+ strcpy(cmd, "MSGS ALL");
+ Stat->maxmsgs = 32767;
+ wc_printf("
\n");
+ return 200;
+
+}
+
+int notes_Cleanup(void **ViewSpecific)
+{
+ wDumpContent(1);
+ return 0;
+}
- /* FIXME remove these debugging messages when finished */
- wprintf("");
+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);
}
}
}
-#endif
+
+
+void
+InitModule_NOTES
+(void)
+{
+ RegisterCTX(CTX_VNOTE);
+
+ RegisterReadLoopHandlerset(
+ VIEW_NOTES,
+ notes_GetParamsGetServerCall,
+ NULL,
+ NULL,
+ NULL,
+ notes_LoadMsgFromServer,
+ NULL,
+ notes_Cleanup,
+ NULL);
+
+ WebcitAddUrlHandler(HKEY("add_new_note"), "", 0, add_new_note, 0);
+ WebcitAddUrlHandler(HKEY("ajax_update_note"), "", 0, ajax_update_note, 0);
+
+ RegisterNamespace("VNOTE:POS:LEFT", 0, 0, tmpl_vcard_put_posleft, NULL, CTX_VNOTE);
+ RegisterNamespace("VNOTE:POS:TOP", 0, 0, tmpl_vcard_put_postop, NULL, CTX_VNOTE);
+ RegisterNamespace("VNOTE:POS:WIDTH", 0, 0, tmpl_vcard_put_poswidth, NULL, CTX_VNOTE);
+ RegisterNamespace("VNOTE:POS:HEIGHT", 0, 0, tmpl_vcard_put_posheight, NULL, CTX_VNOTE);
+ RegisterNamespace("VNOTE:POS:HEIGHT2", 0, 0, tmpl_vcard_put_posheight2, NULL, CTX_VNOTE);
+ RegisterNamespace("VNOTE:POS:WIDTH2", 0, 0, tmpl_vcard_put_width2, NULL, CTX_VNOTE);
+ RegisterNamespace("VNOTE:COLOR", 0, 0, tmpl_vcard_put_color, NULL, CTX_VNOTE);
+ 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);
+}