package org.lodder.subtools.multisubdownloader.lib.control;
import java.util.List;
import org.lodder.subtools.multisubdownloader.lib.JTVRageAdapter;
import org.lodder.subtools.multisubdownloader.settings.model.Settings;
import org.lodder.subtools.multisubdownloader.settings.model.SettingsProcessEpisodeSource;
import org.lodder.subtools.sublibrary.JTheTVDBAdapter;
import org.lodder.subtools.sublibrary.Manager;
import org.lodder.subtools.sublibrary.data.thetvdb.model.TheTVDBEpisode;
import org.lodder.subtools.sublibrary.data.thetvdb.model.TheTVDBSerie;
import org.lodder.subtools.sublibrary.data.tvrage.model.TVRageEpisode;
import org.lodder.subtools.sublibrary.data.tvrage.model.TVRageShowInfo;
import org.lodder.subtools.sublibrary.exception.ReleaseControlException;
import org.lodder.subtools.sublibrary.model.TvRelease;
import org.lodder.subtools.sublibrary.settings.model.MappingTvdbScene;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class TvReleaseControl extends ReleaseControl {
private JTheTVDBAdapter jtvdba;
private final JTVRageAdapter tvra;
private static final Logger LOGGER = LoggerFactory.getLogger(TvReleaseControl.class);
public TvReleaseControl(TvRelease tvRelease, Settings settings, Manager manager) {
super(tvRelease, settings, manager);
jtvdba = JTheTVDBAdapter.getAdapter(manager);
tvra = new JTVRageAdapter(manager);
}
public void processTvdb(List<MappingTvdbScene> dict) throws ReleaseControlException {
setTvdbID(dict);
if (((TvRelease) release).getTvdbid() > 0) {
TheTVDBEpisode thetvdbepisode = jtvdba.getEpisode(((TvRelease) release));
if (thetvdbepisode != null) {
((TvRelease) release).updateTvdbEpisodeInfo(thetvdbepisode);
} else {
throw new ReleaseControlException("Season " + ((TvRelease) release).getSeason()
+ " Episode " + ((TvRelease) release).getEpisodeNumbers().toString()
+ "not found, check file", release);
}
} else {
throw new ReleaseControlException("Show not found, check file", release);
}
}
public void processTVRage() throws ReleaseControlException {
setTvrageID();
TVRageEpisode tvrEpisode =
tvra.getEpisodeInfo(((TvRelease) release).getTvrageid(), ((TvRelease) release).getSeason(),
((TvRelease) release).getEpisodeNumbers().get(0));
if (tvrEpisode != null) {
((TvRelease) release).updateTVRageEpisodeInfo(tvrEpisode);
} else {
throw new ReleaseControlException("Season " + ((TvRelease) release).getSeason() + " Episode "
+ ((TvRelease) release).getEpisodeNumbers().toString() + "not found, check file", release);
}
}
public void process(List<MappingTvdbScene> dict) throws ReleaseControlException {
TvRelease tvRelease = (TvRelease) release;
// return episodeFile;
if (tvRelease.getShow().equals("")) {
throw new ReleaseControlException("Unable to extract episode details, check file", release);
} else {
LOGGER.debug("process: showname [{}], season [{}], episode [{}]", tvRelease.getShow(),
tvRelease.getSeason(), tvRelease.getEpisodeNumbers());
if (tvRelease.isSpecial()) {
processSpecial(dict);
} else {
if (settings.getProcessEpisodeSource().equals(SettingsProcessEpisodeSource.TVRAGE)) {
processTVRage();
}
processTvdb(dict);
}
}
}
/**
* @param dict
* @throws ReleaseControlException
*
*/
private void processSpecial(List<MappingTvdbScene> dict) throws ReleaseControlException {
TVRageEpisode tvrEpisode = null;
TheTVDBEpisode thetvdbepisode = null;
setTvrageID();
if (((TvRelease) release).getTvrageid() > 0) {
tvrEpisode =
tvra.getEpisodeInfo(((TvRelease) release).getTvrageid(),
((TvRelease) release).getSeason(), ((TvRelease) release).getEpisodeNumbers().get(0));
if (tvrEpisode != null
&& settings.getProcessEpisodeSource() == SettingsProcessEpisodeSource.TVRAGE)
((TvRelease) release).updateTVRageEpisodeInfo(tvrEpisode);
}
setTvdbID(dict);
if (((TvRelease) release).getTvdbid() > 0) {
thetvdbepisode = jtvdba.getEpisode(((TvRelease) release));
if (thetvdbepisode != null
&& settings.getProcessEpisodeSource() == SettingsProcessEpisodeSource.TVDB)
((TvRelease) release).updateTvdbEpisodeInfo(thetvdbepisode);
}
}
private void setTvdbID(List<MappingTvdbScene> dict) throws ReleaseControlException {
int tvdbid = 0;
for (MappingTvdbScene mapping : dict) {
if (mapping.getSceneName().replaceAll("[^A-Za-z]", "")
.equalsIgnoreCase(((TvRelease) release).getShow().replaceAll("[^A-Za-z]", ""))) {
tvdbid = mapping.getTvdbId();
}
}
TheTVDBSerie thetvdbserie = null;
if (tvdbid == 0) {
thetvdbserie = jtvdba.getSerie((TvRelease) release);
} else {
thetvdbserie = jtvdba.getSerie(tvdbid);
}
if (thetvdbserie == null)
throw new ReleaseControlException("Tvdb API, returned no result", release);
((TvRelease) release).setOriginalShowName(thetvdbserie.getSerieName());
((TvRelease) release).setTvdbid(Integer.parseInt(thetvdbserie.getId()));
}
private void setTvrageID() {
TVRageShowInfo tvrShowInfo = tvra.searchShow((TvRelease) release);
if (tvrShowInfo != null) ((TvRelease) release).setTvrageid(tvrShowInfo.getShowID());
}
}