package org.lodder.subtools.multisubdownloader.settings.model;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.lodder.subtools.sublibrary.control.VideoPatterns;
import org.lodder.subtools.sublibrary.settings.model.MappingSettings;
public class Settings {
private File lastOutputDir;
private boolean optionsAlwaysConfirm, optionSubtitleExactMatch, optionSubtitleKeywordMatch,
optionSubtitleExcludeHearingImpaired;
private boolean optionsShowOnlyFound, optionsStopOnSearchError;
private List<SettingsExcludeItem> excludeList;
private LibrarySettings movieLibrarySettings;
private LibrarySettings episodeLibrarySettings;
private String generalProxyHost;
private int generalProxyPort;
private boolean generalProxyEnabled;
private List<File> defaultIncomingFolders;
private List<File> localSourcesFolders;
private boolean optionRecursive;
private ScreenSettings screenSettings;
private boolean loginAddic7edEnabled;
private String loginAddic7edUsername;
private String loginAddic7edPassword;
private boolean serieSourceAddic7ed, serieSourceTvSubtitles, serieSourcePodnapisi,
serieSourceOpensubtitles, serieSourceLocal, serieSourceSubsMax;
private boolean autoUpdateMapping;
private SettingsProcessEpisodeSource processEpisodeSource;
private MappingSettings mappingSettings;
private Map<String, Integer> sortWeights;
private boolean optionsMinAutomaticSelection;
private int optionsMinAutomaticSelectionValue;
private UpdateCheckPeriod updateCheckPeriod;
private boolean optionsDefaultSelection;
private List<String> optionsDefaultSelectionQualityList;
public Settings() {
super();
setDefaultIncomingFolders(new ArrayList<File>());
lastOutputDir = null;
optionsAlwaysConfirm = false;
optionsShowOnlyFound = false;
optionsStopOnSearchError = false;
setExcludeList(new ArrayList<SettingsExcludeItem>());
movieLibrarySettings = new LibrarySettings();
episodeLibrarySettings = new LibrarySettings();
generalProxyHost = "";
generalProxyPort = 80;
generalProxyEnabled = false;
optionRecursive = false;
screenSettings = new ScreenSettings();
localSourcesFolders = new ArrayList<File>();
serieSourceAddic7ed = true;
serieSourceTvSubtitles = true;
serieSourcePodnapisi = true;
serieSourceOpensubtitles = true;
serieSourceLocal = true;
autoUpdateMapping = false;
setOptionSubtitleExactMatch(true);
setOptionSubtitleKeywordMatch(true);
setProcessEpisodeSource(SettingsProcessEpisodeSource.TVDB);
setMappingSettings(new MappingSettings());
optionsMinAutomaticSelection = false;
optionsMinAutomaticSelectionValue = 0;
setOptionsDefaultSelection(false);
setOptionsDefaultSelectionQualityList(new ArrayList<String>());
}
public boolean isOptionsAlwaysConfirm() {
return optionsAlwaysConfirm;
}
public void setOptionsAlwaysConfirm(boolean optionsAlwaysConfirm) {
this.optionsAlwaysConfirm = optionsAlwaysConfirm;
}
public boolean isOptionsShowOnlyFound() {
return optionsShowOnlyFound;
}
public void setOptionsShowOnlyFound(boolean optionsShowOnlyFound) {
this.optionsShowOnlyFound = optionsShowOnlyFound;
}
public void setLastOutputDir(File lastOutputDir) {
this.lastOutputDir = lastOutputDir;
}
public File getLastOutputDir() {
return lastOutputDir;
}
public void setExcludeList(List<SettingsExcludeItem> excludeList) {
this.excludeList = excludeList;
}
public List<SettingsExcludeItem> getExcludeList() {
return excludeList;
}
public void setOptionsStopOnSearchError(boolean optionsStopOnSearchError) {
this.optionsStopOnSearchError = optionsStopOnSearchError;
}
public boolean isOptionsStopOnSearchError() {
return optionsStopOnSearchError;
}
public void setEpisodeLibrarySettings(LibrarySettings episodeLibrarySettings) {
this.episodeLibrarySettings = episodeLibrarySettings;
}
public LibrarySettings getEpisodeLibrarySettings() {
return episodeLibrarySettings;
}
public void setMovieLibrarySettings(LibrarySettings movieLibrarySettings) {
this.movieLibrarySettings = movieLibrarySettings;
}
public LibrarySettings getMovieLibrarySettings() {
return movieLibrarySettings;
}
public String getGeneralProxyHost() {
return generalProxyHost;
}
public void setGeneralProxyHost(String generalProxyHost) {
this.generalProxyHost = generalProxyHost;
}
public int getGeneralProxyPort() {
return generalProxyPort;
}
public void setGeneralProxyPort(int generalProxyPort) {
this.generalProxyPort = generalProxyPort;
}
public boolean isGeneralProxyEnabled() {
return generalProxyEnabled;
}
public void setGeneralProxyEnabled(boolean generalProxyEnabled) {
this.generalProxyEnabled = generalProxyEnabled;
}
public void setDefaultIncomingFolders(List<File> defaultIncomingFolders) {
this.defaultIncomingFolders = defaultIncomingFolders;
}
public List<File> getDefaultIncomingFolders() {
return defaultIncomingFolders;
}
public void setOptionRecursive(boolean optionRecursive) {
this.optionRecursive = optionRecursive;
}
public boolean isOptionRecursive() {
return optionRecursive;
}
public ScreenSettings getScreenSettings() {
return screenSettings;
}
public void setScreenSettings(ScreenSettings screenSettings) {
this.screenSettings = screenSettings;
}
public void setLoginAddic7edEnabled(boolean loginAddic7edEnabled) {
this.loginAddic7edEnabled = loginAddic7edEnabled;
}
public boolean isLoginAddic7edEnabled() {
return this.loginAddic7edEnabled;
}
public void setLoginAddic7edUsername(String loginAddic7edUsername) {
this.loginAddic7edUsername = loginAddic7edUsername;
}
public String getLoginAddic7edUsername() {
return this.loginAddic7edUsername;
}
public void setLoginAddic7edPassword(String loginAddic7edPassword) {
this.loginAddic7edPassword = loginAddic7edPassword;
}
public String getLoginAddic7edPassword() {
return this.loginAddic7edPassword;
}
/**
* @return the localSourcesFolders
*/
public List<File> getLocalSourcesFolders() {
return localSourcesFolders;
}
/**
* @param localSourcesFolders the localSourcesFolders to set
*/
public void setLocalSourcesFolders(List<File> localSourcesFolders) {
this.localSourcesFolders = localSourcesFolders;
}
/**
* @return the serieSourceAddic7ed
*/
public boolean isSerieSourceAddic7ed() {
return serieSourceAddic7ed;
}
/**
* @param serieSourceAddic7ed the serieSourceAddic7ed to set
*/
public void setSerieSourceAddic7ed(boolean serieSourceAddic7ed) {
this.serieSourceAddic7ed = serieSourceAddic7ed;
}
/**
* @return the serieSourceTvSubtitles
*/
public boolean isSerieSourceTvSubtitles() {
return serieSourceTvSubtitles;
}
/**
* @param serieSourceTvSubtitles the serieSourceTvSubtitles to set
*/
public void setSerieSourceTvSubtitles(boolean serieSourceTvSubtitles) {
this.serieSourceTvSubtitles = serieSourceTvSubtitles;
}
/**
* @return the serieSourcePodnapisi
*/
public boolean isSerieSourcePodnapisi() {
return serieSourcePodnapisi;
}
/**
* @param serieSourcePodnapisi the serieSourcePodnapisi to set
*/
public void setSerieSourcePodnapisi(boolean serieSourcePodnapisi) {
this.serieSourcePodnapisi = serieSourcePodnapisi;
}
/**
* @return the serieSourceOpensubtitles
*/
public boolean isSerieSourceOpensubtitles() {
return serieSourceOpensubtitles;
}
/**
* @param serieSourceOpensubtitles the serieSourceOpensubtitles to set
*/
public void setSerieSourceOpensubtitles(boolean serieSourceOpensubtitles) {
this.serieSourceOpensubtitles = serieSourceOpensubtitles;
}
/**
* @return the serieSourceLocal
*/
public boolean isSerieSourceLocal() {
return serieSourceLocal;
}
/**
* @param serieSourceLocal the serieSourceLocal to set
*/
public void setSerieSourceLocal(boolean serieSourceLocal) {
this.serieSourceLocal = serieSourceLocal;
}
/**
* @return the autoUpdateMapping
*/
public boolean isAutoUpdateMapping() {
return autoUpdateMapping;
}
/**
* @param autoUpdateMapping the autoUpdateMapping to set
*/
public void setAutoUpdateMapping(boolean autoUpdateMapping) {
this.autoUpdateMapping = autoUpdateMapping;
}
/**
* @return the optionSubtitleExactMatch
*/
public boolean isOptionSubtitleExactMatch() {
return optionSubtitleExactMatch;
}
/**
* @param optionSubtitleExactMatch the optionSubtitleExactMatch to set
*/
public void setOptionSubtitleExactMatch(boolean optionSubtitleExactMatch) {
this.optionSubtitleExactMatch = optionSubtitleExactMatch;
}
/**
* @return the optionSubtitleKeywordMatch
*/
public boolean isOptionSubtitleKeywordMatch() {
return optionSubtitleKeywordMatch;
}
/**
* @param optionSubtitleKeywordMatch the optionSubtitleKeywordMatch to set
*/
public void setOptionSubtitleKeywordMatch(boolean optionSubtitleKeywordMatch) {
this.optionSubtitleKeywordMatch = optionSubtitleKeywordMatch;
}
/**
* @return the processEpisodeSource
*/
public SettingsProcessEpisodeSource getProcessEpisodeSource() {
return processEpisodeSource;
}
/**
* @param processEpisodeSource the processEpisodeSource to set
*/
public void setProcessEpisodeSource(SettingsProcessEpisodeSource processEpisodeSource) {
this.processEpisodeSource = processEpisodeSource;
}
/**
* @return the mappingSettings
*/
public MappingSettings getMappingSettings() {
return mappingSettings;
}
/**
* @param mappingSettings the mappingSettings to set
*/
public void setMappingSettings(MappingSettings mappingSettings) {
this.mappingSettings = mappingSettings;
}
/**
* @return the optionSubtitleExcludeHearingImpaired
*/
public boolean isOptionSubtitleExcludeHearingImpaired() {
return optionSubtitleExcludeHearingImpaired;
}
/**
* @param optionSubtitleExcludeHearingImpaired the optionSubtitleExcludeHearingImpaired to set
*/
public void setOptionSubtitleExcludeHearingImpaired(boolean optionSubtitleExcludeHearingImpaired) {
this.optionSubtitleExcludeHearingImpaired = optionSubtitleExcludeHearingImpaired;
}
public boolean isSerieSourceSubsMax() {
return serieSourceSubsMax;
}
public void setSerieSourceSubsMax(boolean serieSourceSubsMax) {
this.serieSourceSubsMax = serieSourceSubsMax;
}
public List<File> getDefaultFolders() {
return getDefaultIncomingFolders();
}
public boolean hasDefaultFolders() {
return getDefaultIncomingFolders().size() > 0;
}
public Map<String, Integer> getSortWeights() {
// TODO: user should be able to edit/add these through a panel
sortWeights = new HashMap<>();
sortWeights.put("%GROUP%",5);
VideoPatterns videoPatterns = new VideoPatterns();
for (String keyword : videoPatterns.getQualityKeywords()) {
sortWeights.put(keyword, 2);
}
/* overwrite keywords that should have low weight */
// keywords that tend to have a lot of different sources:
sortWeights.put("ts", 1);
sortWeights.put("dvdscreener", 1);
sortWeights.put("r5", 1);
sortWeights.put("cam", 1);
// encoding says little about the release:
sortWeights.put("xvid", 1);
sortWeights.put("divx", 1);
sortWeights.put("x264", 1);
// keywords that might get matched too easily
//sortWeights.remove("dl");
return sortWeights;
}
public boolean isSerieSource(String subtitleProviderName) {
// TODO: dynamically inject SubtitleProvider to settings
switch (subtitleProviderName) {
case "Addic7ed":
return this.isSerieSourceAddic7ed();
case "OpenSubtitles":
return this.isSerieSourceOpensubtitles();
case "Podnapisi":
return this.isSerieSourcePodnapisi();
case "SubsMax":
return this.isSerieSourceSubsMax();
case "TvSubtitles":
return this.isSerieSourceTvSubtitles();
case "Local":
return this.isSerieSourceLocal();
default:
return false;
}
}
public boolean isOptionsMinAutomaticSelection() {
return optionsMinAutomaticSelection;
}
public void setOptionsMinAutomaticSelection(boolean optionsMinAutomaticSelection) {
this.optionsMinAutomaticSelection = optionsMinAutomaticSelection;
}
public int getOptionsMinAutomaticSelectionValue() {
return optionsMinAutomaticSelectionValue;
}
public void setOptionsMinAutomaticSelectionValue(int optionsMinAutomaticSelectionValue) {
this.optionsMinAutomaticSelectionValue = optionsMinAutomaticSelectionValue;
}
public UpdateCheckPeriod getUpdateCheckPeriod() {
return updateCheckPeriod;
}
public void setUpdateCheckPeriod(UpdateCheckPeriod updateCheckPeriod) {
this.updateCheckPeriod = updateCheckPeriod;
}
public boolean isOptionsDefaultSelection() {
return optionsDefaultSelection;
}
public void setOptionsDefaultSelection(boolean optionsDefaultSelection) {
this.optionsDefaultSelection = optionsDefaultSelection;
}
public List<String> getOptionsDefaultSelectionQualityList() {
return optionsDefaultSelectionQualityList;
}
public void setOptionsDefaultSelectionQualityList(List<String> optionsDefaultSelectionQualityList) {
this.optionsDefaultSelectionQualityList = optionsDefaultSelectionQualityList;
}
}