* fix corner-case

@see http://www.filebot.net/forums/viewtopic.php?f=8&t=1425
This commit is contained in:
Reinhard Pointner 2014-03-16 17:46:30 +00:00
parent 751cf116e9
commit 24cd64ec03
3 changed files with 35 additions and 3 deletions

View File

@ -196,8 +196,9 @@ public class CmdlineOperations implements CmdlineInterface {
// filter episodes
episodes = applyExpressionFilter(episodes, filter);
matches.addAll(matchEpisodes(filter(batch, VIDEO_FILES), episodes, strict));
matches.addAll(matchEpisodes(filter(batch, SUBTITLE_FILES), episodes, strict));
for (List<File> filesPerType : mapByMediaExtension(filter(batch, VIDEO_FILES, SUBTITLE_FILES)).values()) {
matches.addAll(matchEpisodes(filesPerType, episodes, strict));
}
}
}

View File

@ -972,6 +972,37 @@ public class MediaDetection {
return mediaFolders;
}
public static Map<String, List<File>> mapByMediaExtension(Iterable<File> files) {
Map<String, List<File>> map = new LinkedHashMap<String, List<File>>();
for (File file : files) {
String key = getExtension(file);
// allow extended extensions for subtitles files, for example name.eng.srt => map by en.srt
if (key != null && SUBTITLE_FILES.accept(file)) {
Locale locale = releaseInfo.getLanguageSuffix(getName(file));
if (locale != null) {
key = locale.getLanguage() + '.' + key;
}
}
// normalize to lower-case
if (key != null) {
key = key.toLowerCase();
}
List<File> valueList = map.get(key);
if (valueList == null) {
valueList = new ArrayList<File>();
map.put(key, valueList);
}
valueList.add(file);
}
return map;
}
public static Map<String, List<File>> mapBySeriesName(Collection<File> files, boolean useSeriesIndex, boolean useAnimeIndex, Locale locale) throws Exception {
Map<String, List<File>> result = new TreeMap<String, List<File>>(String.CASE_INSENSITIVE_ORDER);

View File

@ -299,7 +299,7 @@ class EpisodeListMatcher implements AutoCompleteMatcher {
List<Match<File, ?>> matches = new ArrayList<Match<File, ?>>();
// group by subtitles first and then by files in general
for (List<File> filesPerType : mapByExtension(files).values()) {
for (List<File> filesPerType : mapByMediaExtension(files).values()) {
EpisodeMatcher matcher = new EpisodeMatcher(filesPerType, episodes, false);
for (Match<File, Object> it : matcher.match()) {
matches.add(new Match<File, Episode>(it.getValue(), ((Episode) it.getCandidate()).clone()));