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());