Skip to content

Commit f5dd92e

Browse files
jpage4500danikula
authored andcommitted
allow user to create a custom DiskUsage class (or extend LruDiskUsage class) to implement custom cache keep/delete rules
1 parent 351cf2b commit f5dd92e

4 files changed

Lines changed: 29 additions & 2 deletions

File tree

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,16 @@ private HttpProxyCacheServer newProxy() {
9999
}
100100
```
101101

102+
or even implement your own `DiskUsage` strategy:
103+
```java
104+
private HttpProxyCacheServer newProxy() {
105+
return new HttpProxyCacheServer.Builder(this)
106+
.diskUsage(new MyCoolDiskUsageStrategy())
107+
.build();
108+
}
109+
```
110+
111+
102112
### Listen caching progress
103113
Use `HttpProxyCacheServer.registerCacheListener(CacheListener listener)` method to set listener with callback `onCacheAvailable(File cacheFile, String url, int percentsAvailable)` to be aware of caching progress. Do not forget to to unsubscribe listener with help of `HttpProxyCacheServer.unregisterCacheListener(CacheListener listener)` method to avoid memory leaks.
104114

library/src/main/java/com/danikula/videocache/HttpProxyCacheServer.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,16 @@ public Builder maxCacheFilesCount(int count) {
414414
return this;
415415
}
416416

417+
/**
418+
* Set custom DiskUsage logic for handling when to keep or clean cache.
419+
*
420+
* @param diskUsage a disk usage strategy, cant be {@code null}.
421+
*/
422+
public Builder diskUsage(DiskUsage diskUsage) {
423+
this.diskUsage = checkNotNull(diskUsage);
424+
return this;
425+
}
426+
417427
/**
418428
* Builds new instance of {@link HttpProxyCacheServer}.
419429
*

library/src/main/java/com/danikula/videocache/file/Files.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package com.danikula.videocache.file;
22

3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
36
import java.io.File;
47
import java.io.IOException;
58
import java.io.RandomAccessFile;
69
import java.util.Arrays;
710
import java.util.Collections;
811
import java.util.Comparator;
12+
import java.util.Date;
913
import java.util.LinkedList;
1014
import java.util.List;
1115

@@ -16,6 +20,8 @@
1620
*/
1721
class Files {
1822

23+
private static final Logger LOG = LoggerFactory.getLogger("Files");
24+
1925
static void makeDir(File directory) throws IOException {
2026
if (directory.exists()) {
2127
if (!directory.isDirectory()) {
@@ -46,7 +52,8 @@ static void setLastModifiedNow(File file) throws IOException {
4652
if (!modified) {
4753
modify(file);
4854
if (file.lastModified() < now) {
49-
throw new IOException("Error set last modified date to " + file);
55+
// NOTE: apparently this is a known issue (see: http://stackoverflow.com/questions/6633748/file-lastmodified-is-never-what-was-set-with-file-setlastmodified)
56+
LOG.warn("Last modified date {} is not set for file {}", new Date(file.lastModified()), file.getAbsolutePath());
5057
}
5158
}
5259
}

library/src/main/java/com/danikula/videocache/file/LruDiskUsage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*
1616
* @author Alexey Danilov (danikula@gmail.com).
1717
*/
18-
abstract class LruDiskUsage implements DiskUsage {
18+
public abstract class LruDiskUsage implements DiskUsage {
1919

2020
private static final Logger LOG = LoggerFactory.getLogger("LruDiskUsage");
2121
private final ExecutorService workerThread = Executors.newSingleThreadExecutor();

0 commit comments

Comments
 (0)