mirror of
https://github.com/RatzzFatzz/MKVAudioSubtitleChanger.git
synced 2026-02-11 02:05:56 +01:00
Remove attribute config as required option
This commit is contained in:
@@ -1,11 +1,6 @@
|
|||||||
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl;
|
package at.pcgamingfreaks.mkvaudiosubtitlechanger.impl;
|
||||||
|
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.AttributeUpdater;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.*;
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.CoherentAttributeUpdater;
|
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.SingleFileAttributeUpdater;
|
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.CachedFileProcessor;
|
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.FileProcessor;
|
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.impl.processors.MkvFileProcessor;
|
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.InputConfig;
|
||||||
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil;
|
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ProjectUtil;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
@@ -19,8 +14,8 @@ import picocli.CommandLine;
|
|||||||
name = "mkvaudiosubtitlechanger",
|
name = "mkvaudiosubtitlechanger",
|
||||||
usageHelpAutoWidth = true,
|
usageHelpAutoWidth = true,
|
||||||
customSynopsis = {
|
customSynopsis = {
|
||||||
"mkvaudiosubtitlechanger -a <attributeConfig> [...<attributeConfig>] -l <libraryPath> [-s]",
|
"mkvaudiosubtitlechanger [-a <attributeConfig> [...<attributeConfig>]] [-s] <libraryPath>",
|
||||||
"Example: mkvaudiosubtitlechanger -a eng:eng eng:ger -l /mnt/media/ -s",
|
"Example: mkvaudiosubtitlechanger -a eng:eng eng:ger -s /mnt/media/",
|
||||||
""
|
""
|
||||||
},
|
},
|
||||||
requiredOptionMarker = '*',
|
requiredOptionMarker = '*',
|
||||||
@@ -41,10 +36,11 @@ public class CommandRunner implements Runnable {
|
|||||||
|
|
||||||
FileFilter fileFilter = new FileFilter(config.getExcluded(), config.getIncludePattern(), config.getFilterDate());
|
FileFilter fileFilter = new FileFilter(config.getExcluded(), config.getIncludePattern(), config.getFilterDate());
|
||||||
FileProcessor fileProcessor = new CachedFileProcessor(new MkvFileProcessor(config.getMkvToolNix(), fileFilter));
|
FileProcessor fileProcessor = new CachedFileProcessor(new MkvFileProcessor(config.getMkvToolNix(), fileFilter));
|
||||||
|
AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(config.getPreferredSubtitles().toArray(new String[0]), config.getForcedKeywords(), config.getCommentaryKeywords(), config.getHearingImpaired());
|
||||||
|
|
||||||
AttributeUpdater kernel = config.getCoherent() != null
|
AttributeUpdater kernel = config.getCoherent() != null
|
||||||
? new CoherentAttributeUpdater(config, fileProcessor)
|
? new CoherentAttributeUpdater(config, fileProcessor, attributeChangeProcessor)
|
||||||
: new SingleFileAttributeUpdater(config, fileProcessor);
|
: new SingleFileAttributeUpdater(config, fileProcessor, attributeChangeProcessor);
|
||||||
kernel.execute();
|
kernel.execute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public abstract class AttributeUpdater {
|
|||||||
|
|
||||||
private final ExecutorService executor;
|
private final ExecutorService executor;
|
||||||
|
|
||||||
public AttributeUpdater(InputConfig config, FileProcessor fileProcessor) {
|
public AttributeUpdater(InputConfig config, FileProcessor fileProcessor, AttributeChangeProcessor attributeChangeProcessor) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.fileProcessor = fileProcessor;
|
this.fileProcessor = fileProcessor;
|
||||||
this.attributeChangeProcessor = attributeChangeProcessor;
|
this.attributeChangeProcessor = attributeChangeProcessor;
|
||||||
|
|||||||
@@ -28,12 +28,13 @@ public class InputConfig implements CommandLine.IVersionProvider {
|
|||||||
@CommandLine.Spec
|
@CommandLine.Spec
|
||||||
CommandLine.Model.CommandSpec spec;
|
CommandLine.Model.CommandSpec spec;
|
||||||
|
|
||||||
@Option(names = {"-a", "--attribute-config"}, required = true, arity = "1..*", converter = AttributeConfigConverter.class,
|
|
||||||
description = "List of audio:subtitle pairs used to match in order and update files accordingly (e.g. jpn:eng jpn:ger)")
|
|
||||||
private AttributeConfig[] attributeConfig;
|
|
||||||
@ValidFile(message = "does not exist")
|
@ValidFile(message = "does not exist")
|
||||||
@Option(names = {"-l", "--library"}, required = true, description = "path to library")
|
@CommandLine.Parameters(description = "path to library")
|
||||||
private File libraryPath;
|
private File libraryPath;
|
||||||
|
|
||||||
|
@Option(names = {"-a", "--attribute-config"}, arity = "1..*", converter = AttributeConfigConverter.class,
|
||||||
|
description = "List of audio:subtitle pairs used to match in order and update files accordingly (e.g. jpn:eng jpn:ger)")
|
||||||
|
private AttributeConfig[] attributeConfig = new AttributeConfig[0];
|
||||||
@ValidMkvToolNix(message = "does not exist")
|
@ValidMkvToolNix(message = "does not exist")
|
||||||
@Option(names = {"-m", "--mkvtoolnix"}, defaultValue = "${DEFAULT_MKV_TOOL_NIX}", description = "path to mkvtoolnix installation")
|
@Option(names = {"-m", "--mkvtoolnix"}, defaultValue = "${DEFAULT_MKV_TOOL_NIX}", description = "path to mkvtoolnix installation")
|
||||||
private File mkvToolNix;
|
private File mkvToolNix;
|
||||||
@@ -90,8 +91,8 @@ public class InputConfig implements CommandLine.IVersionProvider {
|
|||||||
return new StringJoiner(", ", InputConfig.class.getSimpleName() + "[", "]")
|
return new StringJoiner(", ", InputConfig.class.getSimpleName() + "[", "]")
|
||||||
.add("configPath=" + configPath)
|
.add("configPath=" + configPath)
|
||||||
.add("spec=" + spec)
|
.add("spec=" + spec)
|
||||||
.add("attributeConfig=" + Arrays.toString(attributeConfig))
|
|
||||||
.add("libraryPath=" + libraryPath)
|
.add("libraryPath=" + libraryPath)
|
||||||
|
.add("attributeConfig=" + Arrays.toString(attributeConfig))
|
||||||
.add("mkvToolNix=" + mkvToolNix)
|
.add("mkvToolNix=" + mkvToolNix)
|
||||||
.add("safeMode=" + safeMode)
|
.add("safeMode=" + safeMode)
|
||||||
.add("threads=" + threads)
|
.add("threads=" + threads)
|
||||||
|
|||||||
@@ -65,9 +65,10 @@ class CoherentAttributeUpdaterTest {
|
|||||||
@MethodSource("findMatch")
|
@MethodSource("findMatch")
|
||||||
void findMatch(AttributeConfig attributeConfig, List<Pair<File, FileInfo>> fileInfoMock, boolean expectedMatch, int expectedMatchCount) throws InvocationTargetException, IllegalAccessException {
|
void findMatch(AttributeConfig attributeConfig, List<Pair<File, FileInfo>> fileInfoMock, boolean expectedMatch, int expectedMatchCount) throws InvocationTargetException, IllegalAccessException {
|
||||||
CommandRunner commandRunner = new CommandRunner();
|
CommandRunner commandRunner = new CommandRunner();
|
||||||
new CommandLine(commandRunner).parseArgs("-l", "/arst", "-a", "ger:ger");
|
new CommandLine(commandRunner).parseArgs("-a", "ger:ger", "/arst");
|
||||||
InputConfig config = commandRunner.getConfig();
|
InputConfig config = commandRunner.getConfig();
|
||||||
CoherentAttributeUpdater updater = new CoherentAttributeUpdater(config, fileProcessor, null);
|
AttributeChangeProcessor attributeChangeProcessor = new AttributeChangeProcessor(config.getPreferredSubtitles().toArray(new String[0]), config.getForcedKeywords(), config.getCommentaryKeywords(), config.getHearingImpaired());
|
||||||
|
CoherentAttributeUpdater updater = new CoherentAttributeUpdater(config, fileProcessor, attributeChangeProcessor);
|
||||||
Set<FileInfo> matchedFiles = new HashSet<>(fileInfoMock.size() * 2);
|
Set<FileInfo> matchedFiles = new HashSet<>(fileInfoMock.size() * 2);
|
||||||
|
|
||||||
List<File> files = new ArrayList<>();
|
List<File> files = new ArrayList<>();
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ class ValidationExecutionStrategyTest {
|
|||||||
CommandRunner underTest = new CommandRunner();
|
CommandRunner underTest = new CommandRunner();
|
||||||
new CommandLine(underTest)
|
new CommandLine(underTest)
|
||||||
.setExecutionStrategy(new ValidationExecutionStrategy())
|
.setExecutionStrategy(new ValidationExecutionStrategy())
|
||||||
.parseArgs("-a", "ger:ger", "-l", TEST_FILE, "-m", TEST_MKVTOOLNIX_DIR);
|
.parseArgs("-a", "ger:ger", "-m", TEST_MKVTOOLNIX_DIR, TEST_FILE);
|
||||||
|
|
||||||
assertEquals(TEST_FILE, underTest.getConfig().getLibraryPath().getPath().replace("\\", "/"));
|
assertEquals(TEST_FILE, underTest.getConfig().getLibraryPath().getPath().replace("\\", "/"));
|
||||||
assertEquals(TEST_MKVTOOLNIX_DIR, underTest.getConfig().getMkvToolNix().getPath().replace("\\", "/"));
|
assertEquals(TEST_MKVTOOLNIX_DIR, underTest.getConfig().getMkvToolNix().getPath().replace("\\", "/"));
|
||||||
@@ -30,17 +30,16 @@ class ValidationExecutionStrategyTest {
|
|||||||
|
|
||||||
private static Stream<Arguments> validateFailure() {
|
private static Stream<Arguments> validateFailure() {
|
||||||
return Stream.of(
|
return Stream.of(
|
||||||
Arguments.of(new String[]{"-a", "jpn:ger"}, "Error: Missing required argument(s): --library=<libraryPath>"),
|
Arguments.of(new String[]{"-a", "jpn:ger"}, "Error: Missing required argument(s): <libraryPath>"),
|
||||||
Arguments.of(new String[]{"-a", "jpn:ger", "-l"}, "Missing required parameter for option '--library' (<libraryPath>)"),
|
Arguments.of(new String[]{"/arstarstarst"}, "libraryPath does not exist"),
|
||||||
Arguments.of(new String[]{"-l", "/arstarstarst"}, "Error: Missing required argument(s): --attribute-config=<attributeConfig>"),
|
Arguments.of(new String[]{"/arstarstarst", "-a",}, "Missing required parameter for option '--attribute-config' at index 0 (<attributeConfig>)"),
|
||||||
Arguments.of(new String[]{"-l", "/arstarstarst", "-a",}, "Missing required parameter for option '--attribute-config' at index 0 (<attributeConfig>)"),
|
Arguments.of(new String[]{"/arstarstarst", "-a", "jpn:ger"}, "libraryPath does not exist"),
|
||||||
Arguments.of(new String[]{"-l", "/arstarstarst", "-a", "jpn:ger"}, "libraryPath does not exist"),
|
Arguments.of(new String[]{"/arstarstarst", "-m"}, "Missing required parameter for option '--mkvtoolnix' (<mkvToolNix>)"),
|
||||||
Arguments.of(args("-m"), "Missing required parameter for option '--mkvtoolnix' (<mkvToolNix>)"),
|
Arguments.of(new String[]{"./", "-m", TEST_INVALID_DIR}, "mkvToolNix does not exist"),
|
||||||
Arguments.of(args("-m", TEST_INVALID_DIR), "mkvToolNix does not exist"),
|
Arguments.of(new String[]{"./", "-t"}, "Missing required parameter for option '--threads' (<threads>)"),
|
||||||
Arguments.of(args("-t"), "Missing required parameter for option '--threads' (<threads>)"),
|
Arguments.of(new String[]{"./", "-t", "0"}, "threads must be greater than or equal to 1"),
|
||||||
Arguments.of(args("-t", "0"), "threads must be greater than or equal to 1"),
|
Arguments.of(new String[]{"./", "-t", "-1"}, "threads must be greater than or equal to 1"),
|
||||||
Arguments.of(args("-t", "-1"), "threads must be greater than or equal to 1"),
|
Arguments.of(new String[]{"./", "-c", "-1"}, "coherent must be greater than or equal to 0")
|
||||||
Arguments.of(args("-c", "-1"), "coherent must be greater than or equal to 0")
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ package at.pcgamingfreaks.mkvaudiosubtitlechanger.util;
|
|||||||
public class TestUtil {
|
public class TestUtil {
|
||||||
|
|
||||||
public static String[] args(String... args) {
|
public static String[] args(String... args) {
|
||||||
String[] staticArray = new String[]{"-l", "/", "-a", "jpn:ger"};
|
String[] staticArray = new String[]{"-a", "jpn:ger", "/"};
|
||||||
String[] result = new String[staticArray.length + args.length];
|
String[] result = new String[staticArray.length + args.length];
|
||||||
System.arraycopy(staticArray, 0, result, 0, staticArray.length);
|
System.arraycopy(args, 0, result, 0, args.length);
|
||||||
System.arraycopy(args, 0, result, staticArray.length, args.length);
|
System.arraycopy(staticArray, 0, result, args.length, staticArray.length);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user