diff --git a/src/com/silverwrist/venice/servlets/ConfDisplay.java b/src/com/silverwrist/venice/servlets/ConfDisplay.java index 17af294..cdd7cda 100644 --- a/src/com/silverwrist/venice/servlets/ConfDisplay.java +++ b/src/com/silverwrist/venice/servlets/ConfDisplay.java @@ -390,32 +390,85 @@ public class ConfDisplay extends VeniceServlet { // we're displaying the conference's topic list if (logger.isDebugEnabled()) logger.debug("MODE: display topics in conference"); - setMyLocation(request,"confdisp?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID()); String on_error = "confops?sig=" + sig.getSIGID(); + String my_location = "confdisp?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID(); + boolean read_new = !(StringUtil.isStringEmpty(request.getParameter("rnm"))); + if (read_new) + my_location += "&rn=1"; + setMyLocation(request,my_location); // get any changes to view or sort options TopicSortHolder opts = TopicSortHolder.retrieve(request.getSession(true)); getViewSortDefaults(request,conf.getConfID(),opts,on_error); - TopicListing tl = null; - try - { // create the topic lict - tl = new TopicListing(request,sig,conf,opts.getViewOption(conf.getConfID()), - opts.getSortOption(conf.getConfID())); + if (read_new) + { // we need to generate a TopicPosts view + TopicPosts tpos = null; - } // end try - catch (DataException de) - { // there was a database error retrieving topics - return new ErrorBox("Database Error","Database error listing topics: " + de.getMessage(),on_error); + try + { // generate a topic list first + List topic_list = conf.getTopicList(opts.getViewOption(conf.getConfID()), + opts.getSortOption(conf.getConfID())); - } // end catch - catch (AccessError ae) - { // we were unable to retrieve the topic list - return new ErrorBox("Access Error",ae.getMessage(),on_error); + // now generate the topic visit order + TopicVisitOrder ord = TopicVisitOrder.initialize(request.getSession(true),conf.getConfID(), + topic_list); - } // end catch + // use the new visit order to get the topic we need to visit + short topic_nbr = ord.getNext(); + Iterator it = topic_list.iterator(); + while (it.hasNext()) + { // locate the first topic to be read + topic = (TopicContext)(it.next()); + if (topic.getTopicNumber()==topic_nbr) + break; - return tl; + } // end while + + // determine what the post interval is we want to display + PostInterval piv = getInterval(engine,request,topic,on_error); + + // create the topic posts view + tpos = new TopicPosts(request,engine,sig,conf,topic,piv.getFirst(),piv.getLast(),true,false); + + } // end try + catch (DataException de) + { // there was a database error retrieving messages + return new ErrorBox("Database Error","Database error listing messages: " + de.getMessage(),on_error); + + } // end catch + catch (AccessError ae) + { // we were unable to retrieve the message list + return new ErrorBox("Access Error",ae.getMessage(),on_error); + + } // end catch + + return tpos; // this is what we need! + + } // end if (creating a "read new" topic list view) + else + { // topic listing only... + TopicListing tl = null; + try + { // create the topic lict + tl = new TopicListing(request,sig,conf,opts.getViewOption(conf.getConfID()), + opts.getSortOption(conf.getConfID())); + + } // end try + catch (DataException de) + { // there was a database error retrieving topics + return new ErrorBox("Database Error","Database error listing topics: " + de.getMessage(),on_error); + + } // end catch + catch (AccessError ae) + { // we were unable to retrieve the topic list + return new ErrorBox("Access Error",ae.getMessage(),on_error); + + } // end catch + + return tl; + + } // end else (not reading new messages, but just displaying topics) } // end else (topics in a conference) diff --git a/src/com/silverwrist/venice/servlets/PostMessage.java b/src/com/silverwrist/venice/servlets/PostMessage.java index 355877d..7806dc9 100644 --- a/src/com/silverwrist/venice/servlets/PostMessage.java +++ b/src/com/silverwrist/venice/servlets/PostMessage.java @@ -135,34 +135,38 @@ public class PostMessage extends VeniceServlet if (!(yes.equals(request.getParameter("slip")))) topic.fixSeen(); // no slippage = make sure we mark all as read - if (go_topics) // jump back to the topic list, puhleaze - throw new RedirectResult("confdisp?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID()); + // where do we want to go now? + String target; + if (go_topics) + target = "confdisp?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID(); + else + { // figure out what topic to go to next + short next; + try + { // attempt to get the value of the "next topic" parameter + if (go_next) + { // get the "next topic" parameter + String foo = request.getParameter("next"); + if (StringUtil.isStringEmpty(foo)) + next = topic.getTopicNumber(); + else + next = Short.parseShort(foo); - short next; - try - { // attempt to get the value of the "next topic" parameter - if (go_next) - { // get the "next topic" parameter - String foo = request.getParameter("next"); - if (StringUtil.isStringEmpty(foo)) - next = topic.getTopicNumber(); + } // end if else - next = Short.parseShort(foo); + next = topic.getTopicNumber(); - } // end if - else + } // end try + catch (NumberFormatException nfe) + { // just default me next = topic.getTopicNumber(); - } // end try - catch (NumberFormatException nfe) - { // just default me - next = topic.getTopicNumber(); + } // end catch - } // end catch + target = "confdisp?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&top=" + + next + "&rnm=1"; - // where do we want to go now? - String target = "confdisp?sig=" + sig.getSIGID() + "&conf=" + conf.getConfID() + "&top=" - + next + "&rnm=1"; + } // end else if (yes.equals(request.getParameter("attach"))) return new AttachmentForm(sig,conf,msg,target); // go to upload an attachment diff --git a/src/com/silverwrist/venice/servlets/format/RenderData.java b/src/com/silverwrist/venice/servlets/format/RenderData.java index cafd1a4..8064d50 100644 --- a/src/com/silverwrist/venice/servlets/format/RenderData.java +++ b/src/com/silverwrist/venice/servlets/format/RenderData.java @@ -135,7 +135,7 @@ public class RenderData } // end canGZIPEncode - boolean noSmartTags() + public boolean noSmartTags() { return rconf.noSmartTags(); diff --git a/src/com/silverwrist/venice/servlets/format/SideBoxConferences.java b/src/com/silverwrist/venice/servlets/format/SideBoxConferences.java index a3abf90..1083baf 100644 --- a/src/com/silverwrist/venice/servlets/format/SideBoxConferences.java +++ b/src/com/silverwrist/venice/servlets/format/SideBoxConferences.java @@ -82,8 +82,9 @@ public class SideBoxConferences implements ContentRender + rdat.getEncodedServletPath(href) + "\">" + StringUtil.encodeHTML(conf.getName()) + " (" + StringUtil.encodeHTML(conf.getEnclosingSIG().getName()) + ")\n"); if (conf.anyUnread()) - out.write(" \"New!\"\n"); + out.write(" \"New!\"\n"); out.write("\n\n"); } // end while diff --git a/web/format/conferences.jsp b/web/format/conferences.jsp index 6595de9..723c9fe 100644 --- a/web/format/conferences.jsp +++ b/web/format/conferences.jsp @@ -39,7 +39,8 @@ <%= StringUtil.encodeHTML(data.getConferenceName(i)) %> - Latest activity: <%= rdat.getActivityString(data.getLastUpdateDate(i)) %> <% if (data.anyUnread(i)) { %> - " ALT=\"New!\" BORDER=0 WIDTH=40 HEIGHT=20> + ">" ALT="New!" BORDER=0 WIDTH=40 HEIGHT=20> <% } // end if %>
<% int count = data.getNumHosts(i); %>