From f576526bce48b29d21c0a256c5dea36bfb8370d1 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Fri, 3 Sep 2010 17:27:59 -0400 Subject: [PATCH] Added a "start_reading_at" field to the BBS renderer in webcit. When present, the renderer will start the user out on whichever page contains the specified message number, or the nearest message to that number if an exact match is not found. --- webcit/bbsview_renderer.c | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/webcit/bbsview_renderer.c b/webcit/bbsview_renderer.c index 577e2ed84..193e10915 100644 --- a/webcit/bbsview_renderer.c +++ b/webcit/bbsview_renderer.c @@ -39,6 +39,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 */ }; @@ -83,14 +84,25 @@ int bbsview_GetParamsGetServerCall(SharedMessageStatus *Stat, 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; - /* If a specific page was requested, make sure we go there */ - if (havebstr("page")) { + /* 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 + */ + + /* Or, if a specific page was requested, make sure we go there */ + else if (havebstr("page")) { BBS->requested_page = ibstr("page"); } @@ -181,6 +193,25 @@ int bbsview_RenderView_or_Tail(SharedMessageStatus *Stat, BBS->num_pages = (BBS->num_msgs / Stat->maxmsgs) + 1; } + /* If the requested page number is "whichever page on which msg#xxxxx starts" + * then find the page number which contains that message. + */ + if (BBS->requested_page == (-4)) { + if (BBS->num_msgs == 0) { + BBS->requested_page = 0; + } + else { + for (i=0; inum_msgs; ++i) { + if ( + (BBS->msgs[i] >= BBS->start_reading_at) + && (BBS->requested_page == (-4)) + ) { + BBS->requested_page = (i / Stat->maxmsgs) ; + } + } + } + } + /* If the requested page number is "whichever page on which new messages start" * then change that to an actual page number now. */ -- 2.39.2