Implement cli parameter basis

This commit is contained in:
2022-03-20 20:49:34 +01:00
parent f2fb296698
commit feaeda746a
7 changed files with 148 additions and 39 deletions

View File

@@ -144,6 +144,11 @@
<artifactId>jackson-databind</artifactId> <artifactId>jackson-databind</artifactId>
<version>2.13.1</version> <version>2.13.1</version>
</dependency> </dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.5.0</version>
</dependency>
<!-- endregion --> <!-- endregion -->
<!-- region unit-tests --> <!-- region unit-tests -->
<dependency> <dependency>

View File

@@ -21,9 +21,9 @@ public class AttributeUpdaterKernel {
@SneakyThrows @SneakyThrows
public void execute(String path) { public void execute(String path) {
List<AttributeConfig> configPattern = ConfigUtil.loadConfig(); List<AttributeConfig> configPattern = ConfigUtil.getInstance().getAttributeConfig();
List<File> allValidPaths = collector.loadFiles(path); List<File> allValidPaths = collector.loadFiles(path);
ExecutorService executor = Executors.newFixedThreadPool(ConfigUtil.getThreadCount()); ExecutorService executor = Executors.newFixedThreadPool(ConfigUtil.getInstance().getThreadCount());
long beforeTimer = System.currentTimeMillis(); long beforeTimer = System.currentTimeMillis();
if(allValidPaths != null && configPattern != null){ if(allValidPaths != null && configPattern != null){

View File

@@ -1,22 +1,24 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger; package at.pcgamingfreaks.mkvaudiosubtitlechanger;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ConfigUtil;
import at.pcgamingfreaks.yaml.YAML; import at.pcgamingfreaks.yaml.YAML;
import at.pcgamingfreaks.yaml.YamlInvalidContentException; import at.pcgamingfreaks.yaml.YamlInvalidContentException;
import at.pcgamingfreaks.yaml.YamlKeyNotFoundException; import at.pcgamingfreaks.yaml.YamlKeyNotFoundException;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.apache.commons.cli.*;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import static java.lang.Integer.parseInt;
@Log4j2 @Log4j2
public class Main { public class Main {
public static void main(String[] args) { public static void main(String[] args) {
if(checkIfMKVToolNixIsValid()){ System.out.println(String.join(", ", args));
initConfig(args);
AttributeUpdaterKernel kernel = new AttributeUpdaterKernel(); AttributeUpdaterKernel kernel = new AttributeUpdaterKernel();
kernel.execute(args[0]); kernel.execute(ConfigUtil.getInstance().getLibraryPath());
}else{
log.error("MKVToolNix was not found! Please recheck path");
}
} }
private static boolean checkIfMKVToolNixIsValid() { private static boolean checkIfMKVToolNixIsValid() {
@@ -37,4 +39,28 @@ public class Main {
} }
return new File(MKVToolProperties.getInstance().getMkvmergePath()).isFile() && new File(MKVToolProperties.getInstance().getMkvpropeditPath()).isFile(); return new File(MKVToolProperties.getInstance().getMkvmergePath()).isFile() && new File(MKVToolProperties.getInstance().getMkvpropeditPath()).isFile();
} }
private static void initConfig(String[] args) {
Options options = new Options();
options.addOption("h", "help", false, "\"for help this is\" - Yoda");
options.addRequiredOption("l", "library", true, "path to library");
options.addOption("c", "config", false, "path to config");
options.addOption("t", "threads", true, "thread count");
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
try {
CommandLine cmd = parser.parse(options, args);
ConfigUtil configUtil = ConfigUtil.getInstance();
configUtil.loadConfig(cmd.getOptionValue("config", "config.yaml")); // use cmd input
configUtil.setLibraryPath(cmd.getOptionValue("library"));
if (cmd.hasOption("threads")) configUtil.setThreadCount(parseInt(cmd.getOptionValue("threads")));
configUtil.isValid();
} catch (ParseException e) {
log.error(e);
formatter.printHelp("java -jar MKVAudioSubtitlesChanger.jar -p <path_to_library>", options);
System.exit(1);
}
}
} }

View File

@@ -4,6 +4,7 @@ import lombok.Getter;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
@Log4j2 @Log4j2
@Getter @Getter
@@ -15,4 +16,13 @@ public class AttributeConfig {
this.audio = audio; this.audio = audio;
this.subtitle = subtitle; this.subtitle = subtitle;
} }
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("AttributeConfig{");
sb.append("audio=").append(String.join(", ", audio));
sb.append(", subtitle=").append(String.join(", ", subtitle));
sb.append('}');
return sb.toString();
}
} }

View File

