diff --git a/.gitignore b/.gitignore index 2c402c4..eac5b51 100644 --- a/.gitignore +++ b/.gitignore @@ -37,4 +37,7 @@ build/ ### Mac OS ### .DS_Store -.idea/ \ No newline at end of file +.idea/ + +# mptv +config.json \ No newline at end of file diff --git a/pom.xml b/pom.xml index be9cde1..8e3b3a3 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,16 @@ 5.10.2 test + + com.fasterxml.jackson.core + jackson-databind + 2.17.0 + + + commons-cli + commons-cli + 1.6.0 + diff --git a/src/main/java/com/mykola2312/mptv/Config.java b/src/main/java/com/mykola2312/mptv/Config.java new file mode 100644 index 0000000..e8da9cf --- /dev/null +++ b/src/main/java/com/mykola2312/mptv/Config.java @@ -0,0 +1,22 @@ +package com.mykola2312.mptv; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.ObjectReader; + +import java.io.File; +import java.io.IOException; + +public class Config { + + public class Frame { + public short width; + public short height; + public boolean fullscreen; + + } + public Frame frame; + + public static Config loadConfig(String path) throws IOException { + return new ObjectMapper().readerFor(Config.class).readValue(new File(path)); + } +} diff --git a/src/main/java/com/mykola2312/mptv/Main.java b/src/main/java/com/mykola2312/mptv/Main.java index c91316d..6f143dd 100644 --- a/src/main/java/com/mykola2312/mptv/Main.java +++ b/src/main/java/com/mykola2312/mptv/Main.java @@ -1,10 +1,39 @@ package com.mykola2312.mptv; import com.mykola2312.mptv.ui.MainFrame; +import org.apache.commons.cli.*; + +import java.io.IOException; public class Main { public static void main(String[] args) { + final Options options = new Options(); + options.addOption(Option + .builder("c") + .longOpt("config") + .required(false) + .hasArg() + .build()); + CommandLine cmd; + try { + cmd = new DefaultParser().parse(options, args); + } catch (ParseException e) { + System.err.println(e.toString()); + System.exit(1); + return; + } + + final String configPath = cmd.hasOption('c') ? cmd.getOptionValue('c') : "config.json"; + Config config; + try { + config = Config.loadConfig(configPath); + } catch (IOException e) { + System.err.printf("failed to read config: %s\n", e.toString()); + System.exit(1); + return; + } + MainFrame frame = new MainFrame(); - frame.create(); + frame.create(config.frame.width, config.frame.height, config.frame.fullscreen); } } diff --git a/src/main/java/com/mykola2312/mptv/ui/MainFrame.java b/src/main/java/com/mykola2312/mptv/ui/MainFrame.java index 1d4c91e..9e4ad51 100644 --- a/src/main/java/com/mykola2312/mptv/ui/MainFrame.java +++ b/src/main/java/com/mykola2312/mptv/ui/MainFrame.java @@ -3,16 +3,23 @@ package com.mykola2312.mptv.ui; import com.mykola2312.mptv.I18n; import javax.swing.*; +import java.awt.*; public class MainFrame { private JFrame frame; - public void create() { + public void create(short width, short height, boolean fullscreen) { this.frame = new JFrame(I18n.get("MainFrame_Title")); - frame.setUndecorated(true); - frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE); - frame.setExtendedState(JFrame.MAXIMIZED_BOTH); + if (fullscreen) { + frame.setUndecorated(true); + frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE); + frame.setExtendedState(JFrame.MAXIMIZED_BOTH); + } else { + Dimension size = new Dimension(width, height); + frame.setPreferredSize(size); + frame.setSize(size); + } frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }