diff --git a/src/main/java/org/cryptomator/common/settings/NetworkSettings.java b/src/main/java/org/cryptomator/common/settings/NetworkSettings.java new file mode 100644 index 000000000..e529357ec --- /dev/null +++ b/src/main/java/org/cryptomator/common/settings/NetworkSettings.java @@ -0,0 +1,51 @@ +package org.cryptomator.common.settings; + +import javafx.beans.Observable; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.ObjectProperty; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; + +public class NetworkSettings { + + public final ObjectProperty mode; + public final StringProperty httpProxy; + public final IntegerProperty httpPort; + public final BooleanProperty samePortProxyForHttpHttps; + public final StringProperty httpsProxy; + public final IntegerProperty httpsPort; + + NetworkSettings(NetworkSettingsJson json){ + this.mode = new SimpleObjectProperty<>(this, "mode", json.mode); + this.httpProxy = new SimpleStringProperty(this, "httpProxy", json.httpProxy); + this.httpPort = new SimpleIntegerProperty(this, "httpPort", json.httpPort); + this.samePortProxyForHttpHttps = new SimpleBooleanProperty(this, "samePortProxyForHttpHttps", json.samePortProxyForHttpHttps); + this.httpsProxy = new SimpleStringProperty(this, "httpsProxy", json.httpsProxy); + this.httpsPort = new SimpleIntegerProperty(this, "httpsPort", json.httpsPort); + } + + NetworkSettingsJson serialized(){ + var json = new NetworkSettingsJson(); + json.mode = mode.get(); + json.httpProxy = httpProxy.get(); + json.httpPort = httpPort.get(); + json.samePortProxyForHttpHttps = samePortProxyForHttpHttps.get(); + json.httpsProxy = httpsProxy.get(); + json.httpsPort = httpsPort.get(); + return json; + } + + Observable[] observables() { + return new Observable[]{mode, httpProxy, httpPort,httpsProxy,httpsPort}; + } + + public enum ProxyMode { + NO, + SYSTEM, + MANUAL + } +} diff --git a/src/main/java/org/cryptomator/common/settings/NetworkSettingsJson.java b/src/main/java/org/cryptomator/common/settings/NetworkSettingsJson.java new file mode 100644 index 000000000..12da1c221 --- /dev/null +++ b/src/main/java/org/cryptomator/common/settings/NetworkSettingsJson.java @@ -0,0 +1,29 @@ +package org.cryptomator.common.settings; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +class NetworkSettingsJson { + + @JsonProperty("mode") + NetworkSettings.ProxyMode mode = NetworkSettings.ProxyMode.NO; + + @JsonProperty("httpProxy") + String httpProxy; + + @JsonProperty("httpPort") + int httpPort; + + @JsonProperty("samePortProxyForHttpHttps") + boolean samePortProxyForHttpHttps; + + @JsonProperty(value = "httpsProxy") + String httpsProxy; + + @JsonProperty("httpsPort") + int httpsPort; + +} diff --git a/src/main/java/org/cryptomator/common/settings/Settings.java b/src/main/java/org/cryptomator/common/settings/Settings.java index a54e71a4f..72856c186 100644 --- a/src/main/java/org/cryptomator/common/settings/Settings.java +++ b/src/main/java/org/cryptomator/common/settings/Settings.java @@ -47,6 +47,7 @@ public class Settings { static final boolean DEFAULT_SHOW_MINIMIZE_BUTTON = false; public static final Instant DEFAULT_TIMESTAMP = Instant.parse("2000-01-01T00:00:00Z"); public final ObservableList directories; + public final ObjectProperty networkSettings; public final BooleanProperty askedForUpdateCheck; public final BooleanProperty checkForUpdates; public final BooleanProperty startHidden; @@ -84,6 +85,7 @@ public class Settings { */ Settings(SettingsJson json) { this.directories = FXCollections.observableArrayList(VaultSettings::observables); + this.networkSettings = new SimpleObjectProperty<>(this, "networkSettings", new NetworkSettings(json.networkSettings)); this.askedForUpdateCheck = new SimpleBooleanProperty(this, "askedForUpdateCheck", json.askedForUpdateCheck); this.checkForUpdates = new SimpleBooleanProperty(this, "checkForUpdates", json.checkForUpdatesEnabled); this.startHidden = new SimpleBooleanProperty(this, "startHidden", json.startHidden); @@ -111,6 +113,7 @@ public class Settings { migrateLegacySettings(json); directories.addListener(this::somethingChanged); + networkSettings.addListener(this::somethingChanged); askedForUpdateCheck.addListener(this::somethingChanged); checkForUpdates.addListener(this::somethingChanged); startHidden.addListener(this::somethingChanged); @@ -165,6 +168,7 @@ public class Settings { SettingsJson serialized() { var json = new SettingsJson(); json.directories = directories.stream().map(VaultSettings::serialized).toList(); + json.networkSettings = networkSettings.get().serialized(); json.askedForUpdateCheck = askedForUpdateCheck.get(); json.checkForUpdatesEnabled = checkForUpdates.get(); json.startHidden = startHidden.get(); diff --git a/src/main/java/org/cryptomator/common/settings/SettingsJson.java b/src/main/java/org/cryptomator/common/settings/SettingsJson.java index 2ded82885..26f827266 100644 --- a/src/main/java/org/cryptomator/common/settings/SettingsJson.java +++ b/src/main/java/org/cryptomator/common/settings/SettingsJson.java @@ -15,6 +15,9 @@ class SettingsJson { @JsonProperty("directories") List directories = List.of(); + @JsonProperty("networkSettings") + NetworkSettingsJson networkSettings = new NetworkSettingsJson(); + @JsonProperty("writtenByVersion") String writtenByVersion;