From f43a37ed649895a7aeb30412ae64ee1c97e2626b Mon Sep 17 00:00:00 2001 From: Reinhard Pointner Date: Sun, 24 Jul 2016 23:43:15 +0800 Subject: [PATCH] When matching AniDB->TheTVDB series names, do so as leniently as possible (e.g. One-Punch == One Punch) @see https://www.filebot.net/forums/viewtopic.php?f=5&t=3979&p=22324#p22324 --- source/net/filebot/web/EpisodeUtilities.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/source/net/filebot/web/EpisodeUtilities.java b/source/net/filebot/web/EpisodeUtilities.java index 94cc54e1..ef2d21e6 100644 --- a/source/net/filebot/web/EpisodeUtilities.java +++ b/source/net/filebot/web/EpisodeUtilities.java @@ -3,10 +3,13 @@ package net.filebot.web; import static java.util.Collections.*; import static java.util.stream.Collectors.*; +import java.text.Collator; import java.util.Collection; import java.util.Comparator; import java.util.List; import java.util.Locale; +import java.util.Set; +import java.util.TreeSet; import net.filebot.WebServices; @@ -30,6 +33,8 @@ public final class EpisodeUtilities { public static Episode getEpisodeByAbsoluteNumber(Episode e, EpisodeListProvider service, SortOrder order) throws Exception { // e.g. match AniDB episode to TheTVDB episode + Set seriesNames = getLenientSeriesNameSet(e); + SeriesInfo seriesInfo = e.getSeriesInfo(); Locale locale = new Locale(seriesInfo.getLanguage()); @@ -38,7 +43,7 @@ public final class EpisodeUtilities { for (SearchResult series : service.search(seriesInfo.getName(), locale)) { // sanity check - if (!series.getEffectiveNames().contains(seriesInfo.getName())) { + if (!series.getEffectiveNames().stream().anyMatch(seriesNames::contains)) { continue; } @@ -62,6 +67,17 @@ public final class EpisodeUtilities { return e; } + private static Set getLenientSeriesNameSet(Episode e) { + // use maximum strength collator by default + Collator collator = Collator.getInstance(new Locale(e.getSeriesInfo().getLanguage())); + collator.setDecomposition(Collator.FULL_DECOMPOSITION); + collator.setStrength(Collator.PRIMARY); + + Set seriesNames = new TreeSet(collator); + seriesNames.addAll(e.getSeriesNames()); + return seriesNames; + } + public static List filterBySeason(Collection episodes, int season) { return episodes.stream().filter(it -> { return it.getSeason() != null && season == it.getSeason();