This commit is contained in:
Reinhard Pointner 2016-04-02 09:07:10 +00:00
parent b38b1046ed
commit 0ac71b9c7d
23 changed files with 105 additions and 108 deletions

View File

@ -2,14 +2,15 @@ package net.filebot;
import static java.util.Arrays.*; import static java.util.Arrays.*;
import static java.util.Collections.*; import static java.util.Collections.*;
import static java.util.stream.Collectors.*;
import static net.filebot.util.RegularExpressions.*;
import java.io.Serializable; import java.io.Serializable;
import java.util.Comparator; import java.util.Comparator;
import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Set; import java.util.stream.Stream;
public class Language implements Serializable { public class Language implements Serializable {
@ -96,43 +97,23 @@ public class Language implements Serializable {
} }
try { try {
ResourceBundle bundle = ResourceBundle.getBundle(Language.class.getName()); String[] values = TAB.split(getProperty(code), 3);
String[] values = bundle.getString(code).split("\\t", 3); return new Language(code, values[0], values[1], TAB.split(values[2]));
return new Language(code, values[0], values[1], values[2].split("\\t"));
} catch (Exception e) { } catch (Exception e) {
return null; return null;
} }
} }
public static List<Language> getLanguages(String... codes) { public static List<Language> getLanguages(String... codes) {
Language[] languages = new Language[codes.length]; return stream(codes).map(Language::getLanguage).collect(toList());
for (int i = 0; i < codes.length; i++) {
languages[i] = getLanguage(codes[i]);
}
return asList(languages);
} }
public static Language getLanguage(Locale locale) { public static Language getLanguage(Locale locale) {
if (locale != null) { return locale == null ? null : findLanguage(locale.getLanguage());
String code = locale.getLanguage();
for (Language it : availableLanguages()) {
if (it.matches(code)) {
return it;
}
}
}
return null;
} }
public static Language findLanguage(String lang) { public static Language findLanguage(String language) {
for (Language it : availableLanguages()) { return availableLanguages().stream().filter(it -> it.matches(language)).findFirst().orElse(null);
if (it.matches(lang)) {
return it;
}
}
return null;
} }
public static String getStandardLanguageCode(String lang) { public static String getStandardLanguageCode(String lang) {
@ -144,26 +125,27 @@ public class Language implements Serializable {
} }
public static List<Language> availableLanguages() { public static List<Language> availableLanguages() {
ResourceBundle bundle = ResourceBundle.getBundle(Language.class.getName()); String languages = getProperty("languages.ui");
return getLanguages(bundle.getString("languages.ui").split(",")); return getLanguages(COMMA.split(languages));
} }
public static List<Language> commonLanguages() { public static List<Language> commonLanguages() {
ResourceBundle bundle = ResourceBundle.getBundle(Language.class.getName()); String languages = getProperty("languages.common");
return getLanguages(bundle.getString("languages.common").split(",")); return getLanguages(COMMA.split(languages));
} }
public static List<Language> preferredLanguages() { public static List<Language> preferredLanguages() {
Set<String> codes = new LinkedHashSet<String>();
// English | System language | common languages // English | System language | common languages
codes.add("en"); Stream<String> codes = Stream.of("en", Locale.getDefault().getLanguage());
codes.add(Locale.getDefault().getLanguage());
ResourceBundle bundle = ResourceBundle.getBundle(Language.class.getName()); // append common languages
addAll(codes, bundle.getString("languages.common").split(",")); codes = Stream.concat(codes, stream(COMMA.split(getProperty("languages.common")))).distinct();
return getLanguages(codes.toArray(new String[0])); return codes.map(Language::getLanguage).collect(toList());
}
private static String getProperty(String key) {
return ResourceBundle.getBundle(Language.class.getName()).getString(key);
} }
} }

View File

