diff --git a/source/net/filebot/cli/CmdlineOperations.java b/source/net/filebot/cli/CmdlineOperations.java index a6376498..03be2c90 100644 --- a/source/net/filebot/cli/CmdlineOperations.java +++ b/source/net/filebot/cli/CmdlineOperations.java @@ -53,6 +53,7 @@ import net.filebot.media.MediaDetection; import net.filebot.media.XattrMetaInfoProvider; import net.filebot.similarity.CommonSequenceMatcher; import net.filebot.similarity.EpisodeMatcher; +import net.filebot.similarity.EpisodeMetrics; import net.filebot.similarity.Match; import net.filebot.similarity.NameSimilarityMetric; import net.filebot.similarity.SeriesNameMatcher; @@ -150,8 +151,7 @@ public class CmdlineOperations implements CmdlineInterface { return renameAll(renameMap, renameAction, ConflictAction.forName(conflict), null); } - public List renameSeries(Collection files, RenameAction renameAction, ConflictAction conflictAction, File outputDir, ExpressionFormat format, EpisodeListProvider db, String query, SortOrder sortOrder, ExpressionFilter filter, Locale locale, boolean strict) - throws Exception { + public List renameSeries(Collection files, RenameAction renameAction, ConflictAction conflictAction, File outputDir, ExpressionFormat format, EpisodeListProvider db, String query, SortOrder sortOrder, ExpressionFilter filter, Locale locale, boolean strict) throws Exception { CLILogger.config(format("Rename episodes using [%s]", db.getName())); // ignore sample files @@ -261,7 +261,19 @@ public class CmdlineOperations implements CmdlineInterface { CLILogger.warning("No matching episode: " + failedMatch.getName()); } - return matches; + // in non-strict mode just pass back results as we got it from the matcher + if (!strict) { + return matches; + } + + // in strict mode sanity check the result and only pass back good matches + List> validMatches = new ArrayList>(); + for (Match it : matches) { + if (EpisodeMetrics.EpisodeIdentifier.getSimilarity(it.getValue(), it.getCandidate()) >= 1) { + validMatches.add(it); + } + } + return validMatches; } private Set fetchEpisodeSet(final EpisodeListProvider db, final Collection names, final SortOrder sortOrder, final Locale locale, final boolean strict) throws Exception { diff --git a/source/net/filebot/ui/rename/EpisodeListMatcher.java b/source/net/filebot/ui/rename/EpisodeListMatcher.java index 964f5454..06ae7885 100644 --- a/source/net/filebot/ui/rename/EpisodeListMatcher.java +++ b/source/net/filebot/ui/rename/EpisodeListMatcher.java @@ -39,6 +39,7 @@ import net.filebot.Analytics; import net.filebot.Settings; import net.filebot.similarity.CommonSequenceMatcher; import net.filebot.similarity.EpisodeMatcher; +import net.filebot.similarity.EpisodeMetrics; import net.filebot.similarity.Match; import net.filebot.ui.SelectDialog; import net.filebot.web.Episode; @@ -319,7 +320,10 @@ class EpisodeListMatcher implements AutoCompleteMatcher { for (List filesPerType : mapByMediaExtension(files).values()) { EpisodeMatcher matcher = new EpisodeMatcher(filesPerType, episodes, strict); for (Match it : matcher.match()) { - matches.add(new Match(it.getValue(), ((Episode) it.getCandidate()).clone())); + // in strict mode sanity check the result and only pass back good matches + if (!strict || EpisodeMetrics.EpisodeIdentifier.getSimilarity(it.getValue(), it.getCandidate()) >= 1) { + matches.add(new Match(it.getValue(), ((Episode) it.getCandidate()).clone())); + } } } }