Skip to content

Commit

Permalink
Merge pull request #24 from Zmax0/dev/2.4.4
Browse files Browse the repository at this point in the history
2.4.4
  • Loading branch information
Zmax0 committed Jun 3, 2024
2 parents 22f18dc + d260d00 commit b5b0208
Show file tree
Hide file tree
Showing 20 changed files with 239 additions and 64 deletions.
8 changes: 4 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>urban-spork</groupId>
<artifactId>urban-spork</artifactId>
<version>2.4.3</version>
<version>2.4.4</version>
<packaging>pom</packaging>
<modules>
<module>urban-spork-common</module>
Expand All @@ -14,7 +14,7 @@
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<urban-spork.version>2.4.3</urban-spork.version>
<urban-spork.version>2.4.4</urban-spork.version>
<maven-surefire-plugin.versioin>3.2.3</maven-surefire-plugin.versioin>
<maven-jar-plugin.version>3.3.0</maven-jar-plugin.version>
<maven-compiler-plugin.version>3.12.1</maven-compiler-plugin.version>
Expand All @@ -24,7 +24,7 @@
<jackson.version>2.16.1</jackson.version>
<logback.version>1.4.14</logback.version>
<netty.version>4.1.104.Final</netty.version>
<bouncycastle.version>1.78</bouncycastle.version>
<bouncycastle.version>2.73.6</bouncycastle.version>
<javafx.version>21.0.1</javafx.version>
<jfoenix.version>9.0.10</jfoenix.version>
</properties>
Expand Down Expand Up @@ -78,7 +78,7 @@
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId>
<artifactId>bcprov-lts8on</artifactId>
<version>${bouncycastle.version}</version>
</dependency>
<dependency>
Expand Down
2 changes: 1 addition & 1 deletion urban-spork-client-gui/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<parent>
<groupId>urban-spork</groupId>
<artifactId>urban-spork</artifactId>
<version>2.4.3</version>
<version>2.4.4</version>
</parent>
<groupId>urban-spork-client-gui</groupId>
<artifactId>urban-spork-client-gui</artifactId>
Expand Down
36 changes: 36 additions & 0 deletions urban-spork-client-gui/resource/console.css
Original file line number Diff line number Diff line change
Expand Up @@ -150,3 +150,39 @@ GridPane {
.text-area .content {
-fx-background-color: #000;
}

.chart-series-line {
-fx-stroke-width: 2;
}

.chart-legend {
-fx-background-color: transparent;
}

.chart-legend-item-symbol {
-fx-background-radius: 0;
}

.chart-plot-background {
-fx-background-color: transparent;
}

.default-color0.chart-series-line {
-fx-stroke: #0a84ff;
}

.default-color1.chart-series-line {
-fx-stroke: #ff9f0a;
}

.default-color0.chart-line-symbol {
-fx-background-color: #0a84ff;
-fx-shape: "M440-800v487L216-537l-56 57 320 320 320-320-56-57-224 224v-487h-80Z";
-fx-padding: 8;
}

.default-color1.chart-line-symbol {
-fx-background-color: #ff9f0a;
-fx-shape: "M440-160v-487L216-423l-56-57 320-320 320 320-56 57-224-224v487h-80Z";
-fx-padding: 8;
}
1 change: 1 addition & 0 deletions urban-spork-client-gui/resource/language_en.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ tray.menu.language=Language
tray.menu.servers=Servers
console.tab0.text=Server Configuration
console.tab1.text=Log
console.tab2.text=Network
console.button.new=New
console.button.import=Import...
console.button.share=Share...
Expand Down
1 change: 1 addition & 0 deletions urban-spork-client-gui/resource/language_zh.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ tray.menu.language=\u8BED\u8A00
tray.menu.servers=\u670D\u52A1\u5668
console.tab0.text=\u914D\u7F6E\u670D\u52A1\u5668
console.tab1.text=\u67E5\u770B\u65E5\u5FD7
console.tab2.text=\u7F51\u7EDC\u8FDE\u63A5
console.button.new=\u65B0\u5EFA
console.button.import=\u5BFC\u5165
console.button.share=\u5206\u4EAB
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

public final class Main {
public static void main(String[] args) {
System.setProperty("javafx.preloader", "com.urbanspork.client.gui.console.Console");
System.setProperty("javafx.preloader", "com.urbanspork.client.gui.console.ConsolePreloader");
Application.launch(Console.class, args);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@
import com.jfoenix.controls.JFXTabPane;
import com.jfoenix.controls.JFXTextField;
import com.jfoenix.validation.RequiredFieldValidator;
import com.urbanspork.client.Client;
import com.urbanspork.client.gui.Resource;
import com.urbanspork.client.gui.console.tray.ConsoleTray;
import com.urbanspork.client.gui.tray.Tray;
import com.urbanspork.client.gui.console.widget.ConsoleButton;
import com.urbanspork.client.gui.console.widget.ConsoleColumnConstraints;
import com.urbanspork.client.gui.console.widget.ConsoleLabel;
Expand All @@ -23,22 +22,24 @@
import com.urbanspork.client.gui.console.widget.NumericTextField;
import com.urbanspork.client.gui.console.widget.ServerConfigListView;
import com.urbanspork.client.gui.i18n.I18N;
import com.urbanspork.client.gui.tray.Unsupported;
import com.urbanspork.client.gui.traffic.TrafficCounterLineChart;
import com.urbanspork.client.gui.tray.Tray;
import com.urbanspork.common.codec.CipherKind;
import com.urbanspork.common.config.ClientConfig;
import com.urbanspork.common.config.ConfigHandler;
import com.urbanspork.common.config.ServerConfig;
import com.urbanspork.common.config.shadowsocks.ShareableServerConfig;
import com.urbanspork.common.protocol.Protocol;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.application.Preloader;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Pos;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
Expand All @@ -60,22 +61,22 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.awt.*;
import java.io.IOException;
import java.net.URI;
import java.util.Arrays;
import java.util.List;

public class Console extends Preloader {
public class Console extends Application {
private static final Logger logger = LoggerFactory.getLogger(Console.class);
private static final ClientConfig CLIENT_CONFIG = Resource.config();
private static final RequiredFieldValidator REQUIRED_FIELD_VALIDATOR = new RequiredFieldValidator(I18N.getString(I18N.CONSOLE_VALIDATOR_REQUIRED_FIELD_MESSAGE));

private Tray tray;
private Proxy proxy;
Tray tray;
Proxy proxy;
ObjectProperty<Client.Instance> instance = new SimpleObjectProperty<>();

private Stage primaryStage;
private Parent root;
private JFXTabPane root;
private TextArea logTextarea;
private JFXListView<ServerConfig> serverConfigJFXListView;
private Button newServerConfigButton;
Expand All @@ -98,16 +99,6 @@ public class Console extends Preloader {
private NumericTextField clientConfigPortTextField;
private ObservableList<ServerConfig> serverConfigObservableList;

@Override
public void handleStateChangeNotification(StateChangeNotification info) {
if (info.getType().equals(StateChangeNotification.Type.BEFORE_INIT)
&& info.getApplication() instanceof Console console) {
console.tray = SystemTray.isSupported() ? new ConsoleTray(console) : new Unsupported();
console.proxy = new Proxy(console.tray);
console.proxy.launch();
}
}

@Override
public void init() {
initModule();
Expand Down Expand Up @@ -245,7 +236,7 @@ public void confirmServerConfig() {
CLIENT_CONFIG.setPort(clientConfigPortTextField.getIntValue());
CLIENT_CONFIG.setIndex(selectionModel.getSelectedIndex());
saveConfig();
proxy.launch();
launchProxy();
}
}

Expand Down Expand Up @@ -333,37 +324,51 @@ private JFXTabPane initTabPane() {
Tab tab0 = new Tab(I18N.getString(I18N.CONSOLE_TAB0_TEXT));
tab0.setContent(gridPane0);
tab0.setClosable(false);
// ====================
// tab1 gridPane1
// ====================
GridPane gridPane1 = new GridPane();
// ----------- ColumnConstraints -----------
ObservableList<ColumnConstraints> cConstraints1 = gridPane1.getColumnConstraints();
ColumnConstraints cContainer2 = new ColumnConstraints();
cContainer2.setHgrow(Priority.ALWAYS);
cConstraints1.add(cGap1);
cConstraints1.add(cContainer2);
cConstraints1.add(cGap1);
// ----------- RowConstraints -----------
ObservableList<RowConstraints> rConstraints1 = gridPane1.getRowConstraints();
rConstraints1.add(rGap1);
rConstraints1.add(rContainer2);
rConstraints1.add(rGap1);
// grid children
gridPane1.add(logTextarea, 1, 1);
// tab1
Tab tab1 = new Tab(I18N.getString(I18N.CONSOLE_TAB1_TEXT));
tab1.setContent(gridPane1);
tab1.setClosable(false);
Tab tab1 = newSingleNodeTab(logTextarea, I18N.getString(I18N.CONSOLE_TAB1_TEXT));
//
Tab tab2 = newSingleNodeTab(new TrafficCounterLineChart(instance).init(), I18N.getString(I18N.CONSOLE_TAB2_TEXT));
// ====================
// main tab pane
// ====================
JFXTabPane tabPane = new JFXTabPane();
tabPane.getTabs().addAll(tab0, tab1);
tabPane.getTabs().addAll(tab0, tab1, tab2);
tabPane.getStylesheets().add(Resource.CONSOLE_CSS.toExternalForm());
return tabPane;
}

private Tab newSingleNodeTab(Node node, String tabTitle) {
// ====================
// tab gridPane
// ====================
GridPane gridPane = new GridPane();
// ----------- GapConstraints -----------
ColumnConstraints cGap = new ColumnConstraints(10);
RowConstraints rGap = new RowConstraints(10);
// ----------- NodeConstraints -----------
ColumnConstraints cAlways = new ColumnConstraints();
cAlways.setHgrow(Priority.ALWAYS);
RowConstraints rAlways = new RowConstraints();
rAlways.setVgrow(Priority.ALWAYS);
// ----------- ColumnConstraints -----------
ObservableList<ColumnConstraints> columnConstraints = gridPane.getColumnConstraints();
columnConstraints.add(cGap);
columnConstraints.add(cAlways);
columnConstraints.add(cGap);
// ----------- RowConstraints -----------
ObservableList<RowConstraints> rowConstraints = gridPane.getRowConstraints();
rowConstraints.add(rGap);
rowConstraints.add(rAlways);
rowConstraints.add(rGap);
// grid children
gridPane.add(node, 1, 1);
// tab
Tab tab = new Tab(tabTitle);
tab.setContent(gridPane);
tab.setClosable(false);
return tab;
}

private void addGridPane0Children(GridPane gridPane0) {
// ---------- Grid Children ----------
gridPane0.add(wrap(moveUpServerConfigButton), 1, 13);
Expand Down Expand Up @@ -424,7 +429,7 @@ private void initClientConfigPortTextField() {
int port = clientConfigPortTextField.getIntValue();
if (CLIENT_CONFIG.getPort() != port) {
CLIENT_CONFIG.setPort(port);
proxy.launch();
launchProxy();
saveConfig();
}
});
Expand Down Expand Up @@ -596,6 +601,6 @@ private void saveConfig() {
}

public void launchProxy() {
proxy.launch();
proxy.launch().ifPresent(instance::set);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.urbanspork.client.gui.console;

import com.urbanspork.client.gui.console.tray.ConsoleTray;
import com.urbanspork.client.gui.tray.Unsupported;
import javafx.application.Preloader;
import javafx.stage.Stage;

import java.awt.*;

public class ConsolePreloader extends Preloader {
@Override
public void handleStateChangeNotification(StateChangeNotification info) {
if (info.getType().equals(StateChangeNotification.Type.BEFORE_INIT)
&& info.getApplication() instanceof Console console) {
console.tray = SystemTray.isSupported() ? new ConsoleTray(console) : new Unsupported();
console.proxy = new Proxy(console.tray);
console.proxy.launch().ifPresent(console.instance::set);
}
}

@Override
public void start(Stage primaryStage) {
// skip
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.urbanspork.common.config.ServerConfig;

import java.awt.TrayIcon.MessageType;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
Expand All @@ -23,11 +24,11 @@ public Proxy(Tray tray) {
this.tray = tray;
}

public void launch() {
public Optional<Client.Instance> launch() {
ServerConfig current = config.getCurrent();
if (current == null) {
tray.displayMessage("Proxy is not running", "Please set up a proxy server first", MessageType.INFO);
return;
return Optional.empty();
}
if (client != null) {
client.close();
Expand All @@ -46,6 +47,7 @@ public void launch() {
tray.displayMessage("Error", message, MessageType.ERROR);
tray.setToolTip(message);
}
return client == null ? Optional.empty() : Optional.of(client);
}

public void exit() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.urbanspork.common.config.ClientConfig;
import com.urbanspork.common.config.ConfigHandler;
import com.urbanspork.common.config.ServerConfig;
import javafx.application.Platform;

import javax.swing.*;
import java.awt.TrayIcon.MessageType;
Expand Down Expand Up @@ -47,7 +48,11 @@ private ItemListener createItemListener(JRadioButtonMenuItem item, ClientConfig
return event -> {
if (item.isSelected()) {
config.setIndex(index);
console.getServerConfigJFXListView().getSelectionModel().select(index);
if (Platform.isFxApplicationThread()) {
console.getServerConfigJFXListView().getSelectionModel().select(index);
} else {
Platform.runLater(() -> console.getServerConfigJFXListView().getSelectionModel().select(index));
}
try {
ConfigHandler.DEFAULT.save(config);
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public interface I18N {
String TRAY_MENU_SERVERS = "tray.menu.servers";
String CONSOLE_TAB0_TEXT = "console.tab0.text";
String CONSOLE_TAB1_TEXT = "console.tab1.text";
String CONSOLE_TAB2_TEXT = "console.tab2.text";
String CONSOLE_BUTTON_NEW = "console.button.new";
String CONSOLE_BUTTON_IMPORT = "console.button.import";
String CONSOLE_BUTTON_SHARE = "console.button.share";
Expand Down
Loading

0 comments on commit b5b0208

Please sign in to comment.