X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=webcit%2Fbbsview_renderer.c;h=67f42b12fb025aa4f9d7079bbcefcb2d5247c5bf;hb=HEAD;hp=aad71a415dd6decc34284b483fb2215a7d85ffa6;hpb=fbc32d158c7f6307d824a9b88f7180dd2d12aafe;p=citadel.git diff --git a/webcit/bbsview_renderer.c b/webcit/bbsview_renderer.c index aad71a415..d06045d0b 100644 --- a/webcit/bbsview_renderer.c +++ b/webcit/bbsview_renderer.c @@ -1,34 +1,27 @@ /* - * $Id$ - * * BBS View renderer module for WebCit * * Note: we briefly had a dynamic UI for this. I thought it was cool, but * it was not received well by the user community. If you want to play - * with it, go get r8256 of bbsview_renderer.c and have fun. - * - * Copyright (c) 1996-2010 by the citadel.org team + * with it, go get commit dcf99fe61379b78436c387ea3f89ebfd4ffaf635 of + * bbsview_renderer.c and have fun. * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * Copyright (c) 1996-2012 by the citadel.org team * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * This program is open source software. You can redistribute it and/or + * modify it under the terms of the GNU General Public License, version 3. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #define RANGE 5 #include "webcit.h" -#include "webserver.h" -#include "groupdav.h" + +#include "dav.h" /* * Data which gets passed around between the various functions in this module @@ -41,6 +34,7 @@ struct bbsview { int alloc_msgs; /* Currently allocated size of array */ int requested_page; /* Which page number did the user request? */ int num_pages; /* Total number of pages in this room */ + long start_reading_at; /* Start reading at the page containing this message */ }; @@ -55,13 +49,15 @@ long bbsview_get_last_seen(void) serv_puts("GTSN"); serv_getln(buf, sizeof buf); if (buf[0] == '2') { + char *colon_pos; + char *comma_pos; - char *comma_pos = strchr(buf, ','); /* kill first comma and everything to its right */ + comma_pos = strchr(buf, ','); /* kill first comma and everything to its right */ if (comma_pos) { *comma_pos = 0; } - char *colon_pos = strchr(buf, ':'); /* kill first colon and everything to its left */ + colon_pos = strchr(buf, ':'); /* kill first colon and everything to its left */ if (colon_pos) { strcpy(buf, ++colon_pos); } @@ -79,20 +75,33 @@ 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)); *ViewSpecific = BBS; - Stat->startmsg = -1; /* not used here */ + Stat->startmsg = (-1); /* not used here */ Stat->sortit = 1; /* not used here */ Stat->num_displayed = DEFAULT_MAXMSGS; /* not used here */ BBS->requested_page = 0; BBS->lastseen = bbsview_get_last_seen(); + BBS->start_reading_at = 0; + + /* By default, the requested page is the first one. */ + if (havebstr("start_reading_at")) { + BBS->start_reading_at = lbstr("start_reading_at"); + BBS->requested_page = (-4); + } + + /* However, if we are asked to start with a specific message number, make sure + * we start on the page containing that message + */ - /* If a specific page was requested, make sure we go there */ - if (havebstr("page")) { + /* Or, if a specific page was requested, make sure we go there */ + else if (havebstr("page")) { BBS->requested_page = ibstr("page"); } @@ -168,11 +177,10 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, const StrBuf *Mime; int start_index = 0; int end_index = 0; - - wc_printf("