diff --git a/app/src/main/java/com/tangem/data/network/ServerApiStellar.java b/app/src/main/java/com/tangem/data/network/ServerApiStellar.java index 18541956a1..503519f9be 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiStellar.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiStellar.java @@ -41,6 +41,12 @@ public class ServerApiStellar { private int requestsCount = 0; + private String currentURL; + + public String getCurrentURL() { + return currentURL; + } + public boolean isRequestsSequenceCompleted() { LOG.i(TAG, String.format("isRequestsSequenceCompleted: %s (%d requests left)", String.valueOf(requestsCount <= 0), requestsCount)); return requestsCount <= 0; @@ -82,9 +88,23 @@ public class ServerApiStellar { * @param ctx * @param stellarRequest */ + public void requestData(TangemContext ctx, StellarRequest.Base stellarRequest) { + requestData(ctx, stellarRequest, false); + } + + public void requestData(TangemContext ctx, StellarRequest.Base stellarRequest, boolean isRetry) { requestsCount++; LOG.i(TAG, String.format("New request[%d]: %s", requestsCount, stellarRequest.getClass().getSimpleName())); + + if (currentURL == null) { + if (ctx.getBlockchain() == Blockchain.Stellar) { + currentURL = ServerURL.API_STELLAR; + } else if (ctx.getBlockchain() == Blockchain.StellarTestNet) { + currentURL = ServerURL.API_STELLAR_TESTNET; + } + } + Observable stellarObserver = Observable.just(stellarRequest) .doOnEach(stellarRequest1 -> doStellarRequest(ctx, stellarRequest)) @@ -114,9 +134,14 @@ public class ServerApiStellar { requestsCount--; LOG.e(TAG, "requestData " + stellarRequest.getClass().getSimpleName() + " onError " + e.getMessage()); LOG.e(TAG, String.format("%d requests left in processing", requestsCount)); - stellarRequest.setError(ctx.getString(R.string.loaded_wallet_error_obtaining_blockchain_data)); - //setErrorOccurred(e.getMessage());//; - listener.onFail(stellarRequest); + + if (isRetry) { + stellarRequest.setError(ctx.getString(R.string.loaded_wallet_error_obtaining_blockchain_data)); + //setErrorOccurred(e.getMessage());//; + listener.onFail(stellarRequest); + } else { + retryRequest(ctx, stellarRequest); + } } /** @@ -128,7 +153,12 @@ public class ServerApiStellar { LOG.e(TAG, String.format("%d requests left in processing", requestsCount)); if (stellarRequest.getError() != null) { LOG.i(TAG, "requestData " + stellarRequest.getClass().getSimpleName() + " onComplete, error!=null"); - listener.onFail(stellarRequest); + + if (isRetry || stellarRequest.errorResponse.getCode() == 404) { + listener.onFail(stellarRequest); + } else { + retryRequest(ctx, stellarRequest); + } } else { LOG.e(TAG, "requestData " + stellarRequest.getClass().getSimpleName() + " onComplete, error==null"); listener.onSuccess(stellarRequest); @@ -144,10 +174,10 @@ public class ServerApiStellar { Server server; if (ctx.getBlockchain() == Blockchain.Stellar) { Network.usePublicNetwork(); - server = new Server(ServerURL.API_STELLAR); + server = new Server(currentURL); } else if (ctx.getBlockchain() == Blockchain.StellarTestNet) { Network.useTestNetwork(); - server = new Server(ServerURL.API_STELLAR_TESTNET); + server = new Server(currentURL); } else { throw new IOException("Wrong blockchain for ServerApiStellar"); } @@ -166,4 +196,9 @@ public class ServerApiStellar { } } + public void retryRequest (TangemContext ctx, StellarRequest.Base stellarRequest) { + currentURL = ServerURL.API_STELLAR_RESERVE; + requestData(ctx, stellarRequest, true); + } + } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/data/network/ServerURL.java b/app/src/main/java/com/tangem/data/network/ServerURL.java index 45515132d2..f1eda5d63e 100644 --- a/app/src/main/java/com/tangem/data/network/ServerURL.java +++ b/app/src/main/java/com/tangem/data/network/ServerURL.java @@ -11,8 +11,9 @@ class ServerURL { static final String API_BLOCKCYPHER = "https://api.blockcypher.com/"; static final String API_BINANCE = "https://dex.binance.org/"; static final String API_BINANCE_TESTNET = "https://testnet-dex.binance.org/"; - static final String API_MATIC_TESTNET = "https://testnet2.matic.network"; + static final String API_MATIC_TESTNET = "https://testnet2.matic.network/"; static final String API_STELLAR = "https://horizon.stellar.org/"; - static final String API_STELLAR_TESTNET = "https://horizon-testnet.stellar.org"; + static final String API_STELLAR_RESERVE = "https://horizon.sui.li/"; + static final String API_STELLAR_TESTNET = "https://horizon-testnet.stellar.org/"; static final String API_BLOCKCHAIN_INFO = "https://blockchain.info/"; } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java b/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java index e2940ab4d6..c72948bcdd 100644 --- a/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java +++ b/app/src/main/java/com/tangem/wallet/xlm/XlmEngine.java @@ -447,6 +447,7 @@ public class XlmEngine extends CoinEngine { StellarRequest.Balance balanceRequest = (StellarRequest.Balance) request; coinData.setAccountResponse(balanceRequest.accountResponse); + coinData.setValidationNodeDescription(serverApi.getCurrentURL()); if (serverApi.isRequestsSequenceCompleted()) { blockchainRequestsCallbacks.onComplete(!ctx.hasError());