From 184a75752fde10fc2bc46131498fed8a76cd06d5 Mon Sep 17 00:00:00 2001
From: mykola2312 <49044616+mykola2312@users.noreply.github.com>
Date: Mon, 8 Apr 2024 12:02:44 +0300
Subject: [PATCH] implement json configuration
---
.gitignore | 5 ++-
pom.xml | 10 ++++++
src/main/java/com/mykola2312/mptv/Config.java | 22 +++++++++++++
src/main/java/com/mykola2312/mptv/Main.java | 31 ++++++++++++++++++-
.../com/mykola2312/mptv/ui/MainFrame.java | 15 ++++++---
5 files changed, 77 insertions(+), 6 deletions(-)
create mode 100644 src/main/java/com/mykola2312/mptv/Config.java
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);
}