Package cx.fbn.nevernote.utilities

Source Code of cx.fbn.nevernote.utilities.ImageFetcher

/*
* This file is part of NixNote
* Copyright 2009 Randy Baumgarte
*
* This file may be licensed under the terms of of the
* GNU General Public License Version 2 (the ``GPL'').
*
* Software distributed under the License is distributed
* on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the GPL for the specific language
* governing rights and limitations.
*
* You should have received a copy of the GPL along with this
* program. If not, go to http://www.gnu.org/licenses/gpl.html
* or write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/

package cx.fbn.nevernote.utilities;

//Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates.
//You may study, use, modify, and distribute this example for any purpose.
//This example is provided WITHOUT WARRANTY either expressed or implied.

import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import com.evernote.edam.type.Data;
import com.evernote.edam.type.Resource;
import com.evernote.edam.type.ResourceAttributes;
import com.trolltech.qt.core.QUuid;

import cx.fbn.nevernote.sql.DatabaseConnection;

public class ImageFetcher {
 
  private Resource newResource;
  private final ApplicationLogger logger;
  private final DatabaseConnection conn;
  private final String noteGuid;
 
 
  public ImageFetcher(DatabaseConnection c, ApplicationLogger l, String g) {
    newResource = new Resource();
    logger = l;
    conn = c;
    noteGuid = g;
  }
 

// Get the contents of a URL and return it as an image
public boolean fetch(String address)
     throws MalformedURLException, IOException
{
   URL u = new URL(address);
   URLConnection uc = u.openConnection();
   String contentType = uc.getContentType();
   int contentLength = uc.getContentLength();
   if (contentType.startsWith("text/") || contentLength == -1) {
       throw new IOException("This is not a binary file.");
   }
   InputStream raw = uc.getInputStream();
   InputStream in = new BufferedInputStream(raw);
   byte[] data = new byte[contentLength];
   int bytesRead = 0;
   int offset = 0;
   while (offset < contentLength) {
     bytesRead = in.read(data, offset, data.length - offset);
     if (bytesRead == -1)
       break;
     offset += bytesRead;
   }
   in.close();

   if (offset != contentLength) {
     throw new IOException("Only read " + offset + " bytes; Expected " + contentLength + " bytes");
   }
 
   newResource = createResource(data, address);
   if (newResource != null)
     return true;
   else
     return false;
}
   // Convert the binary data to a resource
  private Resource createResource(byte[] fileData, String address) {
    logger.log(logger.EXTREME, "Inside create resource");
    //These two lines are added to handle odd characters in the name like #.  Without it
    // toLocalFile() chokes and returns the wrong name.
      MessageDigest md;
      try {
        logger.log(logger.EXTREME, "Generating MD5");
        md = MessageDigest.getInstance("MD5");
        md.update(fileData);
        byte[] hash = md.digest();
 
        Resource r = new Resource();
        r.setGuid(QUuid.createUuid().toString().replace("}", "").replace("{", ""));
        r.setNoteGuid(noteGuid);
        r.setMime("image/" +address.substring(address.lastIndexOf(".")+1));
        r.setActive(true);
        r.setUpdateSequenceNum(0);
        r.setWidth((short) 0);
        r.setHeight((short) 0);
        r.setDuration((short) 0);
             
        Data d = new Data();
        d.setBody(fileData);
        d.setBodyIsSet(true);
        d.setBodyHash(hash);
        d.setBodyHashIsSet(true);
        r.setData(d);
        d.setSize(fileData.length);
       
        int fileNamePos = address.lastIndexOf(File.separator);
        if (fileNamePos == -1)
          fileNamePos = address.lastIndexOf("/");
         String fileName = address.substring(fileNamePos+1);
        ResourceAttributes a = new ResourceAttributes();
        a.setAltitude(0);
        a.setAltitudeIsSet(false);
        a.setLongitude(0);
        a.setLongitudeIsSet(false);
        a.setLatitude(0);
        a.setLatitudeIsSet(false);
        a.setCameraMake("");
        a.setCameraMakeIsSet(false);
        a.setCameraModel("");
        a.setCameraModelIsSet(false);
        a.setAttachment(false);
        a.setAttachmentIsSet(true);
        a.setClientWillIndex(false);
        a.setClientWillIndexIsSet(true);
        a.setRecoType("");
        a.setRecoTypeIsSet(false);
        a.setSourceURL(fileName);
        a.setSourceURLIsSet(true);
        a.setTimestamp(0);
        a.setTimestampIsSet(false);
        a.setFileName(fileName);
        a.setFileNameIsSet(true);
        r.setAttributes(a);
       
        //conn.getNoteTable().noteResourceTable.saveNoteResource(r, true);
        logger.log(logger.EXTREME, "Resource created");
       
        // Now write it out so someone else can look at it
       
        return r;
      } catch (NoSuchAlgorithmException e1) {
        e1.printStackTrace();
    }
      return null;
  }

}
TOP

Related Classes of cx.fbn.nevernote.utilities.ImageFetcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.