X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fbbsview_renderer.c;h=8bed3af37ddae02e57728da12e16119607de7b82;hb=4b4dc864ede7c5d8d956febe4a0afb422b78e7c4;hp=4d3ef1be90511e7fb700225f2948a1a0b9b02c70;hpb=fd034bea666febed8eff22cf10f2b72b8b009665;p=citadel.git diff --git a/webcit/bbsview_renderer.c b/webcit/bbsview_renderer.c index 4d3ef1be9..8bed3af37 100644 --- a/webcit/bbsview_renderer.c +++ b/webcit/bbsview_renderer.c @@ -27,7 +27,7 @@ #include "webcit.h" #include "webserver.h" -#include "groupdav.h" +#include "dav.h" /* * Data which gets passed around between the various functions in this module @@ -81,7 +81,9 @@ int bbsview_GetParamsGetServerCall(SharedMessageStatus *Stat, void **ViewSpecific, long oper, char *cmd, - long len) + long len, + char *filter, + long flen) { struct bbsview *BBS = malloc(sizeof(struct bbsview)); memset(BBS, 0, sizeof(struct bbsview)); @@ -181,6 +183,7 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, const StrBuf *Mime; int start_index = 0; int end_index = 0; + int go_to_the_very_end = 0; if (Stat->nummsgs > 0) { syslog(9, "sorting %d messages\n", BBS->num_msgs); @@ -220,9 +223,26 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, */ if (BBS->requested_page == (-3)) { if (BBS->num_msgs == 0) { + /* + * The room is empty; just start at the top and leave it there. + */ BBS->requested_page = 0; } + else if ( + (BBS->num_msgs > 0) + && (BBS->lastseen <= BBS->msgs[0]) + ) { + /* + * All messages are new; this is probably the user's first visit to the room, + * so start at the last page instead of showing ancient history. + */ + BBS->requested_page = BBS->num_pages - 1; + go_to_the_very_end = 1; + } else { + /* + * Some messages are old and some are new. Go to the start of new messages. + */ for (i=0; inum_msgs; ++i) { if ( (BBS->msgs[i] > BBS->lastseen) @@ -266,7 +286,9 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, ) { /* new messages start here */ do_template("start_of_new_msgs"); - StrBufAppendPrintf(WC->trailing_javascript, "location.href=\"#newmsgs\";\n"); + if (!go_to_the_very_end) { + StrBufAppendPrintf(WC->trailing_javascript, "location.href=\"#newmsgs\";\n"); + } } if (BBS->msgs[i] > 0L) { read_message(WC->WBuf, HKEY("view_message"), BBS->msgs[i], NULL, &Mime); @@ -277,7 +299,9 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, ) { /* no new messages */ do_template("no_new_msgs"); - StrBufAppendPrintf(WC->trailing_javascript, "location.href=\"#nonewmsgs\";\n"); + if (!go_to_the_very_end) { + StrBufAppendPrintf(WC->trailing_javascript, "location.href=\"#nonewmsgs\";\n"); + } } } } @@ -288,7 +312,13 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, /* Display the selecto-bar with the page numbers */ wc_printf("
"); + if (seq == 2) { + wc_printf(""); + } wc_printf(_("Go to page: ")); + if (seq == 2) { + wc_printf(""); + } first = 0; last = BBS->num_pages - 1; @@ -315,7 +345,12 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, wc_printf("["); } else { - wc_printf("", i); + wc_printf("CurRoom.name)); + wc_printf("?start_reading_at=%ld\">", + BBS->msgs[i*Stat->maxmsgs] + ); + /* wc_printf("?page=%d\">", i); */ wc_printf(""); } if ( @@ -331,7 +366,7 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, wc_printf(_("Last")); } else { - wc_printf("%d", i + 1); // change to one-based for display + wc_printf("%d", i + 1); /* change to one-based for display */ } if (i == BBS->requested_page) { wc_printf("]"); @@ -355,6 +390,9 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, } } + if (go_to_the_very_end) { + StrBufAppendPrintf(WC->trailing_javascript, "location.href=\"#end_of_msgs\";\n"); + } return(0); } @@ -381,6 +419,7 @@ InitModule_BBSVIEWRENDERERS VIEW_BBS, bbsview_GetParamsGetServerCall, NULL, + NULL, NULL, bbsview_LoadMsgFromServer, bbsview_RenderView_or_Tail,