diff --git a/pom.xml b/pom.xml
index 575e36e..09111eb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
at.pcgamingfreaks
MKVAudioSubtitleChanger
- 3.0.2
+ 4.0.0
clean package
@@ -127,6 +127,11 @@
1.18.24
provided
+
+ info.picocli
+ picocli
+ 4.7.6
+
org.apache.logging.log4j
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java
index a746649..66dac88 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/Main.java
@@ -1,21 +1,34 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.Config;
-import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.ConfigLoader;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.CachedMkvFileProcessor;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.AttributeUpdaterKernel;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.CoherentAttributeUpdaterKernel;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.kernel.DefaultAttributeUpdaterKernel;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.MkvFileCollector;
+import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil;
+import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
+import picocli.CommandLine;
@Slf4j
-public class Main {
- public static void main(String[] args) {
- ConfigLoader.initConfig(args);
+@CommandLine.Command(mixinStandardHelpOptions = true, versionProvider = ProjectUtil.class)
+public class Main implements Runnable {
+
+ @Getter
+ @CommandLine.ArgGroup(exclusive = false)
+ private Config config = Config.getInstance();
+
+ @Override
+ public void run() {
+ Config.setInstance(config);
AttributeUpdaterKernel kernel = Config.getInstance().getCoherent() != null
? new CoherentAttributeUpdaterKernel(new MkvFileCollector(), new CachedMkvFileProcessor())
: new DefaultAttributeUpdaterKernel(new MkvFileCollector(), new CachedMkvFileProcessor());
kernel.execute();
}
+
+ public static void main(String[] args) {
+ new CommandLine(Main.class).execute(args);
+ }
}
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigConverter.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigConverter.java
new file mode 100644
index 0000000..754323f
--- /dev/null
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/AttributeConfigConverter.java
@@ -0,0 +1,58 @@
+package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
+
+import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
+import picocli.CommandLine;
+
+import java.util.regex.Pattern;
+
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.LanguageValidatorUtil.isAudioLanguageValid;
+import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.LanguageValidatorUtil.isLanguageValid;
+
+public class AttributeConfigConverter implements CommandLine.ITypeConverter {
+ private static final String SEPARATOR = ":";
+ private static final Pattern PATTERN = Pattern.compile("^.{3}:.{3}$");
+
+ /**
+ * Converts the input string into an AttributeConfig object.
+ *
+ * @param s The input string containing audio and subtitle language configuration in format "audioLang:subtitleLang"
+ * @return An AttributeConfig object representing the parsed configuration
+ * @throws CommandLine.TypeConversionException if the input string is invalid or contains invalid language codes
+ */
+ @Override
+ public AttributeConfig convert(String s) throws Exception {
+ validateInput(s);
+
+ String[] split = s.split(SEPARATOR);
+ AttributeConfig attr = new AttributeConfig(split[0], split[1]);
+
+ validateResult(attr);
+
+ return attr;
+ }
+
+ /**
+ * Validates that the input string matches the expected pattern.
+ *
+ * @param s String to validate
+ * @throws CommandLine.TypeConversionException if the value doesn't match the expected pattern
+ */
+ private static void validateInput(String s) {
+ if (!PATTERN.matcher(s).matches()) {
+ throw new CommandLine.TypeConversionException("Invalid Attribute config: " + s);
+ }
+ }
+
+ /**
+ * Validates that both language codes in the AttributeConfig object are valid.
+ *
+ * @param attr AttributeConfig object to validate
+ * @throws CommandLine.TypeConversionException if either language code is invalid
+ */
+ private static void validateResult(AttributeConfig attr) {
+ if (!isAudioLanguageValid(attr.getAudioLanguage()))
+ throw new CommandLine.TypeConversionException("Audio language invalid: " + attr.getAudioLanguage());
+ if (!isLanguageValid(attr.getSubtitleLanguage()))
+ throw new CommandLine.TypeConversionException("Subtitle language invalid: " + attr.getSubtitleLanguage());
+ }
+}
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java
index dc8d6a5..758c0d9 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/Config.java
@@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
+import picocli.CommandLine;
import java.io.File;
import java.util.*;
@@ -18,7 +19,7 @@ import java.util.regex.Pattern;
@Slf4j
@Getter
@Setter
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
+@NoArgsConstructor
public class Config {
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
@@ -27,25 +28,40 @@ public class Config {
CommandLineParser parser = new DefaultParser();
@Getter(AccessLevel.NONE)
HelpFormatter formatter = new HelpFormatter();
+
private File configPath;
+ @CommandLine.Option(names = {"-l", "--library"}, required = true, description = "path to library")
private File libraryPath;
@Getter(AccessLevel.NONE)
+ @CommandLine.Option(names = {"-m", "--mkvtoolnix"}, defaultValue = "C:\\Program Files\\MKVToolNix", description = "path to mkvtoolnix installation")
private File mkvToolNix;
+ @CommandLine.Option(names = {"-t", "--threads"}, defaultValue = "2", description = "thread count (default: 2)")
private int threads;
+ @CommandLine.Option(names = {"-i", "--include-pattern"}, defaultValue = ".*", description = "include files matching pattern (default: \".*\")")
private Pattern includePattern;
+ @CommandLine.Option(names = {"-s", "--safemode"}, description = "test run (no files will be changes)")
private boolean safeMode;
+ @CommandLine.Option(names = {"-c", "--coherent"}, description = "try to match all files in dir of depth with the same attribute config")
private Integer coherent;
+ @CommandLine.Option(names = {"-cf", "--force-coherent"}, description = "changes are only applied if it's a coherent match")
private boolean forceCoherent;
+ @CommandLine.Option(names = {"-n"}, description = "sets filter-date to last successful execution (overwrites input of filter-date)")
private boolean onlyNewFiles;
+ @CommandLine.Option(names = {"-d", "--filter-date"}, defaultValue = CommandLine.Option.NULL_VALUE, description = "only consider files created newer than entered date (format: \"dd.MM.yyyy-HH:mm:ss\")")
private Date filterDate;
+ @CommandLine.Option(names = {"-fk", "--force-keywords"}, description = "Additional keywords to identify forced tracks")
private Set forcedKeywords = new HashSet<>(Arrays.asList("forced", "signs", "songs"));
+ @CommandLine.Option(names = {"-ck", "--commentary-keywords"}, description = "Additional keywords to identify commentary tracks")
private Set commentaryKeywords = new HashSet<>(Arrays.asList("commentary", "director"));
+ @CommandLine.Option(names = {"-e", "--excluded-directory"}, description = "Directories to be excluded, combines with config file")
private Set excludedDirectories = new HashSet<>();
+ @CommandLine.Option(names = {"-ps", "--preferred-subtiltes"}, description = "Additional keywords to prefer specific subtitle tracks")
private Set preferredSubtitles = new HashSet<>(Arrays.asList("unstyled"));
+ @CommandLine.Option(names = {"-a"}, required = true, arity = "1..*", converter = AttributeConfigConverter.class)
private List attributeConfig;
public static Config getInstance() {
@@ -59,6 +75,10 @@ public class Config {
return config;
}
+ public static void setInstance(Config c) {
+ config = c;
+ }
+
/**
* Get path to specific mkvtoolnix application.
*
@@ -66,7 +86,7 @@ public class Config {
*/
public String getPathFor(MkvToolNix application) {
return mkvToolNix.getAbsolutePath().endsWith("/") ? mkvToolNix.getAbsolutePath() + application :
- mkvToolNix.getAbsolutePath() + "/" + application;
+ mkvToolNix.getAbsolutePath() + "/" + application;
}
public String getNormalizedLibraryPath() {
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java
deleted file mode 100644
index 18d4daa..0000000
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoader.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
-
-import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator.*;
-import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty;
-import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil;
-import at.pcgamingfreaks.yaml.YAML;
-import at.pcgamingfreaks.yaml.YamlInvalidContentException;
-import org.apache.commons.cli.*;
-
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.*;
-import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.CommandLineOptionsUtil.optionOf;
-
-public class ConfigLoader {
- private static final List> VALIDATORS = Stream.of(
- new ConfigPathValidator(CONFIG_PATH, false),
- new PathValidator(LIBRARY, true, null),
- new ThreadValidator(THREADS, false, 2),
- new MkvToolNixPathValidator(MKV_TOOL_NIX, true, Path.of("C:\\Program Files\\MKVToolNix").toFile()),
- new BooleanValidator(SAFE_MODE, false),
- new BooleanValidator(ONLY_NEW_FILES, false),
- new DateValidator(FILTER_DATE, false),
- new PatternValidator(INCLUDE_PATTERN, false, Pattern.compile(".*")),
- new SetValidator(FORCED_KEYWORDS, false, true),
- new SetValidator(COMMENTARY_KEYWORDS, false, true),
- new SetValidator(EXCLUDED_DIRECTORY, false, true),
- new SetValidator(PREFERRED_SUBTITLES, false, true),
- new AttributeConfigValidator(),
- new CoherentConfigValidator(COHERENT, false),
- new BooleanValidator(FORCE_COHERENT, false)
- ).sorted(Comparator.comparing((ConfigValidator> validator) -> validator.getWeight()).reversed()).collect(Collectors.toList());
-
- public static void initConfig(String[] args) {
- HelpFormatter formatter = new HelpFormatter();
- formatter.setOptionComparator(null);
- YAML yamlConfig = null;
-
- Options options = initOptions();
- CommandLine cmd = parseCommandLineArgs(formatter, options, args);
-
- exitIfHelp(cmd, options, formatter);
- exitIfVersion(cmd);
-
- List results = new ArrayList<>();
-
- for (ConfigValidator> validator: VALIDATORS) {
- results.add(validator.validate(yamlConfig, cmd));
- if (yamlConfig == null) {
- try {
- yamlConfig = Config.getInstance().getConfigPath() != null
- ? new YAML(Config.getInstance().getConfigPath())
- : new YAML("");
- } catch (IOException | YamlInvalidContentException ignored) {}
- }
- }
-
- if (results.contains(ValidationResult.INVALID) || results.contains(ValidationResult.MISSING)) System.exit(1);
- System.out.println();
- }
-
- private static Options initOptions() {
- Options options = new Options();
- Arrays.stream(ConfigProperty.values())
- .filter(prop -> prop.abrv() != null)
- .map(prop -> optionOf(prop, prop.abrv(), prop.args()))
- .forEach(options::addOption);
- return options;
- }
-
- private static CommandLine parseCommandLineArgs(HelpFormatter formatter, Options options, String[] args) {
- CommandLineParser parser = new DefaultParser();
-
- try {
- CommandLine cmd = parser.parse(options, args);
- if (cmd == null) throw new NullPointerException();
- return cmd;
- } catch (ParseException | NullPointerException e) {
- formatter.printHelp(130, "java -jar MKVAudioSubtitlesChanger.jar -l ",
- "\nParameters:", options,
- "\nFeature requests and bug reports: https://github.com/RatzzFatzz/MKVAudioSubtitleChanger/issues");
- System.exit(1);
- }
- return null; // can't be reached
- }
-
- private static void exitIfHelp(CommandLine cmd, Options options, HelpFormatter formatter) {
- if (cmd.hasOption(HELP.prop())) {
- formatter.printHelp(130, "java -jar MKVAudioSubtitlesChanger.jar -l ",
- "\nParameters:", options,
- "\nFeature requests and bug reports: https://github.com/RatzzFatzz/MKVAudioSubtitleChanger/issues");
- System.exit(0);
- }
- }
-
- private static void exitIfVersion(CommandLine cmd) {
- if (cmd.hasOption(VERSION.prop())) {
- System.out.printf("MKV Audio Subtitle Changer Version %s%n", ProjectUtil.getVersion());
- System.exit(0);
- }
- }
-}
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ValidationResult.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ValidationResult.java
index 5ac257e..0f17cfc 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ValidationResult.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ValidationResult.java
@@ -1,5 +1,6 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
+@Deprecated
public enum ValidationResult {
VALID,
DEFAULT,
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidator.java
index 7342c9f..dd21ec8 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/AttributeConfigValidator.java
@@ -13,6 +13,7 @@ import java.util.stream.Collectors;
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.LanguageValidatorUtil.isAudioLanguageValid;
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.util.LanguageValidatorUtil.isLanguageValid;
+@Deprecated
public class AttributeConfigValidator extends ConfigValidator> {
private static final String SEPARATOR = ":";
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidator.java
index d192e25..6446722 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/BooleanValidator.java
@@ -12,6 +12,7 @@ import java.util.function.BiFunction;
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty.ARGUMENTS;
+@Deprecated
public class BooleanValidator extends ConfigValidator {
public BooleanValidator(ConfigProperty property, boolean required) {
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/CoherentConfigValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/CoherentConfigValidator.java
index 25edaf9..9f9bdee 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/CoherentConfigValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/CoherentConfigValidator.java
@@ -3,6 +3,7 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty;
import org.apache.commons.lang3.math.NumberUtils;
+@Deprecated
public class CoherentConfigValidator extends ConfigValidator {
private static final Integer DISABLED = -1;
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigPathValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigPathValidator.java
index c051ca1..d9fa7dc 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigPathValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigPathValidator.java
@@ -7,6 +7,7 @@ import java.io.File;
import java.util.Optional;
import java.util.function.BiFunction;
+@Deprecated
public class ConfigPathValidator extends PathValidator {
public ConfigPathValidator(ConfigProperty property, boolean required) {
super(property, required, null);
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java
index 791ee77..cae426b 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ConfigValidator.java
@@ -19,6 +19,7 @@ import java.util.function.Predicate;
@Slf4j
@RequiredArgsConstructor
+@Deprecated
public abstract class ConfigValidator {
protected final ConfigProperty property;
protected final boolean required;
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java
index f376af1..703f472 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/DateValidator.java
@@ -15,6 +15,7 @@ import java.nio.file.Path;
import java.util.Date;
@Slf4j
+@Deprecated
public class DateValidator extends ConfigValidator {
private static final Date INVALID_DATE = new Date(0);
private static final Date DEFAULT_DATE = new Date(1000);
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidator.java
index 4095921..62fc682 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/MkvToolNixPathValidator.java
@@ -8,6 +8,7 @@ import java.nio.file.Path;
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.MkvToolNix.MKV_MERGER;
import static at.pcgamingfreaks.mkvaudiosubtitlechanger.model.MkvToolNix.MKV_PROP_EDIT;
+@Deprecated
public class MkvToolNixPathValidator extends PathValidator {
private static final String EXE = ".exe";
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PathValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PathValidator.java
index 3cc712d..688d8aa 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PathValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PathValidator.java
@@ -5,6 +5,7 @@ import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty;
import java.io.File;
import java.nio.file.Path;
+@Deprecated
public class PathValidator extends ConfigValidator {
public PathValidator(ConfigProperty property, boolean required, File defaultValue) {
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidator.java
index d2c0f1e..9ee0468 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/PatternValidator.java
@@ -5,6 +5,7 @@ import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
+@Deprecated
public class PatternValidator extends ConfigValidator {
private static final Pattern EMPTY_PATTERN = Pattern.compile("");
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/SetValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/SetValidator.java
index 796513f..cddbb05 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/SetValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/SetValidator.java
@@ -13,6 +13,7 @@ import java.util.*;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
+@Deprecated
public class SetValidator extends ConfigValidator> {
private final boolean append;
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ThreadValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ThreadValidator.java
index 8d3e5cb..85086a4 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ThreadValidator.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/validator/ThreadValidator.java
@@ -3,6 +3,7 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.config.validator;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.ConfigProperty;
import org.apache.commons.lang3.math.NumberUtils;
+@Deprecated
public class ThreadValidator extends ConfigValidator{
public ThreadValidator(ConfigProperty property, boolean required, Integer defaultValue) {
super(property, required, defaultValue);
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java
index bb31a33..048e61c 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/kernel/AttributeUpdaterKernel.java
@@ -19,6 +19,7 @@ import me.tongfei.progressbar.ProgressBar;
import me.tongfei.progressbar.ProgressBarBuilder;
import me.tongfei.progressbar.ProgressBarStyle;
import net.harawata.appdirs.AppDirsFactory;
+import picocli.CommandLine;
import java.io.File;
import java.io.IOException;
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/LanguageValidatorUtil.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/LanguageValidatorUtil.java
index ed7bf6c..f3fb797 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/LanguageValidatorUtil.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/LanguageValidatorUtil.java
@@ -24,7 +24,7 @@ public class LanguageValidatorUtil {
}
public static boolean isAudioLanguageValid(String language) {
- return !language.equals("OFF") && ISO3_LANGUAGES.contains(language);
+ return !language.equals("OFF") && isLanguageValid(language);
}
public static boolean isLanguageValid(String language) {
diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java
index 0e2c013..d86656c 100644
--- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java
+++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/util/ProjectUtil.java
@@ -1,10 +1,12 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.util;
+import picocli.CommandLine;
+
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
-public class ProjectUtil {
+public class ProjectUtil implements CommandLine.IVersionProvider {
private static final Properties PROJECT_PROPERTIES = new Properties();
static {
@@ -15,8 +17,8 @@ public class ProjectUtil {
}
}
- public static String getVersion() {
- return PROJECT_PROPERTIES.getProperty("version");
+ public String[] getVersion() {
+ return new String[] {getProjectName() + " " + PROJECT_PROPERTIES.getProperty("version")};
}
public static String getProjectName() {
diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoaderTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoaderTest.java
index d78fab5..3849b97 100644
--- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoaderTest.java
+++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/config/ConfigLoaderTest.java
@@ -2,6 +2,7 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.config;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.AttributeConfig;
import org.junit.jupiter.api.Test;
+import picocli.CommandLine;
import java.util.List;
@@ -12,7 +13,7 @@ class ConfigLoaderTest {
@Test
void initConfig() {
- String[] sut = new String[]{"-a", "ger:ger", "-l", TEST_FILE,
+ String[] sut = new String[]{"-a", "ger:ger", "eng:eng", "-l", TEST_FILE,
"-s", "-cf", "-n",
"-c", "2",
"-t", "4",
@@ -21,15 +22,16 @@ class ConfigLoaderTest {
"-ck", "testCommentary",
"-ps", "testPreferred"
};
- ConfigLoader.initConfig(sut);
+ CommandLine.populateCommand(Config.getInstance(), sut);
assertTrue(Config.getInstance().getLibraryPath().exists());
- assertEquals(List.of(new AttributeConfig("ger", "ger")), Config.getInstance().getAttributeConfig());
+ assertEquals(List.of(new AttributeConfig("ger", "ger"), new AttributeConfig("eng", "eng")),
+ Config.getInstance().getAttributeConfig());
assertTrue(Config.getInstance().isSafeMode());
assertTrue(Config.getInstance().isForceCoherent());
assertTrue(Config.getInstance().isOnlyNewFiles());
- assertNotNull(Config.getInstance().getFilterDate());
+ assertNull(Config.getInstance().getFilterDate());
assertEquals(2, Config.getInstance().getCoherent());
assertEquals(4, Config.getInstance().getThreads());