@ -1,10 +1,9 @@
package net.filebot.archive; package net.filebot.archive;
import static net.filebot.util.StringUtilities.*;
import static java.nio.charset.StandardCharsets.*; import static java.nio.charset.StandardCharsets.*;
import static java.util.Arrays.*; import static java.util.Arrays.*;
import static net.filebot.Logging.*; import static net.filebot.Logging.*;
import static net.filebot.util.RegularExpressions.*;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;

View File

@ -1,6 +1,7 @@
package net.filebot.cli; package net.filebot.cli;
import static net.filebot.util.FileUtilities.*; import static net.filebot.util.FileUtilities.*;
import static net.filebot.util.RegularExpressions.*;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -41,7 +42,7 @@ public class BindingsHandler extends MapOptionHandler {
return pos; return pos;
} }
String[] nv = params.getParameter(pos).split("=", 2); String[] nv = EQUALS.split(params.getParameter(pos), 2);
if (nv.length < 2) { if (nv.length < 2) {
return pos; return pos;
} }

View File

@ -14,7 +14,7 @@ import static net.filebot.media.MediaSize.*;
import static net.filebot.media.XattrMetaInfo.*; import static net.filebot.media.XattrMetaInfo.*;
import static net.filebot.subtitle.SubtitleUtilities.*; import static net.filebot.subtitle.SubtitleUtilities.*;
import static net.filebot.util.FileUtilities.*; import static net.filebot.util.FileUtilities.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.RegularExpressions.*;
import java.io.File; import java.io.File;
import java.io.FileFilter; import java.io.FileFilter;

View File

@ -1,5 +1,7 @@
package net.filebot.cli; package net.filebot.cli;
import static net.filebot.util.RegularExpressions.*;
import java.util.Map; import java.util.Map;
import java.util.ResourceBundle; import java.util.ResourceBundle;
@ -47,8 +49,8 @@ public class ScriptShell {
// default imports // default imports
ImportCustomizer imports = new ImportCustomizer(); ImportCustomizer imports = new ImportCustomizer();
imports.addStarImports(bundle.getString("starImport").split(", ")); imports.addStarImports(COMMA.split(bundle.getString("starImport")));
imports.addStaticStars(bundle.getString("starStaticImport").split(", ")); imports.addStaticStars(COMMA.split(bundle.getString("starStaticImport")));
config.addCompilationCustomizers(imports); config.addCompilationCustomizers(imports);
GroovyClassLoader classLoader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader(), config); GroovyClassLoader classLoader = new GroovyClassLoader(Thread.currentThread().getContextClassLoader(), config);

View File

