package jtweet.web; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import jtweet.gae.GCache; import jtweet.oauth.Utils; import twitter4j.DirectMessage; import twitter4j.Status; import twitter4j.TwitterException; import freemarker.template.Template; import freemarker.template.TemplateException; @SuppressWarnings("serial") public class MobileHomeServlet extends JTweetServlet { static final Logger logger = Logger.getLogger(MobileHomeServlet.class.getName()); protected String uri; public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { resp.setContentType("text/html; charset=UTF-8"); resp.setCharacterEncoding("UTF-8"); req.setCharacterEncoding("UTF-8"); uri = req.getRequestURI(); String action = uri.substring(1); String page = req.getParameter("page"); detectBrowser(req); logger.info("Browser:"+browser); if (isLogin(req)) { if (Utils.isEmptyOrNull(getPasswd())) { twitterOAuth(getAccessToken(), getAccessTokenSecret(), req); } else { init_twitter(getUsername(), getPasswd(), req); } if (page != null) { try { int p = Integer.parseInt(page); if (p > 0) paging.setPage(p); else { resp.sendRedirect(uri); return; } } catch (NumberFormatException e) { resp.sendRedirect(uri); return; } } if (action.equalsIgnoreCase("mhome")) { getHomeTimeline(resp); } else if (action.equalsIgnoreCase("mreply")) { getReplyTimeline(resp); } else if (action.equalsIgnoreCase("mfavor")) { getFavorTimeline(resp); } else if (action.equalsIgnoreCase("mmessage")) { getMsgTimeline(resp); } else if (action.equalsIgnoreCase("mpublic")) { getPubTimeline(resp); } else if (action.equalsIgnoreCase("moutbox")) { getOutboxTimeline(resp); } else { resp.sendRedirect("/mhome"); } } else { redirectLogin(req, resp); } } protected void getHomeTimeline(HttpServletResponse resp) throws IOException { HashMap<String, Object> root = new HashMap<String, Object>(); freemarker.template.Configuration config = new freemarker.template.Configuration(); config.setDirectoryForTemplateLoading(new File("template")); config.setDefaultEncoding("UTF-8"); try { List<Status> status = twitter.getFriendsTimeline(paging); root.put("user", getTuser()); root.put("rate", twitter.rateLimitStatus()); root.put("title", "时间线"); root.put("browser", browser); root.put("addjs", "/js/home.js"); root.put("uri", uri); root.put("page", paging.getPage()); root.put("status", status); Template t = config.getTemplate("m_home.ftl"); t.process(root, resp.getWriter()); } catch (TwitterException e) { // TODO Auto-generated catch block resp.sendError(e.getStatusCode()); e.printStackTrace(); } catch (TemplateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } protected void getReplyTimeline(HttpServletResponse resp) throws IOException { HashMap<String, Object> root = new HashMap<String, Object>(); freemarker.template.Configuration config = new freemarker.template.Configuration(); config.setDirectoryForTemplateLoading(new File("template")); config.setDefaultEncoding("UTF-8"); try { List<Status> status = twitter.getMentions(paging); root.put("user", getTuser()); root.put("rate", twitter.rateLimitStatus()); root.put("title", "回复"); root.put("browser", browser); root.put("addjs", "/js/reply.js"); root.put("uri", uri); root.put("page", paging.getPage()); root.put("status", status); Template t = config.getTemplate("m_home.ftl"); t.process(root, resp.getWriter()); } catch (TwitterException e) { // TODO Auto-generated catch block resp.sendError(e.getStatusCode()); e.printStackTrace(); } catch (TemplateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @SuppressWarnings("unchecked") protected void getPubTimeline(HttpServletResponse resp) throws IOException { HashMap<String, Object> root = new HashMap<String, Object>(); freemarker.template.Configuration config = new freemarker.template.Configuration(); config.setDirectoryForTemplateLoading(new File("template")); config.setDefaultEncoding("UTF-8"); try { List<Status> status = (List<Status>) GCache.get("pub," + paging.getPage()); if (null == status) { //status = twitter.getPublicTimeline(paging); status = twitter.getFriendsTimeline(paging); GCache.put("pub," + paging.getPage(), status, 120); } root.put("user", getTuser()); root.put("rate", twitter.rateLimitStatus()); root.put("title", "公共页面"); root.put("browser", browser); root.put("addjs", "/js/public.js"); root.put("uri", uri); root.put("page", paging.getPage()); root.put("status", status); Template t = config.getTemplate("m_home.ftl"); t.process(root, resp.getWriter()); } catch (TwitterException e) { logger.log(Level.SEVERE, e.getMessage()); resp.sendError(e.getStatusCode()); } catch (TemplateException e) { logger.log(Level.SEVERE, e.getMessage()); } } protected void getFavorTimeline(HttpServletResponse resp) throws IOException { HashMap<String, Object> root = new HashMap<String, Object>(); freemarker.template.Configuration config = new freemarker.template.Configuration(); config.setDirectoryForTemplateLoading(new File("template")); config.setDefaultEncoding("UTF-8"); try { List<Status> status = twitter.getFavorites(paging.getPage()); root.put("user", getTuser()); root.put("rate", twitter.rateLimitStatus()); root.put("title", "收藏"); root.put("browser", browser); root.put("addjs", "/js/favor.js"); root.put("uri", uri); root.put("page", paging.getPage()); root.put("status", status); Template t = config.getTemplate("m_home.ftl"); t.process(root, resp.getWriter()); } catch (TwitterException e) { // TODO Auto-generated catch block resp.sendError(e.getStatusCode()); e.printStackTrace(); } catch (TemplateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } protected void getMsgTimeline(HttpServletResponse resp) throws IOException { HashMap<String, Object> root = new HashMap<String, Object>(); freemarker.template.Configuration config = new freemarker.template.Configuration(); config.setDirectoryForTemplateLoading(new File("template")); config.setDefaultEncoding("UTF-8"); try { List<DirectMessage> msg = twitter.getDirectMessages(paging); root.put("user", getTuser()); root.put("rate", twitter.rateLimitStatus()); root.put("title", "消息"); root.put("browser", browser); //root.put("addjs", "/js/message.js"); root.put("uri", uri); root.put("page", paging.getPage()); root.put("msg", msg); Template t = config.getTemplate("mmessage.ftl"); t.process(root, resp.getWriter()); } catch (TwitterException e) { // TODO Auto-generated catch block resp.sendError(e.getStatusCode()); e.printStackTrace(); } catch (TemplateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } protected void getOutboxTimeline(HttpServletResponse resp) throws IOException { HashMap<String, Object> root = new HashMap<String, Object>(); freemarker.template.Configuration config = new freemarker.template.Configuration(); config.setDirectoryForTemplateLoading(new File("template")); config.setDefaultEncoding("UTF-8"); try { List<DirectMessage> msg = twitter.getSentDirectMessages(paging); root.put("user", getTuser()); root.put("rate", twitter.rateLimitStatus()); root.put("title", "发件箱"); root.put("browser", browser); //root.put("addjs", "/js/outbox.js"); root.put("uri", uri); root.put("page", paging.getPage()); root.put("msg", msg); Template t = config.getTemplate("mmessage.ftl"); t.process(root, resp.getWriter()); } catch (TwitterException e) { // TODO Auto-generated catch block resp.sendError(e.getStatusCode()); e.printStackTrace(); } catch (TemplateException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }