git://git.nikiroo.be
/
fanfix.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ConfigItem: add colour field
[fanfix.git]
/
src
/
be
/
nikiroo
/
utils
/
Cache.java
diff --git
a/src/be/nikiroo/utils/Cache.java
b/src/be/nikiroo/utils/Cache.java
index 4750ef844f1e6593ab1f90ebd76273ddaee77497..ff2859eb44403062a5186abd78aa0233316a4926 100644
(file)
--- a/
src/be/nikiroo/utils/Cache.java
+++ b/
src/be/nikiroo/utils/Cache.java
@@
-1,13
+1,14
@@
package be.nikiroo.utils;
import java.io.File;
package be.nikiroo.utils;
import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
+import be.nikiroo.utils.streams.MarkableFileInputStream;
+
/**
* A generic cache system, with special support for {@link URL}s.
* <p>
/**
* A generic cache system, with special support for {@link URL}s.
* <p>
@@
-158,7
+159,16
@@
public class Cache {
* @return the number of cleaned items
*/
public int clean(boolean onlyOld) {
* @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
+179,23
@@
public class Cache {
* resources
* @param cacheDir
* the cache directory to clean
* 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
*/
*
* @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) {
int num = 0;
File[] files = cacheDir.listFiles();
if (files != null) {
for (File file : files) {
+ if (limit >= 0 && num >= limit) {
+ return num;
+ }
+
if (file.isDirectory()) {
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()) {
} else {
if (!onlyOld || isOld(file, true)) {
if (file.delete()) {
@@
-247,7
+264,7
@@
public class Cache {
if (cached.exists() && cached.isFile()
&& (allowTooOld || !isOld(cached, stable))) {
try {
if (cached.exists() && cached.isFile()
&& (allowTooOld || !isOld(cached, stable))) {
try {
- return new MarkableFileInputStream(
new FileInputStream(cached)
);
+ return new MarkableFileInputStream(
cached
);
} catch (FileNotFoundException e) {
return null;
}
} catch (FileNotFoundException e) {
return null;
}
@@
-303,8
+320,9
@@
public class Cache {
* in case of I/O error
*/
private void save(InputStream in, File cached) throws IOException {
* in case of I/O error
*/
private void save(InputStream in, File cached) throws IOException {
- clean(true);
+ // We delete AFTER so not to remove the subdir we will use...
IOUtils.write(in, cached);
IOUtils.write(in, cached);
+ clean(true, dir, 10);
}
/**
}
/**