diff --git a/pom.xml b/pom.xml
index 09e2baa..c080342 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,27 +72,15 @@
maven-surefire-plugin
2.22.2
-
- org.codehaus.mojo
- ideauidesigner-maven-plugin
- 1.0-beta-1
-
-
-
- javac2
-
-
-
-
-
- true
- true
- true
-
-
+
+
+ pcgf-repo
+ https://repo.pcgamingfreaks.at/repository/maven-everything/
+
+
@@ -146,7 +134,7 @@
com.fasterxml.jackson.core
jackson-databind
- 2.9.10.1
+ 2.9.10.3
@@ -170,6 +158,11 @@
test
+
+ at.pcgamingfreaks
+ YAML-Parser
+ 2.0-SNAPSHOT
+
\ No newline at end of file
diff --git a/src/main/java/GUI.java b/src/main/java/GUI.java
index 6538719..b544f49 100644
--- a/src/main/java/GUI.java
+++ b/src/main/java/GUI.java
@@ -16,20 +16,15 @@ public class GUI {
private String path;
private JButton openFileBrowser;
private JButton startOperation;
- private JButton openProperties;
- private JTextPane outputArea;
public GUI() {
JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
frame.setTitle("MKV Audio and Subtitle Changer");
- frame.setSize(500, 300);
+ frame.setSize(500, 75);
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- JPanel top = new JPanel(new GridLayout(1, 3, 20, 20));
-
- outputArea = new JTextPane();
- outputArea.setEditable(false);
+ JPanel top = new JPanel(new GridLayout(1, 2, 20, 20));
openFileBrowser = new JButton("Browse directory");
openFileBrowser.addActionListener(new ActionListener() {
@@ -38,7 +33,7 @@ public class GUI {
JFileChooser fileChooser = new JFileChooser();
try{
if(! readFile("lastDir", Charset.defaultCharset()).isEmpty()){
- String temp = readFile("dir.txt", Charset.defaultCharset());
+ String temp = readFile("lastDir", Charset.defaultCharset());
fileChooser.setCurrentDirectory(new File(temp));
}
}catch(IOException ie){
@@ -61,22 +56,20 @@ public class GUI {
startOperation.setEnabled(true);
}
}catch(NullPointerException ne){
- outputArea.setText("File or directory not found!\n" + (outputArea.getText() == null ? "" : outputArea.getText()));
+ System.out.println("File or directory not found!");
log.error("File or directory not found!", ne);
}
}
});
- openProperties = new JButton("Open properties");
- openProperties.setEnabled(false);
-
startOperation = new JButton("Start updating");
startOperation.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
QueryBuilder queryBuilder = new QueryBuilder();
- if(queryBuilder.executeUpdateOnAllFiles(path, outputArea)){
- outputArea.setText("All files updated!\n" + (outputArea.getText() == null ? "" : outputArea.getText()));
+ if(queryBuilder.executeUpdateOnAllFiles(path)){
+ log.info("All files updated!");
+ System.out.println("All files updated!");
}
}
});
@@ -84,10 +77,8 @@ public class GUI {
top.add(openFileBrowser);
top.add(startOperation);
- top.add(openProperties);
frame.add(top, BorderLayout.NORTH);
- frame.add(outputArea);
frame.setVisible(true);
}
diff --git a/src/main/java/config/CustomOutputStream.java b/src/main/java/config/CustomOutputStream.java
new file mode 100644
index 0000000..f6d5db2
--- /dev/null
+++ b/src/main/java/config/CustomOutputStream.java
@@ -0,0 +1,21 @@
+package config;
+
+import javax.swing.*;
+import java.io.IOException;
+import java.io.OutputStream;
+
+public class CustomOutputStream extends OutputStream {
+ private JTextArea textArea;
+
+ public CustomOutputStream(JTextArea textArea) {
+ this.textArea = textArea;
+ }
+
+ @Override
+ public void write(int b) throws IOException {
+ // redirects data to the text area
+ textArea.append(String.valueOf((char) b));
+ // scrolls the text area to the end of data
+ textArea.setCaretPosition(textArea.getDocument().getLength());
+ }
+}
diff --git a/src/main/java/query/QueryBuilder.java b/src/main/java/query/QueryBuilder.java
index 4362659..0bf5996 100644
--- a/src/main/java/query/QueryBuilder.java
+++ b/src/main/java/query/QueryBuilder.java
@@ -1,11 +1,13 @@
package query;
-import at.pcgamingfreaks.mkvaudiosubtitlechanger.model.FileAttribute;
+import at.pcgamingfreaks.yaml.YAML;
+import at.pcgamingfreaks.yaml.YamlInvalidContentException;
import com.fasterxml.jackson.databind.ObjectMapper;
import config.MKVToolProperties;
import lombok.extern.log4j.Log4j2;
+import model.FileAttribute;
-import javax.swing.*;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
@@ -24,7 +26,7 @@ public class QueryBuilder {
public QueryBuilder() {
}
- public boolean executeUpdateOnAllFiles(String path, JTextPane outputArea) {
+ public boolean executeUpdateOnAllFiles(String path) {
List allFilePaths = getAllFilesFromDirectory(path);
if(allFilePaths == null){
log.error("Couldn't process path!");
@@ -32,7 +34,6 @@ public class QueryBuilder {
}
for(String filePath : allFilePaths){
updateAttributes(filePath, queryAttributes(filePath));
- outputArea.setText("Success: " + filePath + "\n" + outputArea.getPage());
}
return true;
}
@@ -75,40 +76,85 @@ public class QueryBuilder {
}
private void updateAttributes(String path, List fileAttributes) {
- if(fileAttributes.size() > 2){
- StringBuffer stringBuffer = new StringBuffer("\"");
- stringBuffer.append(MKVToolProperties.getInstance().getMkvpropeditPath());
- stringBuffer.append("\" \"");
- stringBuffer.append(path);
- stringBuffer.append("\" ");
- int c = 0;
- int d = 0;
+ YAML yaml;
+ List subtitles = null;
+ List audios = null;
- for(FileAttribute attributes : fileAttributes){
- if(attributes.isDefaultTrack() && "audio".equals(attributes.getType())){
- stringBuffer.append("--edit track:" + attributes.getId() + " --set flag-default=0 ");
+ try{
+ yaml = new YAML(new File("./src/main/resources/config.yaml"));
+ subtitles = yaml.getStringList("subtitle", null);
+ audios = yaml.getStringList("audio", null);
+
+
+ if(fileAttributes.size() > 2 && subtitles != null && audios != null){
+
+
+ int oldAudioDefault = - 1;
+ int oldSubtitleDefault = - 1;
+ int audioDefault = - 1;
+ int subtitleDefault = - 1;
+ int subtitleIndex = - 1;
+ int audioIndex = - 1;
+
+ for(FileAttribute attribute : fileAttributes){
+ if(subtitles.contains(attribute.getLanguage()) && "subtitles".equals(attribute.getType())){
+ for(int i = 0; i < subtitles.size(); i++){
+ if(subtitles.get(i).equals(attribute.getLanguage())){
+ if(subtitleIndex == - 1 || i < subtitleIndex){
+ subtitleIndex = i;
+ subtitleDefault = attribute.getId();
+ }
+ }
+ }
+ }
+ if(audios.contains(attribute.getLanguage()) && "audio".equals(attribute.getType())){
+ for(int i = 0; i < audios.size(); i++){
+ if(audios.get(i).equals(attribute.getLanguage())){
+ if(audioIndex == - 1 || i < audioIndex){
+ audioIndex = i;
+ audioDefault = attribute.getId();
+ }
+ }
+ }
+ }
+
+ if(attribute.isDefaultTrack() && "audio".equals(attribute.getType())){
+ oldAudioDefault = attribute.getId();
+ }
+ if(attribute.isDefaultTrack() && "subtitles".equals(attribute.getType())){
+ oldSubtitleDefault = attribute.getId();
+ }
}
- if(attributes.isDefaultTrack() && "subtitles".equals(attributes.getType())){
- stringBuffer.append("--edit track:" + attributes.getId() + " --set flag-default=0 ");
+ if(oldAudioDefault == audioDefault && oldSubtitleDefault == subtitleDefault){
+ return;
}
- if("jpn".equals(attributes.getLanguage()) && "audio".equals(attributes.getType()) && c == 0){
- c++;
- stringBuffer.append("--edit track:" + attributes.getId() + " --set flag-default=1 ");
+ if(audioIndex != 0){
+ subtitleDefault = oldSubtitleDefault;
}
- if("eng".equals(attributes.getLanguage()) && "subtitles".equals(attributes.getType()) && d == 0){
- d++;
- stringBuffer.append("--edit track:" + attributes.getId() + " --set flag-default=1 ");
+
+ StringBuilder stringBuffer = new StringBuilder("\"");
+ stringBuffer.append(MKVToolProperties.getInstance().getMkvpropeditPath());
+ stringBuffer.append("\" \"").append(path).append("\" ");
+ stringBuffer.append("--edit track:").append(oldSubtitleDefault).append(" --set flag-default=0 ");
+ stringBuffer.append("--edit track:").append(oldAudioDefault).append(" --set flag-default=0 ");
+ stringBuffer.append("--edit track:").append(subtitleDefault).append(" --set flag-default=1 ");
+ stringBuffer.append("--edit track:").append(audioDefault).append(" --set flag-default=1 ");
+
+ try{
+ Runtime.getRuntime().exec(stringBuffer.toString());
+ }catch(IOException e){
+ log.error("Couldn't make changes to file");
+
}
+ log.info("Success: " + path);
+
+ }else{
+ log.info("There were not enough lines provided to make any changes to the file");
}
- try{
- Runtime.getRuntime().exec(stringBuffer.toString());
- }catch(IOException e){
- log.error("Couldn't make changes to file");
-
- }
- }else{
- log.info("There were not enough lines provided to make any changes to the file");
+ }catch(YamlInvalidContentException | IOException e){
+ log.error("Failure: " + path);
+ log.error(e.getMessage());
}
}
}
diff --git a/src/main/resources/config.yaml b/src/main/resources/config.yaml
new file mode 100644
index 0000000..341f395
--- /dev/null
+++ b/src/main/resources/config.yaml
@@ -0,0 +1,7 @@
+audio:
+ - jpn
+ - ger
+ - eng
+subtitle:
+ - ger
+ - eng
\ No newline at end of file