X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fbe%2Fnikiroo%2Futils%2FCache.java;h=dbe2020188ec44ae2dfd673529f49a8e6abdf462;hb=223aa0d4e40e5f3ba9f7b9a7a2165aaff4bf7494;hp=4750ef844f1e6593ab1f90ebd76273ddaee77497;hpb=f6e8d60dbb9f124046f1b951315d74f003624f09;p=nikiroo-utils.git diff --git a/src/be/nikiroo/utils/Cache.java b/src/be/nikiroo/utils/Cache.java index 4750ef8..dbe2020 100644 --- a/src/be/nikiroo/utils/Cache.java +++ b/src/be/nikiroo/utils/Cache.java @@ -158,7 +158,16 @@ public class Cache { * @return the number of cleaned items */ public int clean(boolean onlyOld) { - return clean(onlyOld, dir); + long ms = System.currentTimeMillis(); + + tracer.trace("Cleaning cache from old files..."); + + int num = clean(onlyOld, dir, -1); + + tracer.trace(num + "cache items cleaned in " + + (System.currentTimeMillis() - ms) + " ms"); + + return num; } /** @@ -169,16 +178,23 @@ public class Cache { * 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 clean(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 += clean(onlyOld, file); + num += clean(onlyOld, file, limit); + file.delete(); // only if empty } else { if (!onlyOld || isOld(file, true)) { if (file.delete()) { @@ -303,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); }