Cache heavily used Pattern/FileFilter objects
This commit is contained in:
parent
57699dad21
commit
6d124bb690
|
@ -1,5 +1,6 @@
|
|||
package net.filebot.cli;
|
||||
|
||||
import static net.filebot.util.StringUtilities.*;
|
||||
import static java.lang.String.*;
|
||||
import static java.util.Arrays.*;
|
||||
import static java.util.Collections.*;
|
||||
|
@ -186,7 +187,7 @@ public class CmdlineOperations implements CmdlineInterface {
|
|||
CLILogger.config("Auto-detected query: " + seriesNames);
|
||||
} else {
|
||||
// use --q option
|
||||
seriesNames = asList(query.split("[|]"));
|
||||
seriesNames = asList(PIPE.split(query));
|
||||
}
|
||||
|
||||
if (strict && seriesNames.size() > 1) {
|
||||
|
|
|
@ -998,10 +998,10 @@ public class MediaDetection {
|
|||
return movies;
|
||||
}
|
||||
|
||||
private static final Pattern defaultIgnoreTokens = releaseInfo.getVideoFormatPattern(false);
|
||||
private static Pattern formatInfoPattern = releaseInfo.getVideoFormatPattern(false);
|
||||
|
||||
public static String stripFormatInfo(CharSequence name) {
|
||||
return defaultIgnoreTokens.matcher(name).replaceAll("");
|
||||
return formatInfoPattern.matcher(name).replaceAll("");
|
||||
}
|
||||
|
||||
public static String stripReleaseInfo(String name, boolean strict) {
|
||||
|
@ -1144,11 +1144,16 @@ public class MediaDetection {
|
|||
return releaseInfo.cleanRelease(names, strict);
|
||||
}
|
||||
|
||||
private static Pattern blacklistPattern;
|
||||
|
||||
public static List<String> stripBlacklistedTerms(Collection<String> names) throws IOException {
|
||||
Pattern blacklist = releaseInfo.getBlacklistPattern();
|
||||
if (blacklistPattern == null) {
|
||||
blacklistPattern = releaseInfo.getBlacklistPattern();
|
||||
}
|
||||
|
||||
List<String> acceptables = new ArrayList<String>(names.size());
|
||||
for (String it : names) {
|
||||
if (blacklist.matcher(it).replaceAll("").trim().length() > 0) {
|
||||
if (blacklistPattern.matcher(it).replaceAll("").trim().length() > 0) {
|
||||
acceptables.add(it);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,19 +43,32 @@ import org.tukaani.xz.XZInputStream;
|
|||
|
||||
public class ReleaseInfo {
|
||||
|
||||
private String[] videoSources;
|
||||
private Pattern videoSourcePattern;
|
||||
|
||||
public String getVideoSource(String... input) {
|
||||
if (videoSources == null || videoSourcePattern == null) {
|
||||
videoSources = PIPE.split(getProperty("pattern.video.source"));
|
||||
videoSourcePattern = getVideoSourcePattern();
|
||||
}
|
||||
|
||||
// check parent and itself for group names
|
||||
return matchLast(getVideoSourcePattern(), getProperty("pattern.video.source").split("[|]"), input);
|
||||
return matchLast(videoSourcePattern, videoSources, input);
|
||||
}
|
||||
|
||||
private Pattern videoTagPattern;
|
||||
|
||||
public List<String> getVideoTags(String... input) {
|
||||
Pattern pattern = getVideoTagPattern();
|
||||
if (videoTagPattern == null) {
|
||||
videoTagPattern = getVideoTagPattern();
|
||||
}
|
||||
|
||||
List<String> tags = new ArrayList<String>();
|
||||
for (String s : input) {
|
||||
if (s == null)
|
||||
continue;
|
||||
|
||||
Matcher m = pattern.matcher(s);
|
||||
Matcher m = videoTagPattern.matcher(s);
|
||||
while (m.find()) {
|
||||
tags.add(m.group());
|
||||
}
|
||||
|
@ -89,11 +102,17 @@ public class ReleaseInfo {
|
|||
return match;
|
||||
}
|
||||
|
||||
private Map<String, Locale> languages;
|
||||
private Pattern languageSuffix;
|
||||
|
||||
public Locale getLanguageSuffix(String name) {
|
||||
// match locale identifier and lookup Locale object
|
||||
Map<String, Locale> languages = getLanguageMap(Locale.ENGLISH, Locale.getDefault());
|
||||
if (languages == null || languageSuffix == null) {
|
||||
languages = getLanguageMap(Locale.ENGLISH, Locale.getDefault());
|
||||
languageSuffix = getLanguageSuffixPattern(languages.keySet(), false);
|
||||
}
|
||||
|
||||
String lang = matchLast(getLanguageSuffixPattern(languages.keySet(), false), null, name);
|
||||
String lang = matchLast(languageSuffix, null, name);
|
||||
if (lang == null)
|
||||
return null;
|
||||
|
||||
|
@ -148,11 +167,12 @@ public class ReleaseInfo {
|
|||
Pattern videoSource = getVideoSourcePattern();
|
||||
Pattern videoTags = getVideoTagPattern();
|
||||
Pattern videoFormat = getVideoFormatPattern(strict);
|
||||
Pattern stereoscopic3d = getStereoscopic3DPattern();
|
||||
Pattern resolution = getResolutionPattern();
|
||||
Pattern queryBlacklist = getBlacklistPattern();
|
||||
|
||||
stopwords = new Pattern[] { languageTag, videoSource, videoTags, videoFormat, resolution, languageSuffix };
|
||||
blacklist = new Pattern[] { queryBlacklist, languageTag, clutterBracket, releaseGroup, videoSource, videoTags, videoFormat, resolution, languageSuffix };
|
||||
stopwords = new Pattern[] { languageTag, videoSource, videoTags, videoFormat, stereoscopic3d, resolution, languageSuffix };
|
||||
blacklist = new Pattern[] { queryBlacklist, languageTag, clutterBracket, releaseGroup, videoSource, videoTags, videoFormat, stereoscopic3d, resolution, languageSuffix };
|
||||
|
||||
// cache compiled patterns for common usage
|
||||
this.stopwords.put(strict, stopwords);
|
||||
|
@ -341,16 +361,31 @@ public class ReleaseInfo {
|
|||
return seriesDirectMappings;
|
||||
}
|
||||
|
||||
private static FolderEntryFilter diskFolderFilter;
|
||||
|
||||
public FileFilter getDiskFolderFilter() {
|
||||
return new FolderEntryFilter(compile(getProperty("pattern.diskfolder.entry")));
|
||||
if (diskFolderFilter == null) {
|
||||
diskFolderFilter = new FolderEntryFilter(compile(getProperty("pattern.diskfolder.entry")));
|
||||
}
|
||||
return diskFolderFilter;
|
||||
}
|
||||
|
||||
private static RegexFileFilter diskFolderEntryFilter;
|
||||
|
||||
public FileFilter getDiskFolderEntryFilter() {
|
||||
return new RegexFileFilter(compile(getProperty("pattern.diskfolder.entry")));
|
||||
if (diskFolderEntryFilter == null) {
|
||||
diskFolderEntryFilter = new RegexFileFilter(compile(getProperty("pattern.diskfolder.entry")));
|
||||
}
|
||||
return diskFolderEntryFilter;
|
||||
}
|
||||
|
||||
private static ClutterFileFilter clutterFileFilter;
|
||||
|
||||
public FileFilter getClutterFileFilter() throws IOException {
|
||||
return new ClutterFileFilter(getExcludePattern(), Long.parseLong(getProperty("number.clutter.maxfilesize"))); // only files smaller than 250 MB may be considered clutter
|
||||
if (clutterFileFilter == null) {
|
||||
clutterFileFilter = new ClutterFileFilter(getExcludePattern(), Long.parseLong(getProperty("number.clutter.maxfilesize"))); // only files smaller than 250 MB may be considered clutter
|
||||
}
|
||||
return clutterFileFilter;
|
||||
}
|
||||
|
||||
public List<File> getMediaRoots() {
|
||||
|
|
|
@ -1,23 +1,18 @@
|
|||
|
||||
package net.filebot.subtitle;
|
||||
|
||||
|
||||
import static net.filebot.util.StringUtilities.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class MicroDVDReader extends SubtitleReader {
|
||||
|
||||
private double fps = 23.976;
|
||||
|
||||
|
||||
public MicroDVDReader(Readable source) {
|
||||
super(source);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public SubtitleElement readNext() throws Exception {
|
||||
String line = scanner.nextLine();
|
||||
|
@ -60,7 +55,7 @@ public class MicroDVDReader extends SubtitleReader {
|
|||
}
|
||||
|
||||
// translate '|' to new lines
|
||||
String[] lines = text.split("[|]");
|
||||
String[] lines = PIPE.split(text);
|
||||
|
||||
// convert frame interval to time interval
|
||||
return new SubtitleElement(Math.round(startFrame * fps), Math.round(endFrame * fps), join(lines, "\n"));
|
||||
|
|
|
@ -14,6 +14,7 @@ public final class StringUtilities {
|
|||
public static final Pattern SPACE = Pattern.compile("\\s+");
|
||||
public static final Pattern DIGIT = Pattern.compile("\\d+");
|
||||
public static final Pattern NON_DIGIT = Pattern.compile("\\D+");
|
||||
public static final Pattern PIPE = Pattern.compile("|", Pattern.LITERAL);
|
||||
|
||||
public static List<Integer> matchIntegers(CharSequence s) {
|
||||
if (s == null || s.length() == 0) {
|
||||
|
|
Loading…
Reference in New Issue