Added parseUri to BitocinManager
This commit is contained in:
parent
193f426739
commit
91ef2d0e9a
2 changed files with 74 additions and 3 deletions
|
@ -38,6 +38,7 @@ import cy.agorise.crystalwallet.models.CryptoCoinTransaction;
|
|||
import cy.agorise.crystalwallet.models.CryptoCurrency;
|
||||
import cy.agorise.crystalwallet.models.CryptoNetAccount;
|
||||
import cy.agorise.crystalwallet.requestmanagers.BitcoinSendRequest;
|
||||
import cy.agorise.crystalwallet.requestmanagers.BitcoinUriParseRequest;
|
||||
import cy.agorise.crystalwallet.requestmanagers.CalculateBitcoinUriRequest;
|
||||
import cy.agorise.crystalwallet.requestmanagers.CreateBitcoinAccountRequest;
|
||||
import cy.agorise.crystalwallet.requestmanagers.CryptoNetInfoRequest;
|
||||
|
@ -156,12 +157,13 @@ public class GeneralAccountManager implements CryptoAccountManager, CryptoNetInf
|
|||
this.validateAddress((ValidateBitcoinAddressRequest) request);
|
||||
}else if(request instanceof CalculateBitcoinUriRequest){
|
||||
this.calculateUri((CalculateBitcoinUriRequest) request);
|
||||
}else if(request instanceof BitcoinUriParseRequest){
|
||||
this.parseUri((BitcoinUriParseRequest) request);
|
||||
}else{
|
||||
System.out.println("Invalid " +this.cryptoCoin.getLabel() + " request ");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -536,6 +538,66 @@ public class GeneralAccountManager implements CryptoAccountManager, CryptoNetInf
|
|||
request.validate();
|
||||
}
|
||||
|
||||
private void parseUri(BitcoinUriParseRequest request){
|
||||
String uri = request.getUri();
|
||||
if(uri.indexOf(":")>0){
|
||||
String cryptoNet = uri.substring(0,uri.indexOf(":"));
|
||||
if(cryptoNet.equalsIgnoreCase(this.cryptoCoin.getLabel())){
|
||||
try{
|
||||
Address address = Address.fromBase58(this.cryptoCoin.getParameters(), request.getAddress());
|
||||
request.setAddress(address.toString());
|
||||
request.setStatus(BitcoinUriParseRequest.StatusCode.VALID);
|
||||
if(uri.indexOf("?")>0){
|
||||
try {
|
||||
String[] parameters = uri.substring(uri.indexOf("?") + 1).split("&");
|
||||
for (String parameter : parameters) {
|
||||
int idx = parameter.indexOf("=");
|
||||
if (idx > 0 && parameter.substring(0, idx).equalsIgnoreCase("amount")) {
|
||||
request.setAmount(Double.parseDouble(parameter.substring(idx + 1)));
|
||||
}
|
||||
}
|
||||
}catch(Exception ignored){}
|
||||
}
|
||||
}catch(AddressFormatException ex){
|
||||
request.setStatus(BitcoinUriParseRequest.StatusCode.NOT_VALID);
|
||||
}
|
||||
|
||||
}else{
|
||||
request.setStatus(BitcoinUriParseRequest.StatusCode.NOT_VALID);
|
||||
}
|
||||
}else{
|
||||
if(uri.indexOf("?")>0){
|
||||
try{
|
||||
Address address = Address.fromBase58(this.cryptoCoin.getParameters(), request.getAddress());
|
||||
request.setAddress(address.toString());
|
||||
request.setStatus(BitcoinUriParseRequest.StatusCode.VALID);
|
||||
try{
|
||||
String[] parameters = uri.substring(uri.indexOf("?")+1).split("&");
|
||||
for(String parameter : parameters){
|
||||
int idx = parameter.indexOf("=");
|
||||
if(idx > 0 && parameter.substring(0,idx).equalsIgnoreCase("amount")){
|
||||
request.setAmount(Double.parseDouble(parameter.substring(idx+1)));
|
||||
}
|
||||
}
|
||||
}catch(Exception ignored){}
|
||||
|
||||
}catch(AddressFormatException ex){
|
||||
request.setStatus(BitcoinUriParseRequest.StatusCode.NOT_VALID);
|
||||
}
|
||||
}else{
|
||||
try{
|
||||
Address address = Address.fromBase58(this.cryptoCoin.getParameters(), request.getAddress());
|
||||
request.setAddress(address.toString());
|
||||
request.setStatus(BitcoinUriParseRequest.StatusCode.VALID);
|
||||
|
||||
}catch(AddressFormatException ex){
|
||||
request.setStatus(BitcoinUriParseRequest.StatusCode.NOT_VALID);
|
||||
}
|
||||
}
|
||||
}
|
||||
request.validate();
|
||||
}
|
||||
|
||||
private List<BitcoinTransactionGTxIO> getUtxos(long accountId, CrystalDatabase db){
|
||||
List<BitcoinTransactionGTxIO> answer = new ArrayList<>();
|
||||
List<BitcoinTransactionGTxIO> bTGTxI = new ArrayList<>();
|
||||
|
|
|
@ -22,17 +22,22 @@ public class BitcoinUriParseRequest extends CryptoNetInfoRequest {
|
|||
NOT_VALID
|
||||
}
|
||||
|
||||
private String uri;
|
||||
|
||||
private String address;
|
||||
private Double amount;
|
||||
private String memo;
|
||||
|
||||
|
||||
|
||||
private StatusCode status = StatusCode.NOT_STARTED;
|
||||
|
||||
public BitcoinUriParseRequest(String uri) {
|
||||
super(CryptoCoin.BITCOIN);
|
||||
public BitcoinUriParseRequest(String uri, CryptoCoin cryptoCoin) {
|
||||
super(cryptoCoin);
|
||||
this.address = "";
|
||||
this.amount = -1.0;
|
||||
this.memo = "";
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
|
@ -73,4 +78,8 @@ public class BitcoinUriParseRequest extends CryptoNetInfoRequest {
|
|||
public StatusCode getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public String getUri() {
|
||||
return uri;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue