1
0
mirror of https://github.com/mitb-archive/filebot synced 2025-03-09 22:09:47 -04:00

Expire cached items after 5 minutes

This commit is contained in:
Reinhard Pointner 2019-02-02 23:04:39 +07:00
parent 9fda2cff15
commit 9ef4669f6f

View File

@ -22,10 +22,14 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Stream; import java.util.stream.Stream;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.ibm.icu.text.Transliterator; import com.ibm.icu.text.Transliterator;
import net.filebot.media.MediaCharacteristics; import net.filebot.media.MediaCharacteristics;
@ -701,7 +705,8 @@ public enum EpisodeMetrics implements SimilarityMetric {
return metric.getSimilarity(o1, o2); return metric.getSimilarity(o1, o2);
} }
private static final Map<Object, String> transformCache = synchronizedMap(new HashMap<Object, String>(64, 4)); private static final Cache<Object, String> transformCache = CacheBuilder.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES).build();
private static final Transliterator transliterator = Transliterator.getInstance("Any-Latin;Latin-ASCII;[:Diacritic:]remove"); private static final Transliterator transliterator = Transliterator.getInstance("Any-Latin;Latin-ASCII;[:Diacritic:]remove");
public static String normalizeObject(Object object) { public static String normalizeObject(Object object) {
@ -709,22 +714,18 @@ public enum EpisodeMetrics implements SimilarityMetric {
return ""; return "";
} }
return transformCache.computeIfAbsent(object, o -> { try {
String name = normalizeFileName(o); return transformCache.get(object, () -> {
// 1. convert to string
// remove checksums, any [...] or (...) // 2. remove checksums, any [...] or (...)
name = removeEmbeddedChecksum(name); // 3. remove obvious release info
// 4. apply transliterator
// remove obvious release info // 5. remove or normalize special characters
name = stripFormatInfo(name); return normalizePunctuation(transliterator.transform(stripFormatInfo(removeEmbeddedChecksum(normalizeFileName(object))))).toLowerCase();
});
synchronized (transliterator) { } catch (ExecutionException e) {
name = transliterator.transform(name); throw new RuntimeException(e.getCause());
} }
// remove or normalize special characters
return normalizePunctuation(name).toLowerCase();
});
} }
private static String normalizeFileName(Object object) { private static String normalizeFileName(Object object) {