From 38d5956ec528943c3c0cae502885731e5ef01a9d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Wilfried=20G=C3=B6esgens?= Date: Wed, 24 Dec 2008 10:46:20 +0000 Subject: [PATCH] * fix dropdown * demand url parameters on goto* and friends * add function to overwrite url params * adjust the actual url so we don't gotonext on selecting s.th. from the dropdown --- webcit/debian/rules | 2 +- webcit/messages.c | 45 ++++++++++++++------ webcit/msg_renderers.c | 11 +++++ webcit/paramhandling.c | 18 +++++++- webcit/roomops.c | 12 +++--- webcit/static/t/msg_listselector_bottom.html | 6 +-- webcit/static/t/msg_listselector_top.html | 4 +- webcit/subst.c | 15 +++++++ webcit/webcit.h | 2 + 9 files changed, 90 insertions(+), 25 deletions(-) diff --git a/webcit/debian/rules b/webcit/debian/rules index c837f23f9..cea5888c3 100755 --- a/webcit/debian/rules +++ b/webcit/debian/rules @@ -19,7 +19,7 @@ ifneq (,$(findstring profiling,$(DEB_BUILD_OPTIONS))) PROFILE_ARGS= --with-gprof endif ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) - CFLAGS += -O0 -ggdb -rdynamic -MD -MP -D TECH_PREVIEW + CFLAGS += -O0 -ggdb -rdynamic -MD -MP -D TECH_PREVIEW -pedantic LDFLAGS += -pg EXTRA_ARGS = --with-backtrace else diff --git a/webcit/messages.c b/webcit/messages.c index c159a055a..3291e45ac 100644 --- a/webcit/messages.c +++ b/webcit/messages.c @@ -480,7 +480,7 @@ inline message_summary* GetMessagePtrAt(int n, HashList *Summ) } -void DrawMessageDropdown(StrBuf *Selector, long maxmsgs, long startmsg) +long DrawMessageDropdown(StrBuf *Selector, long maxmsgs, long startmsg) { StrBuf *TmpBuf; wcsession *WCC = WC; @@ -488,6 +488,7 @@ void DrawMessageDropdown(StrBuf *Selector, long maxmsgs, long startmsg) int lo, hi, n; int i = 0; long StartMsg = 0; + long ret; void *vMsg; long hklen; const char *key; @@ -495,12 +496,12 @@ void DrawMessageDropdown(StrBuf *Selector, long maxmsgs, long startmsg) int nItems; HashPos *At; long vector[16]; - int nMessages = DEFAULT_MAXMSGS; + int nMessages = (lbstr("SortOrder") == 1)? DEFAULT_MAXMSGS : -DEFAULT_MAXMSGS; TmpBuf = NewStrBuf(); - At = GetNewHashPos(WCC->summ, (lbstr("SortOrder") == 1)? -nMessages : nMessages); + At = GetNewHashPos(WCC->summ, nMessages); nItems = GetCount(WCC->summ); - + ret = abs(nMessages); vector[0] = 7; vector[1] = startmsg; vector[2] = maxmsgs; @@ -509,21 +510,38 @@ void DrawMessageDropdown(StrBuf *Selector, long maxmsgs, long startmsg) while (!done) { lo = GetHashPosCounter(At); - if (lo + nMessages > nItems) { - hi = nItems; - } - else { - hi = lo + nMessages; + if (nMessages > 0) { + if (lo + nMessages > nItems) { + hi = nItems; + } + else { + hi = lo + nMessages; + } + } else { + if (lo + nMessages <= 0) { + hi = 1; + } + else { + if (lo % abs(nMessages) != 0) + hi = lo + (lo % abs(nMessages) * + (nMessages / abs(nMessages))); + else + hi = lo + nMessages; + } } done = !GetNextHashPos(WCC->summ, At, &hklen, &key, &vMsg); Msg = (message_summary*) vMsg; n = (Msg==NULL)? 0 : Msg->msgnum; if (i == 0) StartMsg = n; - vector[4] = lo; + if ((vector[1] == n) && (lo - hi + 1 != nMessages)) { + ret = abs(lo - hi + 1); + } + vector[4] = lo + 1; vector[5] = hi; vector[6] = n; FlushStrBuf(TmpBuf); + dbg_print_longvector(vector); DoTemplate(HKEY("select_messageindex"), TmpBuf, &vector, CTX_LONGVECTOR); StrBufAppendBuf(Selector, TmpBuf, 0); i++; @@ -532,10 +550,12 @@ void DrawMessageDropdown(StrBuf *Selector, long maxmsgs, long startmsg) FlushStrBuf(TmpBuf); vector[1] = lbstr("maxmsgs") == 9999999; vector[2] = 0; + dbg_print_longvector(vector); DoTemplate(HKEY("select_messageindex_all"), TmpBuf, &vector, CTX_LONGVECTOR); StrBufAppendBuf(Selector, TmpBuf, 0); FreeStrBuf(&TmpBuf); DeleteHashPos(&At); + return ret; } void load_seen_flags(void) @@ -679,6 +699,7 @@ void readloop(long oper) } if (is_bbview) { + SetAccessCommand(oper); if (havebstr("SortOrder")) { bbs_reverse = lbstr("SortOrder") == 2; } @@ -752,7 +773,7 @@ void readloop(long oper) BBViewToolBar = NewStrBuf(); MessageDropdown = NewStrBuf(); - DrawMessageDropdown(MessageDropdown, maxmsgs, startmsg); + maxmsgs = DrawMessageDropdown(MessageDropdown, maxmsgs, startmsg); DoTemplate(HKEY("msg_listselector_top"), BBViewToolBar, MessageDropdown, CTX_STRBUF); StrBufAppendBuf(WCC->WBuf, BBViewToolBar, 0); @@ -800,7 +821,7 @@ void readloop(long oper) if (lowest_displayed < 0) lowest_displayed = a; highest_displayed = a; - ++num_displayed; + num_displayed++; } } } diff --git a/webcit/msg_renderers.c b/webcit/msg_renderers.c index d9955e8e5..90202273e 100644 --- a/webcit/msg_renderers.c +++ b/webcit/msg_renderers.c @@ -982,7 +982,18 @@ readloop_struct rlid[] = { +void SetAccessCommand(long Oper) +{ + wcsession *WCC = WC; + if (WCC->UrlFragment1 != NULL ) { + FlushStrBuf(WCC->UrlFragment1); + StrBufAppendBufPlain(WCC->UrlFragment1, + rlid[Oper].name.Key, rlid[Oper].name.len, 0); + } + else + WCC->UrlFragment1 = NewStrBufPlain(rlid[Oper].name.Key, rlid[Oper].name.len); +} diff --git a/webcit/paramhandling.c b/webcit/paramhandling.c index afa264f10..2ebc35305 100644 --- a/webcit/paramhandling.c +++ b/webcit/paramhandling.c @@ -404,9 +404,25 @@ void tmplput_url_part(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void * UrlBuf = WCC->UrlFragment2; else UrlBuf = WCC->UrlFragment3; + if (UrlBuf == NULL) { + lprintf(1, "urlbuf [%s] not set. (in '%s' line %ld);[%s]\n", + Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), + Tokens->Line, + ChrPtr(Tokens->FlatToken)); + StrBufAppendPrintf( + Target, + "
\nurlbuf [%s] not set (in '%s' line %ld)\n[%s]\n
\n", + Tokens->Params[0]->Start, + ChrPtr(Tokens->FileName), + Tokens->Line, + ChrPtr(Tokens->FlatToken)); + + + } StrBufAppendTemplate(Target, nArgs, Tokens, Context, ContextType, - UrlBuf, 1); + UrlBuf, 2); } } diff --git a/webcit/roomops.c b/webcit/roomops.c index affe750aa..958c25d6e 100644 --- a/webcit/roomops.c +++ b/webcit/roomops.c @@ -3844,13 +3844,13 @@ InitModule_ROOMOPS RegisterNamespace("ROOMNAME", 0, 1, tmplput_RoomName, 0); WebcitAddUrlHandler(HKEY("knrooms"), knrooms, 0); - WebcitAddUrlHandler(HKEY("gotonext"), _gotonext, 0); - WebcitAddUrlHandler(HKEY("skip"), gotonext, 0); - WebcitAddUrlHandler(HKEY("ungoto"), ungoto, 0); - WebcitAddUrlHandler(HKEY("dotgoto"), dotgoto, 0); - WebcitAddUrlHandler(HKEY("dotskip"), dotskip, 0); + WebcitAddUrlHandler(HKEY("gotonext"), _gotonext, NEED_URL); + WebcitAddUrlHandler(HKEY("skip"), gotonext, NEED_URL); + WebcitAddUrlHandler(HKEY("ungoto"), ungoto, NEED_URL); + WebcitAddUrlHandler(HKEY("dotgoto"), dotgoto, NEED_URL); + WebcitAddUrlHandler(HKEY("dotskip"), dotskip, NEED_URL); WebcitAddUrlHandler(HKEY("display_private"), _display_private, 0); - WebcitAddUrlHandler(HKEY("goto_private"), goto_private, 0); + WebcitAddUrlHandler(HKEY("goto_private"), goto_private, NEED_URL); WebcitAddUrlHandler(HKEY("zapped_list"), zapped_list, 0); WebcitAddUrlHandler(HKEY("display_zap"), display_zap, 0); WebcitAddUrlHandler(HKEY("zap"), zap, 0); diff --git a/webcit/static/t/msg_listselector_bottom.html b/webcit/static/t/msg_listselector_bottom.html index e459afcf8..20c653137 100644 --- a/webcit/static/t/msg_listselector_bottom.html +++ b/webcit/static/t/msg_listselector_bottom.html @@ -6,7 +6,7 @@ > @@ -14,8 +14,8 @@      + OnChange="location.href='?SortBy=date&SortOrder=2'" + >

