From 42516faa2e2aa57114e824a262396e443563a140 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 7 Dec 2011 14:59:30 +0300 Subject: implement offline image caching --- src/org/fox/ttrss/ImageCacheService.java | 181 +++++++++++++++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 src/org/fox/ttrss/ImageCacheService.java (limited to 'src/org/fox/ttrss/ImageCacheService.java') diff --git a/src/org/fox/ttrss/ImageCacheService.java b/src/org/fox/ttrss/ImageCacheService.java new file mode 100644 index 00000000..999b7437 --- /dev/null +++ b/src/org/fox/ttrss/ImageCacheService.java @@ -0,0 +1,181 @@ +package org.fox.ttrss; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.Date; + +import android.app.ActivityManager; +import android.app.IntentService; +import android.app.NotificationManager; +import android.app.ActivityManager.RunningServiceInfo; +import android.content.Intent; +import android.os.Environment; +import android.util.Log; + +public class ImageCacheService extends IntentService { + + private final String TAG = this.getClass().getSimpleName(); + + public static final int NOTIFY_DOWNLOADING = 1; + + private static final String CACHE_PATH = "/org.fox.ttrss/image-cache/"; + + private int m_imagesDownloaded = 0; + + private NotificationManager m_nmgr; + + public ImageCacheService() { + super("ImageCacheService"); + } + + private boolean isDownloadServiceRunning() { + ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE); + for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { + if ("org.fox.ttrss.OfflineDownloadService".equals(service.service.getClassName())) { + return true; + } + } + return false; + } + + + @Override + public void onCreate() { + super.onCreate(); + m_nmgr = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); + } + + protected static boolean isUrlCached(String url) { + String hashedUrl = md5(url); + + File storage = Environment.getExternalStorageDirectory(); + + File file = new File(storage.getAbsolutePath() + CACHE_PATH + "/" + hashedUrl + ".png"); + + return file.exists(); + } + + protected static String getCacheFileName(String url) { + String hashedUrl = md5(url); + + File storage = Environment.getExternalStorageDirectory(); + + File file = new File(storage.getAbsolutePath() + CACHE_PATH + "/" + hashedUrl + ".png"); + + return file.getAbsolutePath(); + } + + protected static void cleanupCache(boolean deleteAll) { + if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { + File storage = Environment.getExternalStorageDirectory(); + File cachePath = new File(storage.getAbsolutePath() + CACHE_PATH); + + long now = new Date().getTime(); + + if (cachePath.isDirectory()) { + for (File file : cachePath.listFiles()) { + if (deleteAll || now - file.lastModified() > 1000*60*60*24*7) { + file.delete(); + } + } + } + } + } + + protected static String md5(String s) { + try { + MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); + digest.update(s.getBytes()); + byte messageDigest[] = digest.digest(); + + StringBuffer hexString = new StringBuffer(); + for (int i=0; i