Compare commits

...

2 commits

Author SHA1 Message Date
woodser
a0738ed38d fix showing offer created popup after canceled 2024-11-23 13:41:08 -05:00
woodser
7d17d7d40d fix scheduling offers with funds sent to self 2024-11-23 13:40:08 -05:00
3 changed files with 37 additions and 7 deletions

View file

@ -1169,15 +1169,26 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
Set<MoneroTxWallet> scheduledTxs = new HashSet<MoneroTxWallet>();
for (MoneroTxWallet tx : xmrWalletService.getTxs()) {
// skip if outputs unavailable
if (tx.getIncomingTransfers() == null || tx.getIncomingTransfers().isEmpty()) continue;
// skip if no funds available
BigInteger sentToSelfAmount = xmrWalletService.getAmountSentToSelf(tx); // amount sent to self always shows 0, so compute from destinations manually
if (sentToSelfAmount.equals(BigInteger.ZERO) && (tx.getIncomingTransfers() == null || tx.getIncomingTransfers().isEmpty())) continue;
if (!isOutputsAvailable(tx)) continue;
if (isTxScheduledByOtherOffer(openOffers, openOffer, tx.getHash())) continue;
// add scheduled tx
for (MoneroIncomingTransfer transfer : tx.getIncomingTransfers()) {
if (transfer.getAccountIndex() == 0) {
scheduledAmount = scheduledAmount.add(transfer.getAmount());
// schedule transaction if incoming tranfers to account 0
if (tx.getIncomingTransfers() != null) {
for (MoneroIncomingTransfer transfer : tx.getIncomingTransfers()) {
if (transfer.getAccountIndex() == 0) {
scheduledAmount = scheduledAmount.add(transfer.getAmount());
scheduledTxs.add(tx);
}
}
}
// schedule transaction if funds sent to self, because they are not included in incoming transfers // TODO: fix in libraries?
if (!scheduledTxs.contains(tx)) {
if (sentToSelfAmount.compareTo(BigInteger.ZERO) > 0) {
scheduledAmount = scheduledAmount.add(sentToSelfAmount);
scheduledTxs.add(tx);
}
}

View file

@ -1219,10 +1219,29 @@ public class XmrWalletService extends XmrWalletBase {
return cachedAvailableBalance;
}
public boolean hasAddress(String address) {
for (MoneroSubaddress subaddress : getSubaddresses()) {
if (subaddress.getAddress().equals(address)) return true;
}
return false;
}
public List<MoneroSubaddress> getSubaddresses() {
return cachedSubaddresses;
}
public BigInteger getAmountSentToSelf(MoneroTxWallet tx) {
BigInteger sentToSelfAmount = BigInteger.ZERO;
if (tx.getOutgoingTransfer() != null && tx.getOutgoingTransfer().getDestinations() != null) {
for (MoneroDestination destination : tx.getOutgoingTransfer().getDestinations()) {
if (hasAddress(destination.getAddress())) {
sentToSelfAmount = sentToSelfAmount.add(destination.getAmount());
}
}
}
return sentToSelfAmount;
}
public List<MoneroOutputWallet> getOutputs(MoneroOutputQuery query) {
List<MoneroOutputWallet> filteredOutputs = new ArrayList<MoneroOutputWallet>();
for (MoneroOutputWallet output : cachedOutputs) {

View file

@ -613,7 +613,7 @@ public abstract class MutableOfferViewModel<M extends MutableOfferDataModel> ext
dataModel.onPlaceOffer(offer, transaction -> {
resultHandler.run();
placeOfferCompleted.set(true);
if (!createOfferCanceled) placeOfferCompleted.set(true);
errorMessage.set(null);
}, errMessage -> {
createOfferRequested = false;