* rewrite extended metadata lookup logic

This commit is contained in:
Reinhard Pointner 2014-12-09 09:58:33 +00:00
parent ff33e970c7
commit 9a275b8f99
2 changed files with 28 additions and 18 deletions

View File

@ -557,34 +557,50 @@ public class MediaBindingBean {
public synchronized AssociativeScriptObject getMetaInfo() { public synchronized AssociativeScriptObject getMetaInfo() {
if (metaInfo == null) { if (metaInfo == null) {
try { try {
if (infoObject instanceof Episode) if (infoObject instanceof Episode) {
metaInfo = WebServices.TheTVDB.getSeriesInfoByName(getEpisode().getSeriesName(), getEpisode().getLanguage() == null ? Locale.ENGLISH : getEpisode().getLanguage()); Episode episode = (Episode) infoObject;
if (infoObject instanceof Movie) if (episode.getSeries() instanceof TheTVDBSearchResult) {
metaInfo = WebServices.TheMovieDB.getMovieInfo(getMovie(), getMovie().getLanguage() == null ? Locale.ENGLISH : getMovie().getLanguage(), true); metaInfo = WebServices.TheTVDB.getSeriesInfo((TheTVDBSearchResult) episode.getSeries(), episode.getLanguage() == null ? Locale.ENGLISH : episode.getLanguage());
}
} else if (infoObject instanceof Movie) {
if (getMovie().getTmdbId() > 0) {
metaInfo = WebServices.TheMovieDB.getMovieInfo(getMovie(), getMovie().getLanguage() == null ? Locale.ENGLISH : getMovie().getLanguage(), true);
} else if (getMovie().getImdbId() > 0) {
metaInfo = WebServices.OMDb.getMovieInfo(getMovie());
}
}
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("Failed to retrieve metadata: " + infoObject, e); throw new RuntimeException("Failed to retrieve extended metadata: " + infoObject, e);
} }
} }
if (mediaInfo == null) {
throw new UnsupportedOperationException("Extended metadata not available");
}
return createMapBindings(new PropertyBindings(metaInfo, null)); return createMapBindings(new PropertyBindings(metaInfo, null));
} }
@Define("imdb") @Define("imdb")
public synchronized AssociativeScriptObject getImdbApiInfo() { public synchronized AssociativeScriptObject getImdbApiInfo() {
Object data = null; Object metaInfo = null;
try { try {
if (infoObject instanceof Episode) { if (infoObject instanceof Episode) {
data = WebServices.OMDb.getMovieInfo(new Movie(getEpisode().getSeriesName(), getEpisode().getSeriesStartDate().getYear(), -1, -1)); metaInfo = WebServices.OMDb.getMovieInfo(new Movie(getEpisode().getSeriesName(), getEpisode().getSeriesStartDate().getYear(), -1, -1));
} }
if (infoObject instanceof Movie) { if (infoObject instanceof Movie) {
Movie m = getMovie(); metaInfo = WebServices.OMDb.getMovieInfo(getMovie());
data = WebServices.OMDb.getMovieInfo(m.getImdbId() > 0 ? m : new Movie(null, -1, WebServices.TheMovieDB.getMovieInfo(getMovie(), Locale.ENGLISH, false).getImdbId(), -1));
} }
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException("Failed to retrieve metadata: " + infoObject, e); throw new RuntimeException("Failed to retrieve extended metadata: " + infoObject, e);
} }
return createMapBindings(new PropertyBindings(data, null)); if (mediaInfo == null) {
throw new UnsupportedOperationException("Extended metadata not available");
}
return createMapBindings(new PropertyBindings(metaInfo, null));
} }
@Define("episodelist") @Define("episodelist")

View File

@ -177,15 +177,9 @@ public class TMDbClient implements MovieIdentificationService {
return getMovieInfo(String.valueOf(movie.getTmdbId()), locale, extendedInfo); return getMovieInfo(String.valueOf(movie.getTmdbId()), locale, extendedInfo);
} else if (movie.getImdbId() > 0) { } else if (movie.getImdbId() > 0) {
return getMovieInfo(String.format("tt%07d", movie.getImdbId()), locale, extendedInfo); return getMovieInfo(String.format("tt%07d", movie.getImdbId()), locale, extendedInfo);
} else {
for (Movie result : searchMovie(movie.getName(), locale)) {
if (movie.getName().equalsIgnoreCase(result.getName()) && movie.getYear() == result.getYear()) {
return getMovieInfo(String.valueOf(result.getTmdbId()), locale, extendedInfo);
}
}
} }
} catch (FileNotFoundException | NullPointerException e) { } catch (FileNotFoundException | NullPointerException e) {
Logger.getLogger(getClass().getName()).log(Level.WARNING, String.format("Movie data missing: %s [%d / %d]", movie, movie.getTmdbId(), movie.getImdbId()), e); Logger.getLogger(getClass().getName()).log(Level.WARNING, String.format("Movie data not found: %s [%d / %d]", movie, movie.getTmdbId(), movie.getImdbId()), e);
} }
return null; return null;
} }