Mercurial Hosting > nabble
diff src/global/web/RootForums.java @ 0:7ecd1a4ef557
add content
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 21 Mar 2019 19:15:52 -0600 |
parents | |
children | 56accc959f8c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/global/web/RootForums.java Thu Mar 21 19:15:52 2019 -0600 @@ -0,0 +1,113 @@ + +package global.web; + +import fschmidt.util.java.HtmlUtils; +import fschmidt.util.servlet.JtpContext; +import global.HtmlGlobalUtils; +import global.Site; +import nabble.model.MessageUtils; +import nabble.model.NodeSearcher; +import nabble.view.lib.HtmlViewUtils; +import org.apache.lucene.search.IndexSearcher; +import org.apache.lucene.search.Query; +import org.apache.lucene.search.TopDocs; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + + +public final class RootForums extends HttpServlet { + + public static final int PAGES = 200; + private static final int ROWS_PER_PAGE = 50; + + static String path() { + return path(1); + } + + static String path(int page) { + return "/free-apps/page" + page + ".html"; + } + + protected void service(HttpServletRequest request,HttpServletResponse response) + throws ServletException, IOException + { + JtpContext jtpContext = (JtpContext)getServletContext().getAttribute(JtpContext.attrName); + jtpContext.setEtag(request,response,"x"); + + PrintWriter out = response.getWriter(); + + String title = "Browse Apps"; + + String pageS = request.getParameter("page"); + int page = Integer.parseInt(pageS); + int iRec = (page-1)*ROWS_PER_PAGE; + + IndexSearcher searcher; + TopDocs hits; + try { + searcher = new IndexSearcher(Site.dir()); + hits = searcher.search( Index.query, iRec+ROWS_PER_PAGE, Site.SORT_BY_VALUE ); + } catch(IOException e) { + throw new RuntimeException(e); + } + try { + HtmlViewUtils.PagingPath pagingPath = new HtmlViewUtils.PagingPath() { + public String path(int row) { + return RootForums.path(1+row/ROWS_PER_PAGE); + } + }; + + + out.print( "\r\n<!DOCTYPE html>\r\n<html lang=\"en\">\r\n <head>\r\n " ); + HtmlGlobalUtils.head(request, response, title + " | Page " + page); + out.print( "\r\n <link rel=\"canonical\" href=\"https://www.nabble.com" ); + out.print( (path(page)) ); + out.print( "\">\r\n <style>\r\n h2{margin-bottom:.2em}\r\n div[sites] > div{min-height:70px}\r\n </style>\r\n </head>\r\n <body lato>\r\n " ); + HtmlGlobalUtils.header(request,response); + out.print( "\r\n <div content center paddingTop>\r\n <h1 oswald>" ); + out.print( (title) ); + out.print( "</h1>\r\n </div>\r\n <div gray content marginBottom>\r\n Page " ); + out.print( (page) ); + out.print( " of " ); + out.print( (PAGES) ); + out.print( "\r\n " ); + HtmlViewUtils.genericPaging(request, response, PAGES*ROWS_PER_PAGE, iRec, ROWS_PER_PAGE, pagingPath, "0 4em .5em", true, 10); + out.print( "\r\n </div>\r\n <div content paddingTop sites>\r\n " ); + + for( int i = iRec; i<hits.scoreDocs.length; i++ ) { + Site site = new Site(searcher.doc(hits.scoreDocs[i].doc)); + String message = site.message(); + message = MessageUtils.getTextWithoutQuotes(message); + message = NodeSearcher.getStartingFragment(message,200,"..."); + message = MessageUtils.hideAllEmails(message); + message = HtmlUtils.htmlEncode(message); + String what = site.type(); + if (what == null || what.matches("mixed|category|board|null")) + what = "forum"; + + out.print( "\r\n <div marginBottom>\r\n <h2>" ); + out.print( (site.link()) ); + out.print( "</h2>\r\n <div gray>\r\n " ); + out.print( (message) ); + out.print( "\r\n </div>\r\n </div>\r\n" ); + + } + + out.print( "\r\n" ); + HtmlViewUtils.genericPaging(request, response, PAGES*ROWS_PER_PAGE, iRec, ROWS_PER_PAGE, pagingPath, ".4em 4em", true, 10); + out.print( "\r\n</div>\r\n" ); + HtmlGlobalUtils.footer(request,response); + out.print( "\r\n</body>\r\n</html>\r\n" ); + + } finally { + searcher.close(); + } + } + +} +