package org.lodder.subtools.multisubdownloader.lib.library;
import org.lodder.subtools.multisubdownloader.settings.model.LibrarySettings;
import org.lodder.subtools.sublibrary.JTheTVDBAdapter;
import org.lodder.subtools.sublibrary.Manager;
import org.lodder.subtools.sublibrary.data.thetvdb.model.TheTVDBSerie;
import org.lodder.subtools.sublibrary.model.Release;
import org.lodder.subtools.sublibrary.model.TvRelease;
import java.util.List;
public abstract class LibraryBuilder {
protected final LibrarySettings librarySettings;
private Manager manager;
public LibraryBuilder(LibrarySettings librarySettings, Manager manager) {
this.librarySettings = librarySettings;
this.manager = manager;
}
public abstract String build(Release release);
protected String getShowName(TvRelease tvRelease) {
String show = "";
if (librarySettings.isLibraryUseTVDBNaming()) {
final JTheTVDBAdapter jtvdb = JTheTVDBAdapter.getAdapter(manager);
TheTVDBSerie tvdbs = jtvdb.getSerie(tvRelease);
if (tvdbs == null) {
//use showname found for release as tvdb returns null
show = tvRelease.getShow();
} else {
show = tvdbs.getSerieName();
}
} else {
show = tvRelease.getShow();
}
return show;
}
protected String replaceFormatedEpisodeNumber(String structure, String tag,
List<Integer> episodeNumbers, boolean leadingZero) {
String formatedEpisodeNumber = "";
if (structure.contains(tag)) {
int posEnd = structure.indexOf(tag);
String structurePart = structure.substring(0, posEnd);
int posBegin = structurePart.lastIndexOf("%");
String seperator = structure.substring(posBegin + 1, posEnd);
StringBuilder builder = new StringBuilder();
for (final int epNum : episodeNumbers) {
builder.append(seperator).append(formatedNumber(epNum, leadingZero));
}
formatedEpisodeNumber += builder.toString();
// strip the first seperator off
formatedEpisodeNumber = formatedEpisodeNumber.substring(1, formatedEpisodeNumber.length());
}
return structure.replace(tag, formatedEpisodeNumber);
}
protected String formatedNumber(int number, boolean leadingZero) {
if (number < 10 && leadingZero) {
return "0" + number;
}
return Integer.toString(number);
}
}