better cache
authorNiki Roo <niki@nikiroo.be>
Sun, 14 Apr 2019 09:37:39 +0000 (11:37 +0200)
committerNiki Roo <niki@nikiroo.be>
Sun, 14 Apr 2019 09:37:39 +0000 (11:37 +0200)
src/be/nikiroo/utils/Cache.java
src/be/nikiroo/utils/Downloader.java
src/be/nikiroo/utils/TempFiles.java

index 18b811e397f09c241af4ebaef49a2a1662c4c8a0..dbe2020188ec44ae2dfd673529f49a8e6abdf462 100644 (file)
@@ -158,51 +158,43 @@ public class Cache {
         * @return the number of cleaned items
         */
        public int clean(boolean onlyOld) {
-               return clean(onlyOld, dir);
-       }
-
-       /**
-        * Clean the cache (delete the cached items) in the given cache directory.
-        * 
-        * @param onlyOld
-        *            only clean the files that are considered too old for stable
-        *            resources
-        * @param cacheDir
-        *            the cache directory to clean
-        * 
-        * @return the number of cleaned items
-        */
-       private int clean(boolean onlyOld, File cacheDir) {
                long ms = System.currentTimeMillis();
 
                tracer.trace("Cleaning cache from old files...");
 
-               int num = doClean(onlyOld, cacheDir);
+               int num = clean(onlyOld, dir, -1);
 
-               tracer.trace("Cache cleaned in " + (System.currentTimeMillis() - ms)
-                               + " ms");
+               tracer.trace(num + "cache items cleaned in "
+                               + (System.currentTimeMillis() - ms) + " ms");
 
                return num;
        }
 
        /**
-        * Actual work done for {@link Cache#clean(boolean, File)}.
+        * Clean the cache (delete the cached items) in the given cache directory.
         * 
         * @param onlyOld
         *            only clean the files that are considered too old for stable
         *            resources
         * @param cacheDir
         *            the cache directory to clean
+        * @param limit
+        *            stop after limit files deleted, or -1 for unlimited
         * 
         * @return the number of cleaned items
         */
-       private int doClean(boolean onlyOld, File cacheDir) {
+       private int clean(boolean onlyOld, File cacheDir, int limit) {
                int num = 0;
                File[] files = cacheDir.listFiles();
                if (files != null) {
                        for (File file : files) {
+                               if (limit >= 0 && num >= limit) {
+                                       return num;
+                               }
+
                                if (file.isDirectory()) {
-                                       num += doClean(onlyOld, file);
+                                       num += clean(onlyOld, file, limit);
+                                       file.delete(); // only if empty
                                } else {
                                        if (!onlyOld || isOld(file, true)) {
                                                if (file.delete()) {
@@ -327,7 +319,7 @@ public class Cache {
         *             in case of I/O error
         */
        private void save(InputStream in, File cached) throws IOException {
-               clean(true);
+               clean(true, dir, 10);
                IOUtils.write(in, cached);
        }
 
index 5c847fa623902e92704b5d986a8b3cb8fc1ecc37..efc6a98df54f11a91c271646daf427d7cfca6fdf 100644 (file)
@@ -249,8 +249,8 @@ public class Downloader {
                if (cache != null) {
                        InputStream in = cache.load(originalUrl, false, stable);
                        if (in != null) {
-                               tracer.trace("Take from cache: " + url);
-                               tracer.trace("Original URL from cache: " + originalUrl);
+                               tracer.trace("Use the cache: " + url);
+                               tracer.trace("Original URL : " + originalUrl);
                                return in;
                        }
                }
@@ -388,7 +388,6 @@ public class Downloader {
                                builder.append(';');
                        }
 
-                       // TODO: check if format is ok
                        builder.append(cookie.toString());
                }
 
index b4ac6d2aead595b9e2a9421b6be6ebd60a117b4e..865fbce765c474b30e86362ae36a2343e745eb7e 100644 (file)
@@ -63,7 +63,9 @@ public class TempFiles implements Closeable {
 
                root = base;
 
-               IOUtils.deltree(root, true);
+               if (root.exists()) {
+                       IOUtils.deltree(root, true);
+               }
 
                root = new File(root.getParentFile(), ".temp");
                root.mkdir();