diff --git a/source/net/sourceforge/filebot/media/MediaDetection.java b/source/net/sourceforge/filebot/media/MediaDetection.java index 286638e3..19a582b3 100644 --- a/source/net/sourceforge/filebot/media/MediaDetection.java +++ b/source/net/sourceforge/filebot/media/MediaDetection.java @@ -2,7 +2,6 @@ package net.sourceforge.filebot.media; -import static java.util.Arrays.*; import static java.util.Collections.*; import static net.sourceforge.filebot.MediaTypes.*; import static net.sourceforge.tuned.FileUtilities.*; @@ -13,6 +12,7 @@ import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Collection; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -31,8 +31,9 @@ import java.util.regex.Pattern; import net.sourceforge.filebot.MediaTypes; import net.sourceforge.filebot.WebServices; +import net.sourceforge.filebot.similarity.NameSimilarityMetric; import net.sourceforge.filebot.similarity.SeriesNameMatcher; -import net.sourceforge.filebot.similarity.SimilarityComparator; +import net.sourceforge.filebot.similarity.SimilarityMetric; import net.sourceforge.filebot.web.Movie; import net.sourceforge.filebot.web.MovieIdentificationService; import net.sourceforge.filebot.web.SearchResult; @@ -156,20 +157,34 @@ public class MediaDetection { } } - // search by file name or folder name - Collection searchQueries = new LinkedHashSet(); - searchQueries.add(getName(movieFile)); - searchQueries.add(getName(movieFile.getParentFile())); - - // remove blacklisted terms - searchQueries = stripReleaseInfo(searchQueries); - if (!strict && options.isEmpty()) { + // search by file name or folder name + Collection searchQueries = new LinkedHashSet(); + searchQueries.add(getName(movieFile)); + searchQueries.add(getName(movieFile.getParentFile())); + + // remove blacklisted terms + searchQueries = stripReleaseInfo(searchQueries); + + final SimilarityMetric metric = new NameSimilarityMetric(); + final Map probabilityMap = new LinkedHashMap(); for (String query : searchQueries) { - Movie[] results = service.searchMovie(query, locale).toArray(new Movie[0]); - sort(results, new SimilarityComparator(query)); // sort by similarity to original query - addAll(options, results); + for (Movie movie : service.searchMovie(query, locale)) { + probabilityMap.put(movie, metric.getSimilarity(query, movie)); + } } + + // sort by similarity to original query (descending) + List results = new ArrayList(probabilityMap.keySet()); + sort(results, new Comparator() { + + @Override + public int compare(Movie a, Movie b) { + return probabilityMap.get(b).compareTo(probabilityMap.get(a)); + } + }); + + options.addAll(results); } return options; diff --git a/source/net/sourceforge/filebot/media/ReleaseInfo.properties b/source/net/sourceforge/filebot/media/ReleaseInfo.properties index ccd74eb2..a8c2ea09 100644 --- a/source/net/sourceforge/filebot/media/ReleaseInfo.properties +++ b/source/net/sourceforge/filebot/media/ReleaseInfo.properties @@ -2,7 +2,7 @@ pattern.video.source: CAMRip|CAM|TS|TELESYNC|PDVD|TS|TELESYNC|PDVD|PPV|PPVRip|Screener|SCR|SCREENER|DVDSCR|DVDSCREENER|BDSCR|R5|R5LINE|DVDRip|DVDR|TVRip|DSR|PDTV|HDTV|DVBRip|DTHRip|VODRip|VODR|BDRip|BRRip|BluRay|BDR # additional release info patterns -pattern.codec: DivX|Xvid|AVC|x264|h264|3ivx|mpeg|mpeg4|mp3|aac|2ch|6ch|720p|1080p +pattern.codec: DivX|Xvid|AVC|x264|h264|3ivx|mpeg|mpeg4|mp3|aac|ac3|2ch|6ch|720p|1080p # group names mostly copied from [http://scenelingo.wordpress.com/list-of-scene-release-groups] url.release-groups: http://filebot.sourceforge.net/data/release-groups.txt