Updated on 2026-08-14
This commit is contained in:
parent
d7c4519c2c
commit
bccc192c87
4 changed files with 30 additions and 14 deletions
|
|
@ -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<ElectrumRequest> checkBalanceObserver = Observable.just(electrumRequest)
|
||||
Observable<ElectrumRequest> 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<ElectrumRequest>() {
|
||||
checkElectrumDataObserver.subscribe(new DefaultObserver<ElectrumRequest>() {
|
||||
@Override
|
||||
public void onNext(ElectrumRequest v) {
|
||||
if (electrumRequest.answerData != null) {
|
||||
|
|
@ -91,7 +102,7 @@ public class ServerApiHelperElectrum {
|
|||
});
|
||||
}
|
||||
|
||||
private List<ElectrumRequest> doElectrumRequest(TangemCard card, ElectrumRequest electrumRequest) {
|
||||
private List<ElectrumRequest> 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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -395,7 +395,6 @@ public class BtcEngine extends CoinEngine {
|
|||
} else {
|
||||
dataForSign[i] = doubleHashData;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
byte[] signFromCard;
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue