diff --git a/app/src/main/java/com/tangem/data/network/ServerApiAdalite.java b/app/src/main/java/com/tangem/data/network/ServerApiAdalite.java index 45af4bafe4..564f68a4f5 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiAdalite.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiAdalite.java @@ -26,7 +26,14 @@ public class ServerApiAdalite { private int requestsCount = 0; - public static String lastNode; + private final String adaliteURL1 = "https://explorer2.adalite.io"; //TODO: make random selection, add more?, move + private final String adaliteURL2 = "https://nodes.southeastasia.cloudapp.azure.com"; + + private String currentURL = adaliteURL1; + + public String getCurrentURL() { + return currentURL; + } public boolean isRequestsSequenceCompleted() { Log.i(TAG, String.format("isRequestsSequenceCompleted: %s (%d requests left)", String.valueOf(requestsCount <= 0), requestsCount)); @@ -50,12 +57,14 @@ public class ServerApiAdalite { } public void requestData(String method, String wallet, String tx) { + requestData(method, wallet, tx, false); + } + + public void requestData(String method, String wallet, String tx, boolean isRetry) { requestsCount++; - String adaliteURL = "https://explorer2.adalite.io"; //TODO: make random selection - this.lastNode = adaliteURL; //TODO: show node instead of URL Retrofit retrofitAdalite = new Retrofit.Builder() - .baseUrl(adaliteURL) + .baseUrl(currentURL) .addConverterFactory(ScalarsConverterFactory.create()) .addConverterFactory(GsonConverterFactory.create()) .build(); @@ -75,16 +84,26 @@ public class ServerApiAdalite { responseListener.onSuccess(method, response.body()); Log.i(TAG, "requestData " + method + " onResponse " + response.code()); } else { - responseListener.onFail(method, String.valueOf(response.code())); Log.e(TAG, "requestData " + method + " onResponse " + response.code()); + + if (!isRetry) { + retryRequest(method, wallet, tx); + } else { + responseListener.onFail(method, String.valueOf(response.code())); + } } } @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { - requestsCount--; - responseListener.onFail(method, String.valueOf(t.getMessage())); Log.e(TAG, "requestData " + method + " onFailure " + t.getMessage()); + requestsCount--; + + if (!isRetry) { + retryRequest(method, wallet, tx); + } else { + responseListener.onFail(method, String.valueOf(t.getMessage())); + } } }); break; @@ -100,16 +119,26 @@ public class ServerApiAdalite { responseListener.onSuccess(method, response.body()); Log.i(TAG, "requestData " + method + " onResponse " + response.code()); } else { - responseListener.onFail(method, String.valueOf(response.code())); Log.e(TAG, "requestData " + method + " onResponse " + response.code()); + + if (!isRetry) { + retryRequest(method, wallet, tx); + } else { + responseListener.onFail(method, String.valueOf(response.code())); + } } } @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { - requestsCount--; - responseListener.onFail(method, String.valueOf(t.getMessage())); Log.e(TAG, "requestData " + method + " onFailure " + t.getMessage()); + requestsCount--; + + if (!isRetry) { + retryRequest(method, wallet, tx); + } else { + responseListener.onFail(method, String.valueOf(t.getMessage())); + } } }); break; @@ -125,16 +154,26 @@ public class ServerApiAdalite { responseListener.onSuccess(method, response.body()); Log.i(TAG, "requestData " + method + " onResponse " + response.code()); } else { - responseListener.onFail(method, String.valueOf(response.code())); Log.e(TAG, "requestData " + method + " onResponse " + response.code()); + + if (!isRetry) { + retryRequest(method, wallet, tx); + } else { + responseListener.onFail(method, String.valueOf(response.code())); + } } } @Override public void onFailure(@NonNull Call call, @NonNull Throwable t) { - requestsCount--; - responseListener.onFail(method, String.valueOf(t.getMessage())); Log.e(TAG, "requestData " + method + " onFailure " + t.getMessage()); + requestsCount--; + + if (!isRetry) { + retryRequest(method, wallet, tx); + } else { + responseListener.onFail(method, String.valueOf(t.getMessage())); + } } }); break; @@ -147,5 +186,10 @@ public class ServerApiAdalite { } } + + private void retryRequest(String method, String wallet, String tx) { + currentURL = adaliteURL2; + requestData(method, wallet, tx, true); + } } diff --git a/app/src/main/java/com/tangem/wallet/cardano/CardanoEngine.java b/app/src/main/java/com/tangem/wallet/cardano/CardanoEngine.java index 5e83598bc8..ede859b03e 100644 --- a/app/src/main/java/com/tangem/wallet/cardano/CardanoEngine.java +++ b/app/src/main/java/com/tangem/wallet/cardano/CardanoEngine.java @@ -618,7 +618,7 @@ public class CardanoEngine extends CoinEngine { } coinData.setBalanceReceived(true); coinData.setBalance(adaliteResponse.getRight().getCaBalance().getGetCoin()); - coinData.setValidationNodeDescription(ServerApiAdalite.lastNode); + coinData.setValidationNodeDescription(serverApiAdalite.getCurrentURL()); //check pending if (App.pendingTransactionsStorage.hasTransactions(ctx.getCard())) {