do not refresh or republish offers if disconnected from xmr node

This commit is contained in:
woodser 2025-03-09 09:44:20 -04:00 committed by woodser
parent bedd38748e
commit 251a973fd6

View file

@ -1978,6 +1978,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
} }
private boolean preventedFromPublishing(OpenOffer openOffer) { private boolean preventedFromPublishing(OpenOffer openOffer) {
if (!Boolean.TRUE.equals(xmrConnectionService.isConnected())) return true;
return openOffer.isDeactivated() || openOffer.isCanceled() || openOffer.getOffer().getOfferPayload().getArbitratorSigner() == null; return openOffer.isDeactivated() || openOffer.isCanceled() || openOffer.getOffer().getOfferPayload().getArbitratorSigner() == null;
} }
@ -2000,25 +2001,27 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe
if (periodicRefreshOffersTimer == null) if (periodicRefreshOffersTimer == null)
periodicRefreshOffersTimer = UserThread.runPeriodically(() -> { periodicRefreshOffersTimer = UserThread.runPeriodically(() -> {
if (!stopped) { if (!stopped) {
int size = openOffers.size(); synchronized (openOffers) {
//we clone our list as openOffers might change during our delayed call int size = openOffers.size();
final ArrayList<OpenOffer> openOffersList = new ArrayList<>(openOffers.getList()); //we clone our list as openOffers might change during our delayed call
for (int i = 0; i < size; i++) { final ArrayList<OpenOffer> openOffersList = new ArrayList<>(openOffers.getList());
// we delay to avoid reaching throttle limits for (int i = 0; i < size; i++) {
// roughly 4 offers per second // we delay to avoid reaching throttle limits
// roughly 4 offers per second
long delay = 300;
final long minDelay = (i + 1) * delay; long delay = 300;
final long maxDelay = (i + 2) * delay; final long minDelay = (i + 1) * delay;
final OpenOffer openOffer = openOffersList.get(i); final long maxDelay = (i + 2) * delay;
UserThread.runAfterRandomDelay(() -> { final OpenOffer openOffer = openOffersList.get(i);
// we need to check if in the meantime the offer has been removed UserThread.runAfterRandomDelay(() -> {
boolean contained = false; // we need to check if in the meantime the offer has been removed
synchronized (openOffers) { boolean contained = false;
contained = openOffers.contains(openOffer); synchronized (openOffers) {
} contained = openOffers.contains(openOffer);
if (contained) maybeRefreshOffer(openOffer, 0, 1); }
}, minDelay, maxDelay, TimeUnit.MILLISECONDS); if (contained) maybeRefreshOffer(openOffer, 0, 1);
}, minDelay, maxDelay, TimeUnit.MILLISECONDS);
}
} }
} else { } else {
log.debug("We have stopped already. We ignore that periodicRefreshOffersTimer.run call."); log.debug("We have stopped already. We ignore that periodicRefreshOffersTimer.run call.");