Updated on 2026-08-14

This commit is contained in:
Tangem 2019-09-24 12:32:38 +00:00
commit 1617fd249d
3 changed files with 45 additions and 8 deletions

View file

@ -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<StellarRequest.Base> 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);
}
}

View file

@ -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/";
}

View file

@ -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());