@ -1,15 +1,17 @@
package net.filebot.format; package net.filebot.format;
import static java.nio.charset.StandardCharsets.*;
import static java.util.stream.Collectors.*; import static java.util.stream.Collectors.*;
import static net.filebot.util.RegularExpressions.*;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.regex.Pattern;
import java.util.stream.Stream; import java.util.stream.Stream;
import groovy.lang.Closure; import groovy.lang.Closure;
@ -51,9 +53,9 @@ public class ExpressionFormatFunctions {
public static Map<String, String> csv(String path) throws IOException { public static Map<String, String> csv(String path) throws IOException {
Map<String, String> map = new LinkedHashMap<String, String>(); Map<String, String> map = new LinkedHashMap<String, String>();
for (String line : Files.readAllLines(Paths.get(path), StandardCharsets.UTF_8)) { for (String line : Files.readAllLines(Paths.get(path), UTF_8)) {
for (String delim : new String[] { "\t", ";" }) { for (Pattern delim : new Pattern[] { TAB, SEMICOLON }) {
String[] field = line.split(delim, 2); String[] field = delim.split(line, 2);
if (field.length >= 2) { if (field.length >= 2) {
map.put(field[0], field[1]); map.put(field[0], field[1]);
break; break;
@ -64,7 +66,7 @@ public class ExpressionFormatFunctions {
} }
public static List<String> readLines(String path) throws IOException { public static List<String> readLines(String path) throws IOException {
return Files.readAllLines(Paths.get(path), StandardCharsets.UTF_8); return Files.readAllLines(Paths.get(path), UTF_8);
} }
} }

View File

@ -12,6 +12,7 @@ import static net.filebot.media.XattrMetaInfo.*;
import static net.filebot.similarity.Normalization.*; import static net.filebot.similarity.Normalization.*;
import static net.filebot.subtitle.SubtitleUtilities.*; import static net.filebot.subtitle.SubtitleUtilities.*;
import static net.filebot.util.FileUtilities.*; import static net.filebot.util.FileUtilities.*;
import static net.filebot.util.RegularExpressions.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.StringUtilities.*;
import static net.filebot.web.EpisodeFormat.*; import static net.filebot.web.EpisodeFormat.*;
@ -364,10 +365,10 @@ public class MediaBindingBean {
@Define("channels") @Define("channels")
public String getAudioChannelPositions() { public String getAudioChannelPositions() {
String[] channels = getMediaInfo(StreamKind.Audio, 0, "ChannelPositions/String2", "Channel(s)_Original", "Channel(s)").split("/"); String channels = getMediaInfo(StreamKind.Audio, 0, "ChannelPositions/String2", "Channel(s)_Original", "Channel(s)");
// e.g. 5.1 // e.g. 5.1
return stream(channels).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(1).toPlainString(); return SLASH.splitAsStream(channels).map(BigDecimal::new).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(1).toPlainString();
} }
@Define("resolution") @Define("resolution")
@ -834,7 +835,8 @@ public class MediaBindingBean {
@Define("mediaType") @Define("mediaType")
public List<String> getMediaType() throws Exception { public List<String> getMediaType() throws Exception {
return asList(MediaTypes.getDefault().getMediaType(getExtension()).split("/")); // format engine does not allow / in binding value // format engine does not allow / in binding value
return SLASH.splitAsStream(MediaTypes.getDefault().getMediaType(getExtension())).collect(toList());
} }
@Define("file") @Define("file")

View File

@ -1,5 +1,6 @@
package net.filebot.media; package net.filebot.media;
import static java.util.Arrays.*; import static java.util.Arrays.*;
import static java.util.Collections.*; import static java.util.Collections.*;
import static java.util.regex.Pattern.*; import static java.util.regex.Pattern.*;
@ -10,6 +11,7 @@ import static net.filebot.media.XattrMetaInfo.*;
import static net.filebot.similarity.CommonSequenceMatcher.*; import static net.filebot.similarity.CommonSequenceMatcher.*;
import static net.filebot.similarity.Normalization.*; import static net.filebot.similarity.Normalization.*;
import static net.filebot.util.FileUtilities.*; import static net.filebot.util.FileUtilities.*;
import static net.filebot.util.RegularExpressions.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.StringUtilities.*;
import java.io.File; import java.io.File;

View File

@ -9,6 +9,7 @@ import static java.util.regex.Pattern.*;
import static java.util.stream.Collectors.*; import static java.util.stream.Collectors.*;
import static net.filebot.similarity.Normalization.*; import static net.filebot.similarity.Normalization.*;
import static net.filebot.util.FileUtilities.*; import static net.filebot.util.FileUtilities.*;
import static net.filebot.util.RegularExpressions.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.StringUtilities.*;
import java.io.BufferedReader; import java.io.BufferedReader;
@ -400,37 +401,35 @@ public class ReleaseInfo {
} }
public List<File> getMediaRoots() { public List<File> getMediaRoots() {
List<File> roots = new ArrayList<File>(); String roots = getProperty("folder.media.roots");
for (String it : getProperty("folder.media.roots").split(":")) { return COMMA.splitAsStream(roots).map(File::new).collect(toList());
roots.add(new File(it));
}
return roots;
} }
public String[] getSubtitleCategoryTags() { public String[] getSubtitleCategoryTags() {
return getProperty("pattern.subtitle.tags").split("\\|"); String tags = getProperty("pattern.subtitle.tags");
return PIPE.split(tags);
} }
protected final Resource<Map<Pattern, String>> seriesMappings = resource("url.series-mappings", Cache.ONE_WEEK, Function.identity(), String[]::new).transform(lines -> { private final Resource<Map<Pattern, String>> seriesMappings = resource("url.series-mappings", Cache.ONE_WEEK, Function.identity(), String[]::new).transform(lines -> {
Map<Pattern, String> map = new LinkedHashMap<Pattern, String>(lines.length); Map<Pattern, String> map = new LinkedHashMap<Pattern, String>(lines.length);
stream(lines).map(s -> s.split("\t", 2)).filter(v -> v.length == 2).forEach(v -> { stream(lines).map(s -> TAB.split(s, 2)).filter(v -> v.length == 2).forEach(v -> {
Pattern pattern = compile("(?<!\\p{Alnum})(" + v[0] + ")(?!\\p{Alnum})", CASE_INSENSITIVE); Pattern pattern = compile("(?<!\\p{Alnum})(" + v[0] + ")(?!\\p{Alnum})", CASE_INSENSITIVE);
map.put(pattern, v[1]); map.put(pattern, v[1]);
}); });
return unmodifiableMap(map); return unmodifiableMap(map);
}).memoize(); }).memoize();
protected final Resource<String[]> releaseGroup = lines("url.release-groups", Cache.ONE_WEEK); private final Resource<String[]> releaseGroup = lines("url.release-groups", Cache.ONE_WEEK);
protected final Resource<String[]> queryBlacklist = lines("url.query-blacklist", Cache.ONE_WEEK); private final Resource<String[]> queryBlacklist = lines("url.query-blacklist", Cache.ONE_WEEK);
protected final Resource<String[]> excludeBlacklist = lines("url.exclude-blacklist", Cache.ONE_WEEK); private final Resource<String[]> excludeBlacklist = lines("url.exclude-blacklist", Cache.ONE_WEEK);
protected final Resource<SearchResult[]> tvdbIndex = tsv("url.thetvdb-index", Cache.ONE_WEEK, this::parseSeries, SearchResult[]::new); private final Resource<SearchResult[]> tvdbIndex = tsv("url.thetvdb-index", Cache.ONE_WEEK, this::parseSeries, SearchResult[]::new);
protected final Resource<SearchResult[]> anidbIndex = tsv("url.anidb-index", Cache.ONE_WEEK, this::parseSeries, SearchResult[]::new); private final Resource<SearchResult[]> anidbIndex = tsv("url.anidb-index", Cache.ONE_WEEK, this::parseSeries, SearchResult[]::new);
protected final Resource<Movie[]> movieIndex = tsv("url.movie-list", Cache.ONE_MONTH, this::parseMovie, Movie[]::new); private final Resource<Movie[]> movieIndex = tsv("url.movie-list", Cache.ONE_MONTH, this::parseMovie, Movie[]::new);
protected final Resource<SubtitleSearchResult[]> osdbIndex = tsv("url.osdb-index", Cache.ONE_MONTH, this::parseSubtitle, SubtitleSearchResult[]::new); private final Resource<SubtitleSearchResult[]> osdbIndex = tsv("url.osdb-index", Cache.ONE_MONTH, this::parseSubtitle, SubtitleSearchResult[]::new);
protected final SystemProperty<Duration> refreshDuration = SystemProperty.of("url.refresh", Duration::parse, null); private final SystemProperty<Duration> refreshDuration = SystemProperty.of("url.refresh", Duration::parse, null);
private SearchResult parseSeries(String[] v) { private SearchResult parseSeries(String[] v) {
int id = parseInt(v[0]); int id = parseInt(v[0]);
@ -463,7 +462,7 @@ public class ReleaseInfo {
} }
protected <A> Resource<A[]> tsv(String name, Duration expirationTime, Function<String[], A> parse, IntFunction<A[]> generator) { protected <A> Resource<A[]> tsv(String name, Duration expirationTime, Function<String[], A> parse, IntFunction<A[]> generator) {
return resource(name, expirationTime, s -> parse.apply(s.split("\t")), generator).memoize(); return resource(name, expirationTime, s -> parse.apply(TAB.split(s)), generator).memoize();
} }
protected <A> Resource<A[]> resource(String name, Duration expirationTime, Function<String, A> parse, IntFunction<A[]> generator) { protected <A> Resource<A[]> resource(String name, Duration expirationTime, Function<String, A> parse, IntFunction<A[]> generator) {

View File

@ -2,7 +2,7 @@ package net.filebot.similarity;
import static java.util.Arrays.*; import static java.util.Arrays.*;
import static java.util.Collections.*; import static java.util.Collections.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.RegularExpressions.*;
import java.text.CollationKey; import java.text.CollationKey;
import java.text.Collator; import java.text.Collator;

View File

@ -1,7 +1,7 @@
package net.filebot.similarity; package net.filebot.similarity;
import static java.util.regex.Pattern.*; import static java.util.regex.Pattern.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.RegularExpressions.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;

View File

@ -1,6 +1,6 @@
package net.filebot.similarity; package net.filebot.similarity;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.RegularExpressions.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;

View File

@ -3,6 +3,7 @@ package net.filebot.similarity;
import static java.util.Collections.*; import static java.util.Collections.*;
import static java.util.regex.Pattern.*; import static java.util.regex.Pattern.*;
import static net.filebot.util.FileUtilities.*; import static net.filebot.util.FileUtilities.*;
import static net.filebot.util.RegularExpressions.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.StringUtilities.*;
import java.io.File; import java.io.File;

View File

@ -1,5 +1,6 @@
package net.filebot.subtitle; package net.filebot.subtitle;
import static net.filebot.util.RegularExpressions.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.StringUtilities.*;
import java.util.ArrayList; import java.util.ArrayList;

View File

@ -1,9 +1,11 @@
package net.filebot.ui.rename; package net.filebot.ui.rename;
import static java.util.stream.Collectors.*;
import static net.filebot.Logging.*; import static net.filebot.Logging.*;
import static net.filebot.MediaTypes.*; import static net.filebot.MediaTypes.*;
import static net.filebot.UserFiles.*; import static net.filebot.UserFiles.*;
import static net.filebot.media.XattrMetaInfo.*; import static net.filebot.media.XattrMetaInfo.*;
import static net.filebot.util.RegularExpressions.*;
import static net.filebot.util.ui.SwingUI.*; import static net.filebot.util.ui.SwingUI.*;
import java.awt.Color; import java.awt.Color;
@ -15,7 +17,6 @@ import java.awt.event.WindowEvent;
import java.io.File; import java.io.File;
import java.text.Format; import java.text.Format;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -210,8 +211,8 @@ class BindingDialog extends JDialog {
} }
private List<String> getSampleExpressions() { private List<String> getSampleExpressions() {
ResourceBundle bundle = ResourceBundle.getBundle(getClass().getName()); String expressions = ResourceBundle.getBundle(getClass().getName()).getString("expressions");
return Arrays.asList(bundle.getString("expressions").split(",")); return COMMA.splitAsStream(expressions).collect(toList());
} }
public boolean submit() { public boolean submit() {

View File

@ -9,7 +9,7 @@ import static net.filebot.Logging.*;
import static net.filebot.Settings.*; import static net.filebot.Settings.*;
import static net.filebot.UserFiles.*; import static net.filebot.UserFiles.*;
import static net.filebot.media.XattrMetaInfo.*; import static net.filebot.media.XattrMetaInfo.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.RegularExpressions.*;
import static net.filebot.util.ui.SwingUI.*; import static net.filebot.util.ui.SwingUI.*;
import java.awt.Color; import java.awt.Color;

View File

@ -3,7 +3,9 @@ package net.filebot.ui.subtitle;
import static java.awt.Font.*; import static java.awt.Font.*;
import static java.util.Collections.*; import static java.util.Collections.*;
import static java.util.regex.Pattern.*; import static java.util.regex.Pattern.*;
import static java.util.stream.Collectors.*;
import static net.filebot.similarity.Normalization.*; import static net.filebot.similarity.Normalization.*;
import static net.filebot.util.RegularExpressions.*;
import static net.filebot.util.ui.SwingUI.*; import static net.filebot.util.ui.SwingUI.*;
import java.awt.Color; import java.awt.Color;
@ -196,15 +198,7 @@ public class SubtitleViewer extends JFrame {
private void setTableFilter(String filter) { private void setTableFilter(String filter) {
// filter by words // filter by words
List<SubtitleFilter> filterList = new ArrayList<SubtitleFilter>(); List<SubtitleFilter> filterList = filter == null ? emptyList() : SPACE.splitAsStream(filter).filter(s -> s.length() > 0).map(SubtitleFilter::new).collect(toList());
if (filter != null) {
for (String word : filter.split("\\s+")) {
if (word.length() > 0) {
filterList.add(new SubtitleFilter(word));
}
}
}
TableRowSorter sorter = (TableRowSorter) subtitleTable.getRowSorter(); TableRowSorter sorter = (TableRowSorter) subtitleTable.getRowSorter();
sorter.setRowFilter(filterList.isEmpty() ? null : RowFilter.andFilter(filterList)); sorter.setRowFilter(filterList.isEmpty() ? null : RowFilter.andFilter(filterList));

View File

@ -4,7 +4,7 @@ import static java.nio.charset.StandardCharsets.*;
import static java.util.Arrays.*; import static java.util.Arrays.*;
import static java.util.Collections.*; import static java.util.Collections.*;
import static net.filebot.Logging.*; import static net.filebot.Logging.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.RegularExpressions.*;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.File; import java.io.File;
@ -621,14 +621,12 @@ public final class FileUtilities {
return path.replace('\\', '/'); return path.replace('\\', '/');
} }
private static final Pattern PATH_SEPARATORS = Pattern.compile("\\s*[\\\\/]+\\s*");
public static String replacePathSeparators(CharSequence path) { public static String replacePathSeparators(CharSequence path) {
return replacePathSeparators(path, " "); return replacePathSeparators(path, " ");
} }
public static String replacePathSeparators(CharSequence path, String replacement) { public static String replacePathSeparators(CharSequence path, String replacement) {
return PATH_SEPARATORS.matcher(path).replaceAll(replacement); return SLASH.matcher(path).replaceAll(replacement);
} }
public static String md5(String string) { public static String md5(String string) {

View File

@ -0,0 +1,21 @@
package net.filebot.util;
import static java.util.regex.Pattern.*;
import java.util.regex.Pattern;
public class RegularExpressions {
public static final Pattern DIGIT = compile("\\d+");
public static final Pattern NON_DIGIT = compile("\\D+");
public static final Pattern PIPE = compile("|", LITERAL);
public static final Pattern EQUALS = compile("=", LITERAL);
public static final Pattern TAB = compile("\t", LITERAL);
public static final Pattern SEMICOLON = compile(";", LITERAL);
public static final Pattern COMMA = compile("\\s*[,;:]\\s*", UNICODE_CHARACTER_CLASS);
public static final Pattern SLASH = compile("\\s*[\\\\/]+\\s*", UNICODE_CHARACTER_CLASS);
public static final Pattern SPACE = compile("\\s+", UNICODE_CHARACTER_CLASS); // French No-Break Space U+00A0
}

View File

@ -3,22 +3,17 @@ package net.filebot.util;
import static java.util.Arrays.*; import static java.util.Arrays.*;
import static java.util.Collections.*; import static java.util.Collections.*;
import static java.util.stream.Collectors.*; import static java.util.stream.Collectors.*;
import static net.filebot.util.RegularExpressions.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Stream; import java.util.stream.Stream;
public final class StringUtilities { public final class StringUtilities {
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 final Pattern SPACE = Pattern.compile("\\s+", Pattern.UNICODE_CHARACTER_CLASS); // French No-Break Space U+00A0
public static List<Integer> matchIntegers(CharSequence s) { public static List<Integer> matchIntegers(CharSequence s) {
if (s == null || s.length() == 0) { if (s == null || s.length() == 0) {
return emptyList(); return emptyList();

View File

@ -3,6 +3,7 @@ package net.filebot.web;
import static java.nio.charset.StandardCharsets.*; import static java.nio.charset.StandardCharsets.*;
import static net.filebot.Logging.*; import static net.filebot.Logging.*;
import static net.filebot.util.JsonUtilities.*; import static net.filebot.util.JsonUtilities.*;
import static net.filebot.util.RegularExpressions.*;
import static net.filebot.web.WebRequest.*; import static net.filebot.web.WebRequest.*;
import java.io.File; import java.io.File;
@ -204,8 +205,7 @@ public class AcoustIDClient implements MusicIdentificationService {
try { try {
while (scanner.hasNextLine()) { while (scanner.hasNextLine()) {
String[] value = scanner.nextLine().split("=", 2); String[] value = EQUALS.split(scanner.nextLine(), 2);
if (value.length != 2) if (value.length != 2)
continue; continue;

View File

@ -2,6 +2,7 @@ package net.filebot.web;
import static java.util.stream.Collectors.*; import static java.util.stream.Collectors.*;
import static net.filebot.Logging.*; import static net.filebot.Logging.*;
import static net.filebot.util.RegularExpressions.*;
import static net.filebot.util.StringUtilities.*; import static net.filebot.util.StringUtilities.*;
import static net.filebot.util.XPathUtilities.*; import static net.filebot.util.XPathUtilities.*;
import static net.filebot.web.EpisodeUtilities.*; import static net.filebot.web.EpisodeUtilities.*;
@ -98,14 +99,10 @@ public class TheTVDBClient extends AbstractEpisodeListProvider {
continue; continue;
} }
List<String> aliasNames = new ArrayList<String>(); // collect alias names
for (Node aliasNode : selectNodes("AliasNames", node)) { List<String> aliasNames = streamNodes("AliasNames", node).flatMap(it -> {
for (String aliasName : getTextContent(aliasNode).split("\\|")) { return PIPE.splitAsStream(getTextContent(it));
if (aliasName.trim().length() > 0) { }).map(String::trim).filter(s -> s.length() > 0).collect(toList());
aliasNames.add(aliasName.trim());
}
}
}
if (!resultSet.containsKey(sid)) { if (!resultSet.containsKey(sid)) {
resultSet.put(sid, new SearchResult(sid, seriesName, aliasNames)); resultSet.put(sid, new SearchResult(sid, seriesName, aliasNames));

View File

@ -49,8 +49,8 @@ public class SeriesNameMatcherTest {
@Test @Test
public void firstCommonSequence() { public void firstCommonSequence() {
String[] seq1 = "Common Name 1 Any Title".split("\\s"); String[] seq1 = "Common Name 1 Any Title".split(" ");
String[] seq2 = "abc xyz Common Name 2 Any Title".split("\\s"); String[] seq2 = "abc xyz Common Name 2 Any Title".split(" ");
// check if common sequence can be determined // check if common sequence can be determined
assertArrayEquals(new String[] { "Common", "Name" }, matcher.firstCommonSequence(seq1, seq2, 2, String.CASE_INSENSITIVE_ORDER)); assertArrayEquals(new String[] { "Common", "Name" }, matcher.firstCommonSequence(seq1, seq2, 2, String.CASE_INSENSITIVE_ORDER));