/UniversalImageLoader/src/com/nostra13/universalimageloader/cache/disc/impl/LimitedAgeDiscCache.java

https://github.com/rashedulkabir/Android-Universal-Image-Loader · Java · 79 lines · 47 code · 10 blank · 22 comment · 5 complexity · 0ad3da5918af68437ec71387d84eaea9 MD5 · raw file

  1. package com.nostra13.universalimageloader.cache.disc.impl;
  2. import java.io.File;
  3. import java.util.Collections;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import com.nostra13.universalimageloader.cache.disc.BaseDiscCache;
  7. import com.nostra13.universalimageloader.cache.disc.naming.FileNameGenerator;
  8. import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
  9. /**
  10. * Cache which deletes files which were loaded more than defined time. Cache size is unlimited.
  11. *
  12. * @author Sergey Tarasevich (nostra13[at]gmail[dot]com)
  13. * @see BaseDiscCache
  14. */
  15. public class LimitedAgeDiscCache extends BaseDiscCache {
  16. private final long maxFileAge;
  17. private final Map<File, Long> loadingDates = Collections.synchronizedMap(new HashMap<File, Long>());
  18. /**
  19. * @param cacheDir
  20. * Directory for file caching
  21. * @param maxAge
  22. * Max file age (in seconds). If file age will exceed this value then it'll be removed on next treatment
  23. * (and therefore be reloaded).
  24. */
  25. public LimitedAgeDiscCache(File cacheDir, long maxAge) {
  26. this(cacheDir, new HashCodeFileNameGenerator(), maxAge);
  27. }
  28. /**
  29. * @param cacheDir
  30. * Directory for file caching
  31. * @param fileNameGenerator
  32. * Name generator for cached files
  33. * @param maxAge
  34. * Max file age (in seconds). If file age will exceed this value then it'll be removed on next treatment
  35. * (and therefore be reloaded).
  36. */
  37. public LimitedAgeDiscCache(File cacheDir, FileNameGenerator fileNameGenerator, long maxAge) {
  38. super(cacheDir, fileNameGenerator);
  39. this.maxFileAge = maxAge * 1000; // to milliseconds
  40. readLoadingDates();
  41. }
  42. private void readLoadingDates() {
  43. File[] cachedFiles = getCacheDir().listFiles();
  44. for (File cachedFile : cachedFiles) {
  45. loadingDates.put(cachedFile, cachedFile.lastModified());
  46. }
  47. }
  48. @Override
  49. public void put(String key, File file) {
  50. long currentTime = System.currentTimeMillis();
  51. file.setLastModified(currentTime);
  52. loadingDates.put(file, currentTime);
  53. }
  54. @Override
  55. public File get(String key) {
  56. File file = super.get(key);
  57. if (file.exists()) {
  58. Long loadingDate = loadingDates.get(file);
  59. if (loadingDate == null) {
  60. loadingDate = file.lastModified();
  61. }
  62. if (System.currentTimeMillis() - loadingDate > maxFileAge) {
  63. file.delete();
  64. loadingDates.remove(file);
  65. }
  66. }
  67. return file;
  68. }
  69. }