diff --git a/src/main/java/GUI.form b/src/main/java/GUI.form new file mode 100644 index 0000000..94c37be --- /dev/null +++ b/src/main/java/GUI.form @@ -0,0 +1,13 @@ + +
diff --git a/src/main/java/GUI.java b/src/main/java/GUI.java new file mode 100644 index 0000000..92caeee --- /dev/null +++ b/src/main/java/GUI.java @@ -0,0 +1,99 @@ +import lombok.extern.log4j.Log4j2; +import model.FileAttribute; +import query.QueryBuilder; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.*; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Paths; + +@Log4j2 +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.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); + + JPanel top = new JPanel(new GridLayout(1, 3, 20, 20)); + + outputArea = new JTextPane(); + outputArea.setEditable(false); + + openFileBrowser = new JButton("Browse directory"); + openFileBrowser.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fileChooser = new JFileChooser(); + try{ + if(! readFile("lastDir", Charset.defaultCharset()).isEmpty()){ + String temp = readFile("dir.txt", Charset.defaultCharset()); + fileChooser.setCurrentDirectory(new File(temp)); + } + }catch(IOException ie){ + log.info("Couldn't start FileChooser with default path"); + } + fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); + fileChooser.setMultiSelectionEnabled(false); + fileChooser.setPreferredSize(new Dimension(600, 500)); + Action details = fileChooser.getActionMap().get("viewTypeDetails"); + details.actionPerformed(null); + fileChooser.showOpenDialog(null); + try{ + if(FileAttribute.pathIsValid(fileChooser.getSelectedFile().getAbsolutePath())){ + path = fileChooser.getSelectedFile().getAbsolutePath(); + try(PrintWriter out = new PrintWriter("lastDir", "UTF-8")){ + out.print(fileChooser.getCurrentDirectory()); + }catch(FileNotFoundException | UnsupportedEncodingException fne){ + log.error(fne); + } + startOperation.setEnabled(true); + } + }catch(NullPointerException ne){ + outputArea.setText("File or directory not found!\n" + (outputArea.getText() == null ? "" : outputArea.getText())); + 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())); + } + } + }); + startOperation.setEnabled(false); + + top.add(openFileBrowser); + top.add(startOperation); + top.add(openProperties); + + frame.add(top, BorderLayout.NORTH); + frame.add(outputArea); + + frame.setVisible(true); + } + + static String readFile(String path, Charset encoding) throws IOException { + byte[] encoded = Files.readAllBytes(Paths.get(path)); + return new String(encoded, encoding); + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index f61cb42..4283ea4 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,8 +1,5 @@ import config.MKVToolProperties; import lombok.extern.log4j.Log4j2; -import query.QueryBuilder; - -import java.util.Scanner; @Log4j2 public class Main { @@ -10,11 +7,7 @@ public class Main { public static void main(String[] args) { MKVToolProperties.getInstance().defineMKVToolNixPath(); - Scanner input = new Scanner(System.in); - log.info("Please enter path to file"); - String path = input.nextLine(); - QueryBuilder queryBuilder = new QueryBuilder(); - queryBuilder.executeUpdateOnAllFiles(path); + GUI gui = new GUI(); } diff --git a/src/main/java/model/FileAttribute.java b/src/main/java/model/FileAttribute.java index f6a6149..00c3dbc 100644 --- a/src/main/java/model/FileAttribute.java +++ b/src/main/java/model/FileAttribute.java @@ -1,7 +1,18 @@ package model; import lombok.Getter; +import lombok.extern.log4j.Log4j2; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@Log4j2 @Getter public class FileAttribute { private int id; @@ -19,4 +30,28 @@ public class FileAttribute { this.forcedTrack = forcedTrack; this.type = type; } + + public static boolean pathIsValid(String path) { + File file = new File(path); + if(file.isFile()){ + return file.getAbsolutePath().endsWith(".mkv"); + } + if(file.isDirectory()){ + try(Stream