package org.lodder.subtools.multisubdownloader.lib.control; import java.util.List; import org.lodder.subtools.multisubdownloader.settings.model.Settings; import org.lodder.subtools.sublibrary.Manager; import org.lodder.subtools.sublibrary.data.IMDB.IMDBAPI; import org.lodder.subtools.sublibrary.data.IMDB.IMDBException; import org.lodder.subtools.sublibrary.data.IMDB.IMDBSearchID; import org.lodder.subtools.sublibrary.data.IMDB.IMDBSearchIDException; import org.lodder.subtools.sublibrary.data.IMDB.model.IMDBDetails; import org.lodder.subtools.sublibrary.data.OMDB.OMDBAPI; import org.lodder.subtools.sublibrary.data.OMDB.OMDBException; import org.lodder.subtools.sublibrary.data.OMDB.model.OMDBDetails; import org.lodder.subtools.sublibrary.exception.ReleaseControlException; import org.lodder.subtools.sublibrary.model.MovieRelease; import org.lodder.subtools.sublibrary.settings.model.MappingTvdbScene; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MovieReleaseControl extends ReleaseControl { private final IMDBSearchID imdbSearchID; private final IMDBAPI imdbapi; private final OMDBAPI omdbapi; private static final Logger LOGGER = LoggerFactory.getLogger(MovieReleaseControl.class); public MovieReleaseControl(MovieRelease movieRelease, Settings settings, Manager manager) { super(movieRelease, settings, manager); imdbapi = new IMDBAPI(manager); omdbapi = new OMDBAPI(manager); imdbSearchID = new IMDBSearchID(manager); } @Override public void process(List<MappingTvdbScene> dict) throws ReleaseControlException { MovieRelease movieRelease = (MovieRelease) release; if (movieRelease.getTitle().equals("")) { throw new ReleaseControlException("Unable to extract/find title, check file", release); } else { int imdbid = -1; try { imdbid = imdbSearchID.getImdbId(movieRelease.getTitle(), movieRelease.getYear()); } catch (IMDBSearchIDException e) { throw new ReleaseControlException("IMDBASearchID Failed", release); } try { if (imdbid > 0) { movieRelease.setImdbid(imdbid); IMDBDetails imdbinfo; imdbinfo = imdbapi.getIMDBMovieDetails(movieRelease.getImdbidAsString()); if (imdbinfo != null) { movieRelease.setYear(imdbinfo.getYear()); movieRelease.setTitle(imdbinfo.getTitle()); } else { LOGGER.error("Unable to get details from IMDB API, continue with filename info {}", release); } } else { throw new ReleaseControlException("Movie not found on IMDB, check file", release); } } catch (IMDBException e) { LOGGER.warn("IMDBAPI Failed {}, using OMDBAPI as fallback", release); OMDBDetails omdbinfo; try { omdbinfo = omdbapi.getOMDBMovieDetails(movieRelease.getImdbidAsString()); if (omdbinfo != null) { movieRelease.setYear(omdbinfo.getYear()); movieRelease.setTitle(omdbinfo.getTitle()); } else { LOGGER.error("Unable to get details from OMDB API, continue with filename info {}", release); } } catch (OMDBException e1) { throw new ReleaseControlException("OMDBAPI Failed", release); } } } } }