mirror of
https://github.com/RatzzFatzz/MKVAudioSubtitleChanger.git
synced 2026-02-11 02:05:56 +01:00
Implement cli parameter basis
This commit is contained in:
5
pom.xml
5
pom.xml
@@ -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>
|
||||||
|
|||||||
@@ -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){
|
||||||
|
|||||||
@@ -1,40 +1,66 @@
|
|||||||
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() {
|
||||||
try{
|
try {
|
||||||
String path = new YAML(new File("config.yaml")).getString("mkvtoolnixPath");
|
String path = new YAML(new File("config.yaml")).getString("mkvtoolnixPath");
|
||||||
if(! path.endsWith(File.separator)){
|
if (!path.endsWith(File.separator)) {
|
||||||
path += File.separator;
|
path += File.separator;
|
||||||
}
|
}
|
||||||
if(System.getProperty("os.name").toLowerCase().contains("windows")){
|
if (System.getProperty("os.name").toLowerCase().contains("windows")) {
|
||||||
MKVToolProperties.getInstance().setMkvmergePath(path + "mkvmerge.exe");
|
MKVToolProperties.getInstance().setMkvmergePath(path + "mkvmerge.exe");
|
||||||
MKVToolProperties.getInstance().setMkvpropeditPath(path + "mkvpropedit.exe");
|
MKVToolProperties.getInstance().setMkvpropeditPath(path + "mkvpropedit.exe");
|
||||||
}else{
|
} else {
|
||||||
MKVToolProperties.getInstance().setMkvmergePath(path + "mkvmerge");
|
MKVToolProperties.getInstance().setMkvmergePath(path + "mkvmerge");
|
||||||
MKVToolProperties.getInstance().setMkvpropeditPath(path + "mkvpropedit");
|
MKVToolProperties.getInstance().setMkvpropeditPath(path + "mkvpropedit");
|
||||||
}
|
}
|
||||||
}catch(YamlKeyNotFoundException | IOException | YamlInvalidContentException e){
|
} catch (YamlKeyNotFoundException | IOException | YamlInvalidContentException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
.sorted()
|
|
||||||
.map(elem -> elem.replace(".audio", ""))
|
private List<AttributeConfig> attributeConfig;
|
||||||
.map(elem -> createAttributeConfig(elem, yaml))
|
private int threadCount;
|
||||||
.collect(Collectors.toList());
|
@Getter(AccessLevel.NONE)
|
||||||
}catch(YamlInvalidContentException | IOException e){
|
private String mkvtoolnixPath;
|
||||||
log.fatal("Config could not be loaded");
|
private String libraryPath;
|
||||||
e.printStackTrace();
|
|
||||||
|
public static ConfigUtil getInstance() {
|
||||||
|
if(configUtil == null) {
|
||||||
|
configUtil = new ConfigUtil();
|
||||||
}
|
}
|
||||||
return null;
|
return configUtil;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AttributeConfig createAttributeConfig(String key, YAML yaml) {
|
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()
|
||||||
|
.map(elem -> elem.replace(".audio", ""))
|
||||||
|
.map(elem -> createAttributeConfig(elem, config))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user