From ff01cf1d6b1e648e978b7d584a7a1172be0b5bb0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Sun, 7 Dec 2008 23:27:13 +0000 Subject: [PATCH] * make readloop long-controlled * move param-dependant code into callback hooks * migrate all places to the new enums fed into readloop --- webcit/calendar.c | 2 +- webcit/event.c | 2 +- webcit/messages.c | 89 +++++++++----------- webcit/msg_renderers.c | 40 +++++++++ webcit/notes.c | 2 +- webcit/roomops.c | 2 +- webcit/static/t/msg_listselector.html | 6 +- webcit/static/t/select_messageindex.html | 2 +- webcit/static/t/select_messageindex_all.html | 2 +- webcit/static/t/summary_trailer.html | 7 ++ webcit/vcard_edit.c | 4 +- webcit/webcit.c | 4 +- webcit/webcit.h | 17 +++- 13 files changed, 114 insertions(+), 65 deletions(-) create mode 100644 webcit/static/t/summary_trailer.html diff --git a/webcit/calendar.c b/webcit/calendar.c index 33864203e..9dc2b0733 100644 --- a/webcit/calendar.c +++ b/webcit/calendar.c @@ -932,7 +932,7 @@ void save_individual_task(icalcomponent *supplied_vtodo, long msgnum, char* from } /** Go back to the task list */ - readloop("readfwd"); + readloop(readfwd); } diff --git a/webcit/event.c b/webcit/event.c index ae3417462..0258c2ffc 100644 --- a/webcit/event.c +++ b/webcit/event.c @@ -1147,6 +1147,6 @@ STARTOVER: for (attendee = icalcomponent_get_first_property(vevent, ICAL_ATTENDE /* If this was a save or delete, go back to the calendar view. */ if (!havebstr("check_button")) { - readloop("readfwd"); + readloop(readfwd); } } diff --git a/webcit/messages.c b/webcit/messages.c index 269d1da79..7a2bc8bde 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -938,10 +938,13 @@ int load_msg_ptrs(char *servcmd, int with_headers) inline message_summary* GetMessagePtrAt(int n, HashList *Summ) { + const char *Key; + long HKLen; void *vMsg; + if (Summ == NULL) return NULL; - GetHash(Summ, (const char*)&n, sizeof(n), &vMsg); + GetHashAt(Summ, n, &HKLen, &Key, &vMsg); return (message_summary*) vMsg; } @@ -1000,15 +1003,18 @@ void DrawMessageSummarySelector(StrBuf *BBViewToolBar, long maxmsgs, long startm FlushStrBuf(BBViewToolBar); DoTemplate(HKEY("msg_listselector"), BBViewToolBar, Selector, CTX_STRBUF); FreeStrBuf(&Selector); + DeleteHashPos(&At); } +extern readloop_struct rlid[]; + /* * command loop for reading messages * * Set oper to "readnew" or "readold" or "readfwd" or "headers" */ -void readloop(char *oper) +void readloop(long oper) { StrBuf *BBViewToolBar = NULL; void *vMsg; @@ -1020,7 +1026,7 @@ void readloop(char *oper) ///int b = 0; int nummsgs; long startmsg = 0; - int maxmsgs; + int maxmsgs = 0; long *displayed_msgs = NULL; int num_displayed = 0; int is_summary = 0; @@ -1071,7 +1077,7 @@ void readloop(char *oper) is_singlecard = ibstr("is_singlecard"); if (maxmsgs > 1) { is_addressbook = 1; - if (!strcmp(oper, "do_search")) { + if (oper == do_search) { snprintf(cmd, sizeof(cmd), "MSGS SEARCH|%s", bstr("query")); } else { @@ -1095,25 +1101,11 @@ void readloop(char *oper) * When in summary mode, always show ALL messages instead of just * new or old. Otherwise, show what the user asked for. */ - if (!strcmp(oper, "readnew")) { - strcpy(cmd, "MSGS NEW"); - } - else if (!strcmp(oper, "readold")) { - strcpy(cmd, "MSGS OLD"); - } - else if (!strcmp(oper, "do_search")) { - snprintf(cmd, sizeof(cmd), "MSGS SEARCH|%s", bstr("query")); - } - else { - strcpy(cmd, "MSGS ALL"); - } + rlid[oper].cmd(cmd, sizeof(cmd)); if ((WCC->wc_view == VIEW_MAILBOX) && (maxmsgs > 1) && !WCC->is_mobile) { is_summary = 1; - if (!strcmp(oper, "do_search")) { - snprintf(cmd, sizeof(cmd), "MSGS SEARCH|%s", bstr("query")); - } - else { + if (oper != do_search) { strcpy(cmd, "MSGS ALL"); } } @@ -1122,12 +1114,15 @@ void readloop(char *oper) if (is_summary) { /**< fetch header summary */ load_seen = 1; snprintf(cmd, sizeof(cmd), "MSGS %s|%s||1", - (!strcmp(oper, "do_search") ? "SEARCH" : "ALL"), - (!strcmp(oper, "do_search") ? bstr("query") : "") + (oper == do_search) ? "SEARCH" : "ALL", + (oper == do_search) ? bstr("query") : "" ); startmsg = 1; maxmsgs = 9999999; } + + bbs_reverse = is_bbview && (lbstr("SortOrder") == 2); + if (startmsg == 0L) { if (bbs_reverse) { Msg = GetMessagePtrAt((nummsgs >= maxmsgs) ? (nummsgs - maxmsgs) : 0, WCC->summ); @@ -1165,11 +1160,14 @@ void readloop(char *oper) if (nummsgs == 0) { if (care_for_empty_list) { wprintf("

"); - if (!strcmp(oper, "readnew")) { + switch (oper) { + case readnew: wprintf(_("No new messages.")); - } else if (!strcmp(oper, "readold")) { + break; + case readold: wprintf(_("No old messages.")); - } else { + break; + default: wprintf(_("No messages here.")); } wprintf("
\n"); @@ -1292,18 +1290,7 @@ void readloop(char *oper) } if (is_summary) { - wprintf("" - "\n"); /**< end of 'fix_scrollbar_bug' div */ - wprintf(""); /**< end of 'message_list' div */ - - /** Here's the grab-it-to-resize-the-message-list widget */ - wprintf("
" - "

" - "
\n" - ); - - wprintf("
"); /**< The preview pane will initially be empty */ + do_template("summary_trailer", NULL); } else if (WCC->is_mobile) { wprintf("
"); } @@ -1640,7 +1627,7 @@ void post_message(void) * Otherwise, just go to the "read messages" loop. */ else { - readloop("readnew"); + readloop(readnew); } } @@ -1684,7 +1671,7 @@ void display_enter(void) } else if (buf[0] != '2') { /** Any other error means that we cannot continue */ sprintf(WCC->ImportantMessage, "%s", &buf[4]); - readloop("readnew"); + readloop(readnew); return; } @@ -1801,7 +1788,7 @@ void delete_msg(void) serv_getln(buf, sizeof buf); sprintf(WC->ImportantMessage, "%s", &buf[4]); - readloop("readnew"); + readloop(readnew); } @@ -1824,7 +1811,7 @@ void move_msg(void) sprintf(WC->ImportantMessage, (_("The message was not moved."))); } - readloop("readnew"); + readloop(readnew); } @@ -1884,11 +1871,11 @@ void confirm_move_msg(void) wDumpContent(1); } -void readnew(void) { readloop("readnew");} -void readold(void) { readloop("readold");} -void readfwd(void) { readloop("readfwd");} -void headers(void) { readloop("headers");} -void do_search(void) { readloop("do_search");} +void h_readnew(void) { readloop(readnew);} +void h_readold(void) { readloop(readold);} +void h_readfwd(void) { readloop(readfwd);} +void h_headers(void) { readloop(headers);} +void h_do_search(void) { readloop(do_search);} @@ -1899,11 +1886,11 @@ void InitModule_MSG (void) { - WebcitAddUrlHandler(HKEY("readnew"), readnew, NEED_URL); - WebcitAddUrlHandler(HKEY("readold"), readold, NEED_URL); - WebcitAddUrlHandler(HKEY("readfwd"), readfwd, NEED_URL); - WebcitAddUrlHandler(HKEY("headers"), headers, NEED_URL); - WebcitAddUrlHandler(HKEY("do_search"), do_search, 0); + WebcitAddUrlHandler(HKEY("readnew"), h_readnew, NEED_URL); + WebcitAddUrlHandler(HKEY("readold"), h_readold, NEED_URL); + WebcitAddUrlHandler(HKEY("readfwd"), h_readfwd, NEED_URL); + WebcitAddUrlHandler(HKEY("headers"), h_headers, NEED_URL); + WebcitAddUrlHandler(HKEY("do_search"), h_do_search, 0); WebcitAddUrlHandler(HKEY("display_enter"), display_enter, 0); WebcitAddUrlHandler(HKEY("post"), post_message, 0); WebcitAddUrlHandler(HKEY("move_msg"), move_msg, 0); diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c index 11a2613a0..005288380 100644 --- a/webcit/msg_renderers.c +++ b/webcit/msg_renderers.c @@ -938,6 +938,46 @@ void tmplput_ATT_FileName(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, vo } +void servcmd_do_search(char *buf, long bufsize) +{ + snprintf(buf, bufsize, "MSGS SEARCH|%s", bstr("query")); +} + +void servcmd_headers(char *buf, long bufsize) +{ + snprintf(buf, bufsize, "MSGS ALL"); +} + +void servcmd_readfwd(char *buf, long bufsize) +{ + snprintf(buf, bufsize, "MSGS ALL"); +} + +void servcmd_readnew(char *buf, long bufsize) +{ + snprintf(buf, bufsize, "MSGS NEW"); +} + +void servcmd_readold(char *buf, long bufsize) +{ + snprintf(buf, bufsize, "MSGS OLD"); +} + + +readloop_struct rlid[] = { + { {HKEY("do_search")}, servcmd_do_search}, + { {HKEY("headers")}, servcmd_headers}, + { {HKEY("readfwd")}, servcmd_readfwd}, + { {HKEY("readnew")}, servcmd_readnew}, + { {HKEY("readold")}, servcmd_readold} +}; + + + + + + + void diff --git a/webcit/notes.c b/webcit/notes.c index 82b6c9262..48582a9fb 100644 --- a/webcit/notes.c +++ b/webcit/notes.c @@ -382,7 +382,7 @@ void add_new_note(void) { vnote_free(v); } - readloop("readfwd"); + readloop(readfwd); } diff --git a/webcit/roomops.c b/webcit/roomops.c index 24bf10eaf..f8a5e4c0e 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -927,7 +927,7 @@ void gotonext(void) */ void smart_goto(char *next_room) { gotoroom(next_room); - readloop("readnew"); + readloop(readnew); } diff --git a/webcit/static/t/msg_listselector.html b/webcit/static/t/msg_listselector.html index ef6bd03b5..d6cb59891 100644 --- a/webcit/static/t/msg_listselector.html +++ b/webcit/static/t/msg_listselector.html @@ -6,8 +6,8 @@ + OnChange="location.href='?SortBy=date&SortOrder=2'" + > @@ -15,7 +15,7 @@ + >

diff --git a/webcit/static/t/select_messageindex.html b/webcit/static/t/select_messageindex.html index a6db1fbc3..4bcd213a1 100644 --- a/webcit/static/t/select_messageindex.html +++ b/webcit/static/t/select_messageindex.html @@ -1 +1 @@ - + diff --git a/webcit/static/t/select_messageindex_all.html b/webcit/static/t/select_messageindex_all.html index 2a69b1c1a..a57429be7 100644 --- a/webcit/static/t/select_messageindex_all.html +++ b/webcit/static/t/select_messageindex_all.html @@ -1 +1 @@ - + diff --git a/webcit/static/t/summary_trailer.html b/webcit/static/t/summary_trailer.html new file mode 100644 index 000000000..49e2f2cfa --- /dev/null +++ b/webcit/static/t/summary_trailer.html @@ -0,0 +1,7 @@ + + + +
+

+
+
diff --git a/webcit/vcard_edit.c b/webcit/vcard_edit.c index 47032cfc2..ae699c660 100644 --- a/webcit/vcard_edit.c +++ b/webcit/vcard_edit.c @@ -889,7 +889,7 @@ void submit_vcard(void) { int i; if (!havebstr("ok_button")) { - readloop("readnew"); + readloop(readnew); return; } @@ -979,7 +979,7 @@ void submit_vcard(void) { do_welcome(); } else { - readloop("readnew"); + readloop(readnew); } } diff --git a/webcit/webcit.c b/webcit/webcit.c index 095082ccb..1bd1e1ee5 100644 --- a/webcit/webcit.c +++ b/webcit/webcit.c @@ -1811,8 +1811,8 @@ void session_loop(HashList *HTTPHeaders, StrBuf *ReqLine, StrBuf *request_method WCC->UrlFragment1 = NewStrBuf(); if (WCC->UrlFragment2 == NULL) WCC->UrlFragment2 = NewStrBuf(); - StrBufPrintf(WCC->UrlFragment1, "%s", index[1]); - StrBufPrintf(WCC->UrlFragment2, "%s", index[2]); + StrBufPrintf(WCC->UrlFragment1, "%s", index[0]); + StrBufPrintf(WCC->UrlFragment2, "%s", index[1]); } if ((Handler->Flags & AJAX) != 0) begin_ajax_response(); diff --git a/webcit/webcit.h b/webcit/webcit.h index 1303daf8b..371aac8da 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -806,7 +806,22 @@ void stripout(char *str, char leftboundary, char rightboundary); void dump_vars(void); void embed_main_menu(void); void serv_read(char *buf, int bytes); -void readloop(char *oper); + +enum { + do_search, + headers, + readfwd, + readnew, + readold +}; + +typedef void (*readloop_servcmd)(char *buf, long bufsize); + +typedef struct _readloopstruct { + ConstStr name; + readloop_servcmd cmd; +} readloop_struct; +void readloop(long oper); int read_message(StrBuf *Target, const char *tmpl, long tmpllen, long msgnum, int printable_view, const StrBuf *section); void do_addrbook_view(addrbookent *addrbook, int num_ab); void display_vcard(StrBuf *Target, const char *vcard_source, char alpha, int full, char *storename, long msgnum); -- 2.30.2