/* * Red Bee Browser * * Copyright (c) 2013 Tran Dinh Thoai <dthoai@yahoo.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 3. * * 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. * * You should have received a copy of the GNU General Public License * along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.redbee.web; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.ImageLoader; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Display; import com.redbee.Controller; import com.redbee.schema.Entity; public class BookmarkPage extends Page { private static Logger logger = Logger.getLogger(BookmarkPage.class); public BookmarkPage(HttpServletRequest request, HttpServletResponse response) { super(request, response); } @Override public void execute() throws Exception { Map args = newArgs(); String link = getParameter("l"); String title = getParameter("title"); String desc = getParameter("desc"); String preview = getParameter("preview"); String capture = getParameter("c"); String message = ""; boolean finished = false; if (isPost()) { if (message.length() == 0 && title.trim().length() == 0) { message = "TitleRequired"; } if (message.length() == 0) { Entity pat = Controller.getInstance().newEntity("bookmark"); List<Entity> rs = pat.search("link", pat.newTermQuery(pat.newTerm("link", link)), 1); if (rs.size() == 0) { pat.setKind("link"); pat.setSchema("a|title|a|desc|s|link|s|preview"); pat.setId(Controller.getInstance().uniqid()); pat.setString("link", link); pat.setString("preview", ""); } else { pat = rs.get(0); } if ("1".equals(capture)) { try { boolean found = false; File file = new File(Controller.getInstance().getBufferDir(), preview + ".png"); if (file.exists()) { found = true; } if (!found) { file = new File(Controller.getInstance().getBufferDir2(), preview + ".png"); if (file.exists()) { found = true; } } if (found) { String previewDir = new File(Controller.getInstance().getDatDir(), "files").getAbsolutePath(); previewDir = new File(previewDir, "bookmark").getAbsolutePath(); String fullDir = new File(previewDir, "full-preview").getAbsolutePath(); String smallDir = new File(previewDir, "small-preview").getAbsolutePath(); new File(fullDir).mkdirs(); new File(smallDir).mkdirs(); InputStream is = new FileInputStream(file); byte[] data = new byte[is.available()]; is.read(data); is.close(); OutputStream os = new FileOutputStream(new File(fullDir, preview + ".png")); os.write(data); os.close(); Image srcImg = new Image(Display.getDefault(), new FileInputStream(file)); Image tagImg = new Image(Display.getDefault(), new Rectangle(0, 0, 800, 600)); GC gc = new GC(tagImg); gc.drawImage(srcImg, 0, 0); ImageLoader io = new ImageLoader(); io.data = new ImageData[] {tagImg.getImageData()}; io.save(new FileOutputStream(new File(smallDir, preview + ".png")), SWT.IMAGE_PNG); pat.setString("preview", preview); } } catch (Exception e) { logger.error("", e); } } pat.setString("title", title); pat.setString("desc", desc); pat.save(); finished = true; } } else { try { org.jsoup.Connection conn = org.jsoup.Jsoup.connect(link); conn.timeout(60000); conn.userAgent("Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1"); org.jsoup.nodes.Document doc = conn.get(); link = conn.request().url().toString(); title = doc.title(); desc = doc.text(); } catch (Exception e) { logger.error("", e); } if ("1".equals(capture)) { try { String id = Controller.getInstance().uniqid(); String filename = new File(Controller.getInstance().getBufferDir(), id + ".png").getAbsolutePath(); String url = "http://api.snapito.com/?url=" + java.net.URLEncoder.encode(link, "UTF-8"); org.jsoup.Connection conn = org.jsoup.Jsoup.connect(link); conn.timeout(60000); conn.ignoreContentType(true); conn.userAgent("Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1"); conn.execute(); url = "http://cache.snapito.com/api/image?_cache_redirect=true&url=" + java.net.URLEncoder.encode(link, "UTF-8") + "&type=png"; conn.url(url); byte[] data = conn.execute().bodyAsBytes(); OutputStream os = new FileOutputStream(filename); os.write(data); os.close(); preview = id; } catch (Exception e) { logger.error("", e); preview = ""; } } } args.put("capture", capture); args.put("preview", preview); args.put("finished", finished); args.put("message", message); args.put("link", link); args.put("title", title); args.put("desc", desc); args.put("linkR", link.replaceAll("<", "<").replaceAll(">", ">")); args.put("titleR", title.replaceAll("<", "<").replaceAll(">", ">")); args.put("descR", desc.replaceAll("<", "<").replaceAll(">", ">")); loadPage("Bookmark.vm", args); } }