From bccc192c870f89b7d7c8621fa0280b637c82c23d Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 11 Oct 2018 17:46:38 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../data/network/ServerApiHelperElectrum.java | 31 ++++++++++++++----- .../com/tangem/domain/wallet/BtcEngine.java | 1 - .../com/tangem/domain/wallet/TangemCard.java | 4 ++- .../presentation/fragment/LoadedWallet.kt | 8 ++--- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/tangem/data/network/ServerApiHelperElectrum.java b/app/src/main/java/com/tangem/data/network/ServerApiHelperElectrum.java index b25beb6f90..e03d86bc4e 100644 --- a/app/src/main/java/com/tangem/data/network/ServerApiHelperElectrum.java +++ b/app/src/main/java/com/tangem/data/network/ServerApiHelperElectrum.java @@ -12,6 +12,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; +import java.net.ConnectException; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.Socket; @@ -21,7 +22,10 @@ import java.util.List; import java.util.Random; import io.reactivex.Observable; +import io.reactivex.ObservableSource; import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.functions.Consumer; +import io.reactivex.functions.Function; import io.reactivex.observers.DefaultObserver; import io.reactivex.schedulers.Schedulers; @@ -47,26 +51,33 @@ public class ServerApiHelperElectrum { } public void electrumRequestData(TangemCard card, ElectrumRequest electrumRequest) { - Observable checkBalanceObserver = Observable.just(electrumRequest) + Observable checkElectrumDataObserver = Observable.just(electrumRequest) + .doOnNext(electrumRequest1 -> doElectrumRequest(card, electrumRequest)) + .flatMap(electrumRequest1 -> { - - -// if (electrumRequest1 throws NullPointerException) - - if (electrumRequest1.answerData == null) { Log.e(TAG, "NullPointerException " + electrumRequest.getMethod()); return Observable.error(new NullPointerException()); } else return Observable.just(electrumRequest1); }) + .retryWhen(errors -> errors .filter(throwable -> throwable instanceof NullPointerException) .zipWith(Observable.range(1, 2), (n, i) -> i)) + + .retryWhen(errors -> errors + .filter(throwable -> throwable instanceof Exception) + .zipWith(Observable.range(1, 2), (n, i) -> i)) + + .retryWhen(errors -> errors + .filter(throwable -> throwable instanceof ConnectException) + .zipWith(Observable.range(1, 2), (n, i) -> i)) + .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); - checkBalanceObserver.subscribe(new DefaultObserver() { + checkElectrumDataObserver.subscribe(new DefaultObserver() { @Override public void onNext(ElectrumRequest v) { if (electrumRequest.answerData != null) { @@ -91,7 +102,7 @@ public class ServerApiHelperElectrum { }); } - private List doElectrumRequest(TangemCard card, ElectrumRequest electrumRequest) { + private List doElectrumRequest(TangemCard card, ElectrumRequest electrumRequest) throws ConnectException { BitcoinNode bitcoinNode = BitcoinNode.values()[new Random().nextInt(BitcoinNode.values().length)]; if (card.getBlockchain() == Blockchain.BitcoinTestNet || card.getBlockchain() == Blockchain.BitcoinCashTestNet) { @@ -112,6 +123,7 @@ public class ServerApiHelperElectrum { Socket socket = new Socket(); socket.setSoTimeout(5000); socket.bind(new InetSocketAddress(0)); + // TODO java.net.ConnectException: Connection refused socket.connect(new InetSocketAddress(serverAddress, port)); try { OutputStream os = socket.getOutputStream(); @@ -147,7 +159,10 @@ public class ServerApiHelperElectrum { } catch (Exception e) { e.printStackTrace(); electrumRequestDataListener.onElectrumFail(electrumRequest.getMethod()); + Log.e(TAG, "electrumRequestData " + electrumRequest.getMethod() + " Exception 1 " + e.getMessage()); + +// throw new NullPointerException("Could not retrieve Data"); } return result; } diff --git a/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java b/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java index 2ccb3a405e..7bcdcf2dcc 100644 --- a/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java +++ b/app/src/main/java/com/tangem/domain/wallet/BtcEngine.java @@ -395,7 +395,6 @@ public class BtcEngine extends CoinEngine { } else { dataForSign[i] = doubleHashData; } - } byte[] signFromCard; diff --git a/app/src/main/java/com/tangem/domain/wallet/TangemCard.java b/app/src/main/java/com/tangem/domain/wallet/TangemCard.java index 25f214b9a8..2aa2d06741 100644 --- a/app/src/main/java/com/tangem/domain/wallet/TangemCard.java +++ b/app/src/main/java/com/tangem/domain/wallet/TangemCard.java @@ -178,7 +178,9 @@ public class TangemCard { } public Double amountFromInternalUnits(Long internalAmount) { - return ((double) internalAmount) / getBlockchain().getMultiplier(); + // TODO java.lang.NullPointerException: Attempt to invoke virtual method 'long java.lang.Long.longValue()' on a null object reference + return ((double) internalAmount) / + getBlockchain().getMultiplier(); } public Double amountFromInternalUnits(Integer internalAmount) { diff --git a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt index a83bfc5905..184bfc06c9 100644 --- a/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt +++ b/app/src/main/java/com/tangem/presentation/fragment/LoadedWallet.kt @@ -265,7 +265,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific val height = jsUnspent.getInt("height") val hash = jsUnspent.getString("tx_hash") if (height != -1) { -// requestElectrum(card!!, ElectrumRequest.getTransaction(walletAddress, hash)) + requestElectrum(card!!, ElectrumRequest.getTransaction(walletAddress, hash)) } } } catch (e: JSONException) { @@ -819,7 +819,8 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific val html = Html.fromHtml(engine.getBalanceWithAlter(card)) tvBalance.text = html } else - tvBalance.text = engine.getBalanceWithAlter(card) +// tvBalance.text = engine.getBalanceWithAlter(card) + tvBalance.text = engine.getBalance(card) } else { val offlineAmount = engine.convertByteArrayToAmount(card, card!!.offlineBalance) @@ -868,7 +869,7 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific card!!.setIsBalanceEqual(true) requestElectrum(card!!, ElectrumRequest.checkBalance(card!!.wallet)) -// requestElectrum(card!!, ElectrumRequest.listUnspent(card!!.wallet)) + requestElectrum(card!!, ElectrumRequest.listUnspent(card!!.wallet)) requestRateInfo("bitcoin") } @@ -896,7 +897,6 @@ class LoadedWallet : Fragment(), NfcAdapter.ReaderCallback, CardProtocol.Notific requestInfura(ServerApiHelper.INFURA_ETH_CALL, engine.getContractAddress(card)) requestRateInfo("ethereum") } - } fun prepareResultIntent(): Intent {