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:
parent
df79418064
commit
2c117561e3
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue