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
if (WebServices.AniDB.getIdentifier().equals(seriesInfo.getDatabase())) {
Locale locale = new Locale(seriesInfo.getLanguage());
List<SearchResult> series = WebServices.TheTVDB.search(seriesInfo.getName(), locale);
if (series.size() > 0) {
List<Episode> airdateEpisodeList = WebServices.TheTVDB.getEpisodeList(series.get(0), SortOrder.Airdate, locale);
List<Episode> episode = getEpisodes();
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
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 abs.getAbsolute() != null && abs.getAbsolute().equals(sxe.getAbsolute()) || abs.getAirdate() != null && abs.getAirdate().equals(sxe.getAirdate());
}).findFirst().orElse(abs);
}).toArray(Episode[]::new);
return abs.getAbsolute() != null && abs.getAbsolute().equals(sxe.getAbsolute());
});
}).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();
}
public MultiEpisode(List<Episode> episodes) {
super(episodes.get(0));
this.episodes = episodes.toArray(new Episode[0]);
}
public List<Episode> getEpisodes() {
return unmodifiableList(asList(episodes));
}