diff --git a/webcit/static/t/msg_listselector_top.html b/webcit/static/t/msg_listselector_top.html index 0c81f9cc1..3f4709b3c 100644 --- a/webcit/static/t/msg_listselector_top.html +++ b/webcit/static/t/msg_listselector_top.html @@ -6,7 +6,7 @@ > @@ -14,7 +14,7 @@      > diff --git a/webcit/subst.c b/webcit/subst.c index a4c123594..de4c18ee1 100644 --- a/webcit/subst.c +++ b/webcit/subst.c @@ -2105,7 +2105,22 @@ void tmplput_long_vector(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, voi } } +void dbg_print_longvector(long *LongVector) +{ + StrBuf *Buf = NewStrBufPlain(HKEY("Longvector: [")); + int nItems = LongVector[0]; + int i; + + for (i = 0; i < nItems; i++) { + if (i + 1 < nItems) + StrBufAppendPrintf(Buf, "%d: %ld | ", i, LongVector[i]); + else + StrBufAppendPrintf(Buf, "%d: %ld]\n", i, LongVector[i]); + } + lprintf(1, ChrPtr(Buf)); + FreeStrBuf(&Buf); +} int ConditionalLongVector(WCTemplateToken *Tokens, void *Context, int ContextType) { diff --git a/webcit/webcit.h b/webcit/webcit.h index 73dce523e..bfed02eda 100644 --- a/webcit/webcit.h +++ b/webcit/webcit.h @@ -395,6 +395,7 @@ void RegisterSortFunc(const char *name, long len, CompareFunc Reverse, long ContextType); +void dbg_print_longvector(long *LongVector); /* * \brief Values for wcs_type @@ -819,6 +820,7 @@ typedef struct _readloopstruct { ConstStr name; readloop_servcmd cmd; } readloop_struct; +void SetAccessCommand(long Oper); 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); -- 2.30.2