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