@@ -1,7 +1,8 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.intimpl; package at.pcgamingfreaks.mkvaudiosubtitlechanger.intimpl;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.MKVToolProperties;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute; import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.ConfigUtil;
import at.pcgamingfreaks.mkvaudiosubtitlechanger.util.MkvToolNix;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
@@ -59,9 +60,9 @@ public class MkvFileCollector implements FileCollector {
try { try {
String command = ""; String command = "";
if (System.getProperty("os.name").toLowerCase().contains("windows")) { if (System.getProperty("os.name").toLowerCase().contains("windows")) {
command = "\"" + MKVToolProperties.getInstance().getMkvmergePath() + "\""; command = "\"" + ConfigUtil.getInstance().getPathFor(MkvToolNix.MKV_MERGER) + "\"";
} else { } else {
command = MKVToolProperties.getInstance().getMkvmergePath(); command = ConfigUtil.getInstance().getPathFor(MkvToolNix.MKV_MERGER);
} }
String[] array = new String[]{ String[] array = new String[]{
command, command,

View File

@@ -4,6 +4,9 @@ import at.pcgamingfreaks.mkvaudiosubtitlechanger.config.AttributeConfig;
import at.pcgamingfreaks.yaml.YAML; import at.pcgamingfreaks.yaml.YAML;
import at.pcgamingfreaks.yaml.YamlInvalidContentException; import at.pcgamingfreaks.yaml.YamlInvalidContentException;
import at.pcgamingfreaks.yaml.YamlKeyNotFoundException; import at.pcgamingfreaks.yaml.YamlKeyNotFoundException;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import java.io.File; import java.io.File;
@@ -12,40 +15,87 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Log4j2 @Log4j2
@Getter
@Setter
public class ConfigUtil { public class ConfigUtil {
public static List<AttributeConfig> loadConfig() { @Getter(AccessLevel.NONE)
try(YAML yaml = new YAML(new File("config.yaml"))){ @Setter(AccessLevel.NONE)
return yaml.getKeysFiltered(".*audio.*").stream() private static ConfigUtil configUtil = null;
private List<AttributeConfig> attributeConfig;
private int threadCount;
@Getter(AccessLevel.NONE)
private String mkvtoolnixPath;
private String libraryPath;
public static ConfigUtil getInstance() {
if(configUtil == null) {
configUtil = new ConfigUtil();
}
return configUtil;
}
public void isValid() throws RuntimeException{
System.out.println(attributeConfig);
System.out.println(threadCount);
System.out.println(mkvtoolnixPath);
System.out.println(libraryPath);
if (attributeConfig != null && !attributeConfig.isEmpty()
&& threadCount > 0 && !mkvtoolnixPath.isEmpty()
&& new File(getPathFor(MkvToolNix.MKV_MERGER)).isFile()
&& new File(getPathFor(MkvToolNix.MKV_PROP_EDIT)).isFile()) {
return;
}
throw new RuntimeException("Invalid configuration");
}
public void loadConfig(String configPath) {
try(YAML config = new YAML(new File(configPath))){
setAttributeConfig(loadAttributeConfig(config));
setThreadCount(loadThreadCount(config));
setMkvtoolnixPath(loadMkvToolNixPath(config));
}catch(YamlInvalidContentException | YamlKeyNotFoundException | IOException e){
log.fatal("Config could not be loaded: {}", e.getMessage());
}
}
private List<AttributeConfig> loadAttributeConfig(YAML config) {
return config.getKeysFiltered(".*audio.*").stream()
.sorted() .sorted()
.map(elem -> elem.replace(".audio", "")) .map(elem -> elem.replace(".audio", ""))
.map(elem -> createAttributeConfig(elem, yaml)) .map(elem -> createAttributeConfig(elem, config))
.collect(Collectors.toList()); .collect(Collectors.toList());
}catch(YamlInvalidContentException | IOException e){
log.fatal("Config could not be loaded");
e.printStackTrace();
}
return null;
} }
private static AttributeConfig createAttributeConfig(String key, YAML yaml) { private AttributeConfig createAttributeConfig(String key, YAML config) {
try{ try{
return new AttributeConfig( return new AttributeConfig(
yaml.getStringList(key + ".audio"), config.getStringList(key + ".audio"),
yaml.getStringList(key + ".subtitle")); config.getStringList(key + ".subtitle"));
}catch(YamlKeyNotFoundException e){ }catch(YamlKeyNotFoundException e){
e.printStackTrace(); e.printStackTrace();
return null; return null;
} }
} }
public static int getThreadCount() { private int loadThreadCount(YAML config) throws YamlKeyNotFoundException{
try { return config.isSet("threadCount")
return Integer.parseInt(new YAML(new File("config.yaml")).getString("threadCount")); ? Integer.parseInt(config.getString("threadCount"))
} catch (YamlInvalidContentException | IOException e) { : 1;
e.printStackTrace();
} catch (YamlKeyNotFoundException e) {
throw new RuntimeException(e);
} }
return 1;
private String loadMkvToolNixPath(YAML config) throws YamlKeyNotFoundException {
return config.isSet("mkvtoolnixPath") ? config.getString("mkvtoolnixPath") : defaultMkvToolNixPath();
}
private String defaultMkvToolNixPath() {
return System.getProperty("os.name").toLowerCase().contains("windows")
? "C:/Program Files/MKVToolNix/"
: "/usr/bin/";
}
public String getPathFor(MkvToolNix exe) {
return mkvtoolnixPath.endsWith("/") ? mkvtoolnixPath + exe : mkvtoolnixPath + "/" + exe;
} }
} }

View File

@@ -0,0 +1,17 @@
package at.pcgamingfreaks.mkvaudiosubtitlechanger.util;
public enum MkvToolNix {
MKV_MERGER("mkvmerge.exe"),
MKV_PROP_EDIT("mkvpropedit.exe");
private final String file;
MkvToolNix(String file) {
this.file = file;
}
@Override
public String toString() {
return file;
}
}