try to convert absolute numbers to SxE numbers when using {s00e00} binding (as best as possible, SxE numbers may not exactly match TheTVDB, but should in most common cases)

This commit is contained in:
Reinhard Pointner 2016-04-23 00:47:43 +08:00
parent df79418064
commit 2c117561e3
2 changed files with 20 additions and 8 deletions

View File

@ -686,18 +686,25 @@ public class MediaBindingBean {
// match AniDB episode to TheTVDB episode // match AniDB episode to TheTVDB episode
if (WebServices.AniDB.getIdentifier().equals(seriesInfo.getDatabase())) { if (WebServices.AniDB.getIdentifier().equals(seriesInfo.getDatabase())) {
Locale locale = new Locale(seriesInfo.getLanguage()); Locale locale = new Locale(seriesInfo.getLanguage());
List<SearchResult> series = WebServices.TheTVDB.search(seriesInfo.getName(), locale); List<Episode> episode = getEpisodes();
if (series.size() > 0) {
List<Episode> airdateEpisodeList = WebServices.TheTVDB.getEpisodeList(series.get(0), SortOrder.Airdate, locale); for (SearchResult series : WebServices.TheTVDB.search(seriesInfo.getName(), locale)) {
// sanity check search result
if (!series.getEffectiveNames().contains(seriesInfo.getName()))
continue;
List<Episode> airdateEpisodeList = WebServices.TheTVDB.getEpisodeList(series, SortOrder.Airdate, locale);
// match by absolute number or airdate if possible, default to absolute number otherwise // match by absolute number or airdate if possible, default to absolute number otherwise
Episode[] episodes = getEpisodes().stream().map(abs -> { List<Episode> airdateEpisode = episode.stream().flatMap(abs -> {
return airdateEpisodeList.stream().filter(sxe -> abs.getSpecial() == null && sxe.getSpecial() == null).filter(sxe -> { return airdateEpisodeList.stream().filter(sxe -> abs.getSpecial() == null && sxe.getSpecial() == null).filter(sxe -> {
return abs.getAbsolute() != null && abs.getAbsolute().equals(sxe.getAbsolute()) || abs.getAirdate() != null && abs.getAirdate().equals(sxe.getAirdate()); return abs.getAbsolute() != null && abs.getAbsolute().equals(sxe.getAbsolute());
}).findFirst().orElse(abs); });
}).toArray(Episode[]::new); }).collect(toList());
return episodes.length == 1 ? episodes[0] : new MultiEpisode(episodes); if (airdateEpisode.size() == episode.size()) {
return airdateEpisode.size() == 1 ? airdateEpisode.get(0) : new MultiEpisode(airdateEpisode);
}
} }
} }

View File

@ -19,6 +19,11 @@ public class MultiEpisode extends Episode {
this.episodes = episodes.clone(); this.episodes = episodes.clone();
} }
public MultiEpisode(List<Episode> episodes) {
super(episodes.get(0));
this.episodes = episodes.toArray(new Episode[0]);
}
public List<Episode> getEpisodes() { public List<Episode> getEpisodes() {
return unmodifiableList(asList(episodes)); return unmodifiableList(asList(episodes));
} }