From 1e7620452c946d93653b0095535b80fdfb05d391 Mon Sep 17 00:00:00 2001 From: Jafea7 Date: Mon, 2 Jun 2025 17:29:54 +1000 Subject: [PATCH] Update HelpTab.java --- .../src/main/java/ctbrec/ui/tabs/HelpTab.java | 57 +++++++++++++++---- common/src/main/java/ctbrec/WANIPFetcher.java | 39 +++++++++++++ 2 files changed, 84 insertions(+), 12 deletions(-) create mode 100644 common/src/main/java/ctbrec/WANIPFetcher.java diff --git a/client/src/main/java/ctbrec/ui/tabs/HelpTab.java b/client/src/main/java/ctbrec/ui/tabs/HelpTab.java index ea097625..f5df3cde 100644 --- a/client/src/main/java/ctbrec/ui/tabs/HelpTab.java +++ b/client/src/main/java/ctbrec/ui/tabs/HelpTab.java @@ -4,12 +4,13 @@ import ctbrec.Config; import ctbrec.OS; import ctbrec.docs.DocServer; import ctbrec.ui.DesktopIntegration; +import ctbrec.WANIPFetcher; import javafx.application.Platform; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.Button; -import javafx.scene.control.Tab; import javafx.scene.control.Label; +import javafx.scene.control.Tab; import javafx.scene.layout.BorderPane; import javafx.scene.layout.VBox; import lombok.extern.slf4j.Slf4j; @@ -23,33 +24,65 @@ public class HelpTab extends Tab { private boolean serverStarted = false; + private String getWanIp() { + try { + return WANIPFetcher.getWANIP(); + } catch (Exception e) { + return "Unavailable"; + } + } + public HelpTab() { setClosable(false); setText("Help"); + Label wanStaticLabel = new Label("WAN IP:"); + wanStaticLabel.setStyle("-fx-font-family: 'Arial'; -fx-font-size: 14px; -fx-font-weight: bold; -fx-alignment: center;"); + Label wanValueLabel = new Label(getWanIp()); + wanValueLabel.setStyle("-fx-font-family: 'Arial'; -fx-font-size: 14px; -fx-underline: true; -fx-alignment: center;"); + VBox wanLabelBox = new VBox(2); + wanLabelBox.setAlignment(Pos.CENTER); + wanLabelBox.getChildren().addAll(wanStaticLabel, wanValueLabel); + Button openHelp = new Button("Open Help"); + openHelp.setStyle("-fx-font-family: 'Arial'; -fx-font-size: 16px; -fx-font-weight: bold; -fx-text-fill: #ffffff; -fx-background-color: #4CAF50; -fx-padding: 15 30; -fx-border-radius: 5; -fx-background-radius: 5;"); + Button openLog = new Button("Open Log File"); - Button openCfg = new Button("Open config dir"); - openHelp.setPadding(new Insets(20)); - openLog.setPadding(new Insets(20)); - openCfg.setPadding(new Insets(20)); - Label logFilePathLabel = new Label("Log file: " + new File("ctbrec.log").getAbsolutePath()); + openLog.setStyle("-fx-font-family: 'Arial'; -fx-font-size: 16px; -fx-font-weight: bold; -fx-text-fill: #ffffff; -fx-background-color: #2196F3; -fx-padding: 15 30; -fx-border-radius: 5; -fx-background-radius: 5;"); + + Button openCfg = new Button("Open Config Dir"); + openCfg.setStyle("-fx-font-family: 'Arial'; -fx-font-size: 16px; -fx-font-weight: bold; -fx-text-fill: #ffffff; -fx-background-color: #FF9800; -fx-padding: 15 30; -fx-border-radius: 5; -fx-background-radius: 5;"); + File cfgDir = Config.getInstance().getConfigDir(); String path = (cfgDir != null) ? cfgDir.getAbsolutePath() : "Unknown"; - Label configPathLabel = new Label("Config dir: " + path); + Label configStaticLabel = new Label("Config Dir:"); + configStaticLabel.setStyle("-fx-font-family: 'Arial'; -fx-font-size: 14px; -fx-font-weight: bold; -fx-alignment: center;"); + Label configValueLabel = new Label(path); + configValueLabel.setStyle("-fx-font-family: 'Arial'; -fx-font-size: 14px; -fx-underline: true; -fx-alignment: center;"); + VBox configLabelBox = new VBox(2); + configLabelBox.setAlignment(Pos.CENTER); + configLabelBox.getChildren().addAll(configStaticLabel, configValueLabel); + Label logStaticLabel = new Label("Log File:"); + logStaticLabel.setStyle("-fx-font-family: 'Arial'; -fx-font-size: 14px; -fx-font-weight: bold; -fx-alignment: center;"); + Label logValueLabel = new Label(new File("ctbrec.log").getAbsolutePath()); + logValueLabel.setStyle("-fx-font-family: 'Arial'; -fx-font-size: 14px; -fx-underline: true; -fx-alignment: center;"); + VBox logLabelBox = new VBox(2); + logLabelBox.setAlignment(Pos.CENTER); + logLabelBox.getChildren().addAll(logStaticLabel, logValueLabel); + + // Create VBox for all components VBox vbox = new VBox(); - vbox.setAlignment(Pos.CENTER); // Center align the buttons - vbox.setSpacing(20); // Set a 20 pixel gap between the buttons - vbox.getChildren().addAll(openHelp, openCfg, configPathLabel, openLog, logFilePathLabel); + vbox.setAlignment(Pos.CENTER); + vbox.setSpacing(20); + vbox.getChildren().addAll(wanLabelBox, openHelp, configLabelBox, openCfg, logLabelBox, openLog); BorderPane layout = new BorderPane(); - - // Add the VBox to the center region of the BorderPane layout.setCenter(vbox); setContent(layout); + // Button actions remain unchanged openHelp.setOnAction(e -> { if (!serverStarted) { startDocumentationServer(); diff --git a/common/src/main/java/ctbrec/WANIPFetcher.java b/common/src/main/java/ctbrec/WANIPFetcher.java new file mode 100644 index 00000000..488bfc86 --- /dev/null +++ b/common/src/main/java/ctbrec/WANIPFetcher.java @@ -0,0 +1,39 @@ +package ctbrec; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URI; +import java.net.URL; + +public class WANIPFetcher { + + public static void main(String[] args) { + try { + String ip = getWANIP(); + System.out.println("Your WAN IP address is: " + ip); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static String getWANIP() throws Exception { + URI uri = new URI("https://icanhazip.com"); + URL url = uri.toURL(); // Convert URI to URL + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); + + BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); + String inputLine; + StringBuilder content = new StringBuilder(); + + while ((inputLine = in.readLine()) != null) { + content.append(inputLine); + } + + in.close(); + connection.disconnect(); + + return content.toString().trim(); + } +} \ No newline at end of file