diff --git a/src/main/java/com/sparrowwallet/sparrow/AppController.java b/src/main/java/com/sparrowwallet/sparrow/AppController.java index 1e619a5a..3be35431 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppController.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppController.java @@ -25,6 +25,7 @@ import com.sparrowwallet.sparrow.control.*; import com.sparrowwallet.sparrow.event.*; import com.sparrowwallet.sparrow.io.*; import com.sparrowwallet.sparrow.net.ElectrumServer; +import com.sparrowwallet.sparrow.net.ExchangeSource; import com.sparrowwallet.sparrow.net.MempoolRateSize; import com.sparrowwallet.sparrow.net.VersionCheckService; import com.sparrowwallet.sparrow.preferences.PreferencesDialog; diff --git a/src/main/java/com/sparrowwallet/sparrow/event/FiatCurrencySelectedEvent.java b/src/main/java/com/sparrowwallet/sparrow/event/FiatCurrencySelectedEvent.java index b0822837..fac04d0f 100644 --- a/src/main/java/com/sparrowwallet/sparrow/event/FiatCurrencySelectedEvent.java +++ b/src/main/java/com/sparrowwallet/sparrow/event/FiatCurrencySelectedEvent.java @@ -1,6 +1,6 @@ package com.sparrowwallet.sparrow.event; -import com.sparrowwallet.sparrow.io.ExchangeSource; +import com.sparrowwallet.sparrow.net.ExchangeSource; import java.util.Currency; diff --git a/src/main/java/com/sparrowwallet/sparrow/io/Config.java b/src/main/java/com/sparrowwallet/sparrow/io/Config.java index 9314060b..66816877 100644 --- a/src/main/java/com/sparrowwallet/sparrow/io/Config.java +++ b/src/main/java/com/sparrowwallet/sparrow/io/Config.java @@ -4,6 +4,7 @@ import com.google.gson.*; import com.sparrowwallet.drongo.BitcoinUnit; import com.sparrowwallet.sparrow.Mode; import com.sparrowwallet.sparrow.Theme; +import com.sparrowwallet.sparrow.net.ExchangeSource; import com.sparrowwallet.sparrow.wallet.FeeRateSelection; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/com/sparrowwallet/sparrow/io/ExchangeSource.java b/src/main/java/com/sparrowwallet/sparrow/net/ExchangeSource.java similarity index 83% rename from src/main/java/com/sparrowwallet/sparrow/io/ExchangeSource.java rename to src/main/java/com/sparrowwallet/sparrow/net/ExchangeSource.java index 07c17ad4..f9d4eec6 100644 --- a/src/main/java/com/sparrowwallet/sparrow/io/ExchangeSource.java +++ b/src/main/java/com/sparrowwallet/sparrow/net/ExchangeSource.java @@ -1,7 +1,9 @@ -package com.sparrowwallet.sparrow.io; +package com.sparrowwallet.sparrow.net; +import com.google.common.net.HostAndPort; import com.google.gson.Gson; import com.sparrowwallet.sparrow.event.ExchangeRatesUpdatedEvent; +import com.sparrowwallet.sparrow.io.Config; import javafx.concurrent.ScheduledService; import javafx.concurrent.Service; import javafx.concurrent.Task; @@ -11,6 +13,8 @@ import org.slf4j.LoggerFactory; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; +import java.net.InetSocketAddress; +import java.net.Proxy; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.*; @@ -48,8 +52,9 @@ public enum ExchangeSource { private CoinbaseRates getRates() { String url = "https://api.coinbase.com/v2/exchange-rates?currency=BTC"; + Proxy proxy = getProxy(); - try(InputStream is = new URL(url).openStream(); Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) { + try(InputStream is = (proxy == null ? new URL(url).openStream() : new URL(url).openConnection(proxy).getInputStream()); Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) { Gson gson = new Gson(); return gson.fromJson(reader, CoinbaseRates.class); } catch (Exception e) { @@ -78,8 +83,9 @@ public enum ExchangeSource { private CoinGeckoRates getRates() { String url = "https://api.coingecko.com/api/v3/exchange_rates"; + Proxy proxy = getProxy(); - try(InputStream is = new URL(url).openStream(); Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) { + try(InputStream is = (proxy == null ? new URL(url).openStream() : new URL(url).openConnection(proxy).getInputStream()); Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) { Gson gson = new Gson(); return gson.fromJson(reader, CoinGeckoRates.class); } catch (Exception e) { @@ -110,6 +116,17 @@ public enum ExchangeSource { } } + private static Proxy getProxy() { + Config config = Config.get(); + if(config.isUseProxy()) { + HostAndPort proxy = HostAndPort.fromString(config.getProxyServer()); + InetSocketAddress proxyAddress = new InetSocketAddress(proxy.getHost(), proxy.getPortOrDefault(ProxyTcpOverTlsTransport.DEFAULT_PROXY_PORT)); + return new Proxy(Proxy.Type.SOCKS, proxyAddress); + } + + return null; + } + @Override public String toString() { return name; diff --git a/src/main/java/com/sparrowwallet/sparrow/preferences/GeneralPreferencesController.java b/src/main/java/com/sparrowwallet/sparrow/preferences/GeneralPreferencesController.java index 011e960f..2bb6f241 100644 --- a/src/main/java/com/sparrowwallet/sparrow/preferences/GeneralPreferencesController.java +++ b/src/main/java/com/sparrowwallet/sparrow/preferences/GeneralPreferencesController.java @@ -8,7 +8,7 @@ import com.sparrowwallet.sparrow.event.FeeRateSelectionChangedEvent; import com.sparrowwallet.sparrow.event.FiatCurrencySelectedEvent; import com.sparrowwallet.sparrow.event.VersionCheckStatusEvent; import com.sparrowwallet.sparrow.io.Config; -import com.sparrowwallet.sparrow.io.ExchangeSource; +import com.sparrowwallet.sparrow.net.ExchangeSource; import com.sparrowwallet.sparrow.wallet.FeeRateSelection; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; diff --git a/src/main/java/com/sparrowwallet/sparrow/preferences/ServerPreferencesController.java b/src/main/java/com/sparrowwallet/sparrow/preferences/ServerPreferencesController.java index fda75b33..bf38f015 100644 --- a/src/main/java/com/sparrowwallet/sparrow/preferences/ServerPreferencesController.java +++ b/src/main/java/com/sparrowwallet/sparrow/preferences/ServerPreferencesController.java @@ -296,6 +296,10 @@ public class ServerPreferencesController extends PreferencesDetailController { @NotNull private ChangeListener getProxyListener(Config config) { return (observable, oldValue, newValue) -> { + if(oldValue.trim().equals(newValue.trim())) { + return; + } + String hostAsString = getHost(proxyHost.getText()); Integer portAsInteger = getPort(proxyPort.getText()); if(hostAsString != null && portAsInteger != null && isValidPort(portAsInteger)) { diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/PaymentController.java b/src/main/java/com/sparrowwallet/sparrow/wallet/PaymentController.java index 0754da6b..08f3a9d1 100644 --- a/src/main/java/com/sparrowwallet/sparrow/wallet/PaymentController.java +++ b/src/main/java/com/sparrowwallet/sparrow/wallet/PaymentController.java @@ -22,7 +22,7 @@ import com.sparrowwallet.sparrow.event.BitcoinUnitChangedEvent; import com.sparrowwallet.sparrow.event.ExchangeRatesUpdatedEvent; import com.sparrowwallet.sparrow.event.FiatCurrencySelectedEvent; import com.sparrowwallet.sparrow.io.Config; -import com.sparrowwallet.sparrow.io.ExchangeSource; +import com.sparrowwallet.sparrow.net.ExchangeSource; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java b/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java index 06ddbadc..7ebafbab 100644 --- a/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java +++ b/src/main/java/com/sparrowwallet/sparrow/wallet/SendController.java @@ -12,7 +12,7 @@ import com.sparrowwallet.sparrow.EventManager; import com.sparrowwallet.sparrow.control.*; import com.sparrowwallet.sparrow.event.*; import com.sparrowwallet.sparrow.io.Config; -import com.sparrowwallet.sparrow.io.ExchangeSource; +import com.sparrowwallet.sparrow.net.ExchangeSource; import com.sparrowwallet.sparrow.net.ElectrumServer; import com.sparrowwallet.sparrow.net.MempoolRateSize; import javafx.application.Platform; diff --git a/src/main/java/com/sparrowwallet/sparrow/wallet/TransactionsController.java b/src/main/java/com/sparrowwallet/sparrow/wallet/TransactionsController.java index 778e370d..092a39e0 100644 --- a/src/main/java/com/sparrowwallet/sparrow/wallet/TransactionsController.java +++ b/src/main/java/com/sparrowwallet/sparrow/wallet/TransactionsController.java @@ -9,7 +9,7 @@ import com.sparrowwallet.sparrow.control.CoinLabel; import com.sparrowwallet.sparrow.control.FiatLabel; import com.sparrowwallet.sparrow.control.TransactionsTreeTable; import com.sparrowwallet.sparrow.event.*; -import com.sparrowwallet.sparrow.io.ExchangeSource; +import com.sparrowwallet.sparrow.net.ExchangeSource; import javafx.collections.ListChangeListener; import javafx.fxml.FXML; import javafx.fxml.Initializable; diff --git a/src/main/resources/com/sparrowwallet/sparrow/preferences/general.fxml b/src/main/resources/com/sparrowwallet/sparrow/preferences/general.fxml index 972696cc..6cbfddaa 100644 --- a/src/main/resources/com/sparrowwallet/sparrow/preferences/general.fxml +++ b/src/main/resources/com/sparrowwallet/sparrow/preferences/general.fxml @@ -12,7 +12,7 @@ - +