From 1165dd83802dfc16743b7feddf423000ca3f3348 Mon Sep 17 00:00:00 2001 From: RatzzFatzz Date: Mon, 29 Dec 2025 00:12:28 +0100 Subject: [PATCH] Add support for multiple library paths --- .../impl/processors/CoherentAttributeUpdater.java | 2 +- .../impl/processors/SingleFileAttributeUpdater.java | 2 +- .../impl/validation/ValidFileValidator.java | 11 ++++++++++- .../mkvaudiosubtitlechanger/model/InputConfig.java | 4 ++-- .../validation/ValidationExecutionStrategyTest.java | 10 +++++----- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/processors/CoherentAttributeUpdater.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/processors/CoherentAttributeUpdater.java index 5618ae1..595dd8b 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/processors/CoherentAttributeUpdater.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/processors/CoherentAttributeUpdater.java @@ -26,7 +26,7 @@ public class CoherentAttributeUpdater extends SingleFileAttributeUpdater { } protected List getFiles() { - return Arrays.stream(config.getLibraryPaths()) + return Arrays.stream(config.getLibraryPath()) .flatMap(path -> fileProcessor.loadDirectory(path.getPath(), config.getCoherent()).stream()) .toList(); } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/processors/SingleFileAttributeUpdater.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/processors/SingleFileAttributeUpdater.java index a75ee22..7e6f97e 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/processors/SingleFileAttributeUpdater.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/processors/SingleFileAttributeUpdater.java @@ -24,7 +24,7 @@ public class SingleFileAttributeUpdater extends AttributeUpdater { @Override protected List getFiles() { - return Arrays.stream(config.getLibraryPaths()) + return Arrays.stream(config.getLibraryPath()) .flatMap(path -> fileProcessor.loadFiles(path.getPath()).stream()) .toList(); } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidFileValidator.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidFileValidator.java index 0a7a278..d3bec0c 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidFileValidator.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidFileValidator.java @@ -2,10 +2,12 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.validation; import jakarta.validation.ConstraintValidator; import jakarta.validation.ConstraintValidatorContext; +import lombok.extern.slf4j.Slf4j; import java.io.File; import java.util.Arrays; +@Slf4j public class ValidFileValidator implements ConstraintValidator { @Override public void initialize(ValidFile constraintAnnotation) { @@ -13,6 +15,13 @@ public class ValidFileValidator implements ConstraintValidator 0 && Arrays.stream(files).allMatch(File::exists); + if (files == null || files.length == 0) return false; + for (File file: files) { + if (!file.exists()) { + log.error("{} does not exist", file.getPath()); + return false; + } + } + return true; } } diff --git a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/InputConfig.java b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/InputConfig.java index 00a9418..e610348 100644 --- a/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/InputConfig.java +++ b/src/main/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/model/InputConfig.java @@ -30,7 +30,7 @@ public class InputConfig implements CommandLine.IVersionProvider { @ValidFile(message = "does not exist") @CommandLine.Parameters(description = "paths to library", arity = "1..*") - private File[] libraryPaths; + private File[] libraryPath; @Option(names = {"-a", "--attribute-config"}, arity = "1..*", converter = AttributeConfigConverter.class, description = "List of audio:subtitle pairs for matching defaults in order (e.g. jpn:eng jpn:ger)") @@ -91,7 +91,7 @@ public class InputConfig implements CommandLine.IVersionProvider { return new StringJoiner(", ", InputConfig.class.getSimpleName() + "[", "]") .add("configPath=" + configPath) .add("spec=" + spec) - .add("libraryPath=" + libraryPaths) + .add("libraryPath=" + libraryPath) .add("attributeConfig=" + Arrays.toString(attributeConfig)) .add("mkvToolNix=" + mkvToolNix) .add("safeMode=" + safeMode) diff --git a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategyTest.java b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategyTest.java index 9ae7b45..a16a7c0 100644 --- a/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategyTest.java +++ b/src/test/java/at/pcgamingfreaks/mkvaudiosubtitlechanger/impl/validation/ValidationExecutionStrategyTest.java @@ -23,17 +23,17 @@ class ValidationExecutionStrategyTest { .setExecutionStrategy(new ValidationExecutionStrategy()) .parseArgs("-a", "ger:ger", "-m", TEST_MKVTOOLNIX_DIR, TEST_FILE); - assertEquals(TEST_FILE, underTest.getConfig().getLibraryPaths()[0].getPath().replace("\\", "/")); + assertEquals(TEST_FILE, underTest.getConfig().getLibraryPath()[0].getPath().replace("\\", "/")); assertEquals(TEST_MKVTOOLNIX_DIR, underTest.getConfig().getMkvToolNix().getPath().replace("\\", "/")); } private static Stream validateFailure() { return Stream.of( - Arguments.of(new String[]{"-a", "jpn:ger"}, "Error: Missing required argument(s): "), - Arguments.of(new String[]{"/arstarstarst"}, "libraryPaths does not exist"), - Arguments.of(new String[]{TEST_DIR + " /arstarstarst"}, "libraryPaths does not exist"), + Arguments.of(new String[]{"-a", "jpn:ger"}, "Error: Missing required argument(s): "), + Arguments.of(new String[]{"/arstarstarst"}, "libraryPath does not exist"), + Arguments.of(new String[]{TEST_DIR, "/arstarstarst"}, "libraryPath does not exist"), Arguments.of(new String[]{"/arstarstarst", "-a",}, "Missing required parameter for option '--attribute-config' at index 0 ()"), - Arguments.of(new String[]{"/arstarstarst", "-a", "jpn:ger"}, "libraryPaths does not exist"), + Arguments.of(new String[]{"/arstarstarst", "-a", "jpn:ger"}, "libraryPath does not exist"), Arguments.of(new String[]{"/arstarstarst", "-m"}, "Missing required parameter for option '--mkvtoolnix' ()"), Arguments.of(new String[]{"./", "-m", TEST_INVALID_DIR}, "mkvToolNix does not exist"), Arguments.of(new String[]{"./", "-t"}, "Missing required parameter for option '--threads' ()"),