package org.lodder.subtools.multisubdownloader.subtitleproviders.adapters;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.lodder.subtools.multisubdownloader.subtitleproviders.SubtitleProvider;
import org.lodder.subtools.multisubdownloader.subtitleproviders.opensubtitles.OpenSubtitlesHasher;
import org.lodder.subtools.multisubdownloader.subtitleproviders.podnapisi.JPodnapisiApi;
import org.lodder.subtools.multisubdownloader.subtitleproviders.podnapisi.model.PodnapisiSubtitleDescriptor;
import org.lodder.subtools.sublibrary.JSubAdapter;
import org.lodder.subtools.sublibrary.Manager;
import org.lodder.subtools.sublibrary.control.ReleaseParser;
import org.lodder.subtools.sublibrary.model.MovieRelease;
import org.lodder.subtools.sublibrary.model.Release;
import org.lodder.subtools.sublibrary.model.Subtitle;
import org.lodder.subtools.sublibrary.model.SubtitleMatchType;
import org.lodder.subtools.sublibrary.model.TvRelease;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JPodnapisiAdapter implements JSubAdapter, SubtitleProvider {
private static final Logger LOGGER = LoggerFactory.getLogger(JPodnapisiAdapter.class);
private static JPodnapisiApi jpapi;
public JPodnapisiAdapter(Manager manager) {
try {
if (jpapi == null) jpapi = new JPodnapisiApi("JBierSubDownloader", manager);
} catch (Exception e) {
LOGGER.error("API PODNAPISI INIT", e.getCause());
}
}
@Override
public String getName() {
return "Podnapisi";
}
@Override
public List<Subtitle> search(Release release, String languageCode) {
if (release instanceof MovieRelease) {
return this.searchSubtitles((MovieRelease) release, languageCode);
} else if (release instanceof TvRelease){
return this.searchSubtitles((TvRelease) release, languageCode);
}
return new ArrayList<Subtitle>();
}
@Override
public List<Subtitle> searchSubtitles(MovieRelease movieRelease, String... sublanguageid) {
List<PodnapisiSubtitleDescriptor> lSubtitles = new ArrayList<PodnapisiSubtitleDescriptor>();
if (!movieRelease.getFilename().equals("")) {
File file = new File(movieRelease.getPath(), movieRelease.getFilename());
if (file.exists())
try {
lSubtitles =
jpapi.searchSubtitles(new String[] {OpenSubtitlesHasher.computeHash(file)},
sublanguageid[0]);
} catch (Exception e) {
LOGGER.error("API PODNAPISI searchSubtitles using file hash", e);
}
}
if (lSubtitles.size() == 0) {
try {
lSubtitles.addAll(jpapi.searchSubtitles(movieRelease.getTitle(), movieRelease.getYear(), 0, 0,
sublanguageid[0]));
} catch (Exception e) {
LOGGER.error("API PODNAPISI searchSubtitles using title", e);
}
}
return buildListSubtitles(sublanguageid[0], lSubtitles);
}
@Override
public List<Subtitle> searchSubtitles(TvRelease tvRelease, String... sublanguageid) {
List<PodnapisiSubtitleDescriptor> lSubtitles = new ArrayList<PodnapisiSubtitleDescriptor>();
try {
String showName = "";
if (tvRelease.getOriginalShowName().length() > 0) {
showName = tvRelease.getOriginalShowName();
} else {
showName = tvRelease.getShow();
}
if (showName.length() > 0) {
for (int episode : tvRelease.getEpisodeNumbers()) {
lSubtitles =
jpapi
.searchSubtitles(showName, 0, tvRelease.getSeason(), episode, sublanguageid[0]);
}
}
} catch (Exception e) {
LOGGER.error("API PODNAPISI searchSubtitles", e);
}
return buildListSubtitles(sublanguageid[0], lSubtitles);
}
private List<Subtitle> buildListSubtitles(String sublanguageid,
List<PodnapisiSubtitleDescriptor> lSubtitles) {
List<Subtitle> listFoundSubtitles = new ArrayList<Subtitle>();
for (PodnapisiSubtitleDescriptor ossd : lSubtitles) {
if (!ossd.getReleaseString().equals("")) {
final String downloadlink = getDownloadLink(ossd.getSubtitleId());
if (downloadlink != null) {
listFoundSubtitles.add(new Subtitle(Subtitle.SubtitleSource.PODNAPISI, ossd.getReleaseString(),
downloadlink, sublanguageid, ReleaseParser.getQualityKeyword(ossd.getReleaseString()), SubtitleMatchType.EVERYTHING, ReleaseParser
.extractReleasegroup(ossd.getReleaseString(), FilenameUtils.isExtension(ossd.getReleaseString(), "srt")), ossd.getUploaderName(), ossd.getFlagsString().equals(
"nhu")));
}
}
}
return listFoundSubtitles;
}
private String getDownloadLink(String subtitleId) {
try {
return jpapi.downloadUrl(subtitleId);
} catch (Exception e) {
LOGGER.error("API PODNAPISI getdownloadlink", e);
}
return null;
}
}