<p><b>@ManfredKarrer</b> commented on this pull request.</p>
<hr>
<p>In <a href="https://github.com/bisq-network/bisq/pull/3044#discussion_r315920461">core/src/main/java/bisq/core/offer/OpenOfferManager.java</a>:</p>
<pre style='color:#555'>> @@ -97,6 +98,8 @@
private final P2PService p2PService;
private final BtcWalletService btcWalletService;
private final TradeWalletService tradeWalletService;
+ @Inject
+ private TradeManager tradeManager;
</pre>
<p>With a 3rd component as listener for both open offer and trades it works:<br>
Here is a patch:</p>
<pre><code>Index: core/src/main/java/bisq/core/RemoveTradeOrOpenOfferListener.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/RemoveTradeOrOpenOfferListener.java (date 1566337782000)
+++ core/src/main/java/bisq/core/RemoveTradeOrOpenOfferListener.java (date 1566337782000)
@@ -0,0 +1,88 @@
+/*
+ * This file is part of Bisq.
+ *
+ * Bisq is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bisq is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bisq. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package bisq.core;
+
+import bisq.core.offer.OpenOfferManager;
+import bisq.core.trade.Trade;
+import bisq.core.trade.TradeManager;
+
+import bisq.network.p2p.NodeAddress;
+import bisq.network.p2p.P2PService;
+
+import bisq.common.crypto.PubKeyRing;
+
+import javax.inject.Inject;
+import javax.inject.Singleton;
+
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Singleton
+public class RemoveTradeOrOpenOfferListener implements TradeManager.RemoveTradeListener, OpenOfferManager.RemoveOpenOfferListener {
+
+ private final TradeManager tradeManager;
+ private final OpenOfferManager openOfferManager;
+ private final P2PService p2PService;
+ private final PubKeyRing pubKeyRing;
+
+ @Inject
+ public RemoveTradeOrOpenOfferListener(TradeManager tradeManager,
+ OpenOfferManager openOfferManager,
+ P2PService p2PService,
+ PubKeyRing pubKeyRing) {
+ this.tradeManager = tradeManager;
+ this.openOfferManager = openOfferManager;
+ this.p2PService = p2PService;
+ this.pubKeyRing = pubKeyRing;
+
+ tradeManager.addRemoveTradeListener(this);
+ openOfferManager.addRemoveOpenOfferListener(this);
+ }
+
+ @Override
+ public void onRemoveTrade() {
+ reportRequiredHiddenServices();
+ }
+
+
+ @Override
+ public void onRemoveOpenOffer() {
+ reportRequiredHiddenServices();
+
+ }
+
+ private void reportRequiredHiddenServices() {
+ // collect all node addresses (hidden services) we still need for active offers/trades
+ Set<NodeAddress> result = new HashSet<>();
+ result.addAll(openOfferManager.getOpenOffers().stream()
+ .map(openOffer -> openOffer.getOffer().getOfferPayload().getOwnerNodeAddress())
+ .collect(Collectors.toSet()));
+ result.addAll(tradeManager.getTradableList().stream()
+ .map(Trade::getContract)
+ .filter(Objects::nonNull)
+ .map(contract -> contract.getMyNodeAddress(pubKeyRing))
+ .collect(Collectors.toSet()));
+
+ p2PService.reportRequiredHiddenServices(result);
+ }
+}
Index: core/src/main/java/bisq/core/app/BisqSetup.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/app/BisqSetup.java (date 1566334741000)
+++ core/src/main/java/bisq/core/app/BisqSetup.java (date 1566337886000)
@@ -17,6 +17,7 @@
package bisq.core.app;
+import bisq.core.RemoveTradeOrOpenOfferListener;
import bisq.core.account.witness.AccountAgeWitnessService;
import bisq.core.alert.Alert;
import bisq.core.alert.AlertManager;
@@ -154,6 +155,8 @@
private final AssetService assetService;
private final TorSetup torSetup;
private final TradeLimits tradeLimits;
+ // Need to keep a reference for RemoveTradeOrOpenOfferListener
+ private final RemoveTradeOrOpenOfferListener removeTradeOrOpenOfferListener;
private final BSFormatter formatter;
@Setter
@Nullable
@@ -232,6 +235,7 @@
AssetService assetService,
TorSetup torSetup,
TradeLimits tradeLimits,
+ RemoveTradeOrOpenOfferListener removeTradeOrOpenOfferListener,
BSFormatter formatter) {
@@ -272,6 +276,7 @@
this.assetService = assetService;
this.torSetup = torSetup;
this.tradeLimits = tradeLimits;
+ this.removeTradeOrOpenOfferListener = removeTradeOrOpenOfferListener;
this.formatter = formatter;
}
Index: core/src/main/java/bisq/core/offer/OpenOfferManager.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/offer/OpenOfferManager.java (date 1566334741000)
+++ core/src/main/java/bisq/core/offer/OpenOfferManager.java (date 1566337963000)
@@ -78,6 +78,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import lombok.Getter;
+
import org.jetbrains.annotations.NotNull;
import javax.annotation.Nullable;
@@ -87,6 +89,10 @@
public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMessageListener, PersistedDataHost {
private static final Logger log = LoggerFactory.getLogger(OpenOfferManager.class);
+ public interface RemoveOpenOfferListener {
+ void onRemoveOpenOffer();
+ }
+
private static final long RETRY_REPUBLISH_DELAY_SEC = 10;
private static final long REPUBLISH_AGAIN_AT_STARTUP_DELAY_SEC = 30;
private static final long REPUBLISH_INTERVAL_MS = TimeUnit.MINUTES.toMillis(40);
@@ -108,7 +114,9 @@
private final Map<String, OpenOffer> offersToBeEdited = new HashMap<>();
private boolean stopped;
private Timer periodicRepublishOffersTimer, periodicRefreshOffersTimer, retryRepublishOffersTimer;
+ @Getter
private TradableList<OpenOffer> openOffers;
+ private List<RemoveOpenOfferListener> removeOpenOfferListeners = new ArrayList<>();
///////////////////////////////////////////////////////////////////////////////////////////
@@ -479,6 +487,7 @@
}
}
+ //todo
private void onRemoved(@NotNull OpenOffer openOffer, ResultHandler resultHandler, Offer offer) {
offer.setState(Offer.State.REMOVED);
openOffer.setState(OpenOffer.State.CANCELED);
@@ -487,6 +496,8 @@
log.info("onRemoved offerId={}", offer.getId());
btcWalletService.resetAddressEntriesForOpenOffer(offer.getId());
resultHandler.handleResult();
+
+ removeOpenOfferListeners.forEach(RemoveOpenOfferListener::onRemoveOpenOffer);
}
// Close openOffer after deposit published
@@ -497,6 +508,8 @@
offerBookService.removeOffer(openOffer.getOffer().getOfferPayload(),
() -> log.trace("Successful removed offer"),
log::error);
+
+ removeOpenOfferListeners.forEach(RemoveOpenOfferListener::onRemoveOpenOffer);
});
}
@@ -792,6 +805,10 @@
startPeriodicRepublishOffersTimer();
}
+ public void addRemoveOpenOfferListener(RemoveOpenOfferListener removeOpenOfferListener) {
+ removeOpenOfferListeners.add(removeOpenOfferListener);
+ }
+
///////////////////////////////////////////////////////////////////////////////////////////
// Private
Index: core/src/main/java/bisq/core/trade/Contract.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/trade/Contract.java (date 1566334741000)
+++ core/src/main/java/bisq/core/trade/Contract.java (date 1566337963000)
@@ -193,6 +193,13 @@
return isBuyerMakerAndSellerTaker ? makerPubKeyRing : takerPubKeyRing;
}
+ public NodeAddress getMyNodeAddress(PubKeyRing myPubKeyRing) {
+ if (myPubKeyRing.equals(getBuyerPubKeyRing()))
+ return buyerNodeAddress;
+ else
+ return sellerNodeAddress;
+ }
+
public PubKeyRing getSellerPubKeyRing() {
return isBuyerMakerAndSellerTaker ? takerPubKeyRing : makerPubKeyRing;
}
Index: core/src/main/java/bisq/core/trade/TradeManager.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- core/src/main/java/bisq/core/trade/TradeManager.java (date 1566334741000)
+++ core/src/main/java/bisq/core/trade/TradeManager.java (date 1566337963000)
@@ -104,6 +104,11 @@
public class TradeManager implements PersistedDataHost {
private static final Logger log = LoggerFactory.getLogger(TradeManager.class);
+
+ public interface RemoveTradeListener {
+ void onRemoveTrade();
+ }
+
private final User user;
private final KeyRing keyRing;
private final BtcWalletService btcWalletService;
@@ -130,6 +135,7 @@
private ErrorMessageHandler takeOfferRequestErrorMessageHandler;
@Getter
private final LongProperty numPendingTrades = new SimpleLongProperty();
+ private List<RemoveTradeListener> removeTradeListeners = new ArrayList<>();
///////////////////////////////////////////////////////////////////////////////////////////
@@ -543,6 +549,7 @@
cleanUpAddressEntries();
}
+ //todo
private void removeTrade(Trade trade) {
tradableList.remove(trade);
@@ -553,6 +560,8 @@
result.addAll(getTradableList().stream().map(Trade::getContract).filter(Objects::nonNull).map(contract -> contract.getSellerNodeAddress()).collect(Collectors.toSet()));
p2PService.reportRequiredHiddenServices(result);
+
+ removeTradeListeners.forEach(RemoveTradeListener::onRemoveTrade);
}
@@ -660,4 +669,8 @@
}
});
}
+
+ public void addRemoveTradeListener(RemoveTradeListener removeTradeListener) {
+ removeTradeListeners.add(removeTradeListener);
+ }
}
</code></pre>
<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/bisq-network/bisq/pull/3044?email_source=notifications&email_token=AJFFTNVOI3FH52VXIHACKDLQFRRYXA5CNFSM4IIPXYQ2YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCCE3ZCQ#discussion_r315920461">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/AJFFTNRCLDSJDUEHO7RJYD3QFRRYXANCNFSM4IIPXYQQ">mute the thread</a>.<img src="https://github.com/notifications/beacon/AJFFTNQ2JY7YADEVBHGODA3QFRRYXA5CNFSM4IIPXYQ2YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCCE3ZCQ.gif" height="1" width="1" alt="" /></p>
<script type="application/ld+json">[
{
"@context": "http://schema.org",
"@type": "EmailMessage",
"potentialAction": {
"@type": "ViewAction",
"target": "https://github.com/bisq-network/bisq/pull/3044?email_source=notifications\u0026email_token=AJFFTNVOI3FH52VXIHACKDLQFRRYXA5CNFSM4IIPXYQ2YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCCE3ZCQ#discussion_r315920461",
"url": "https://github.com/bisq-network/bisq/pull/3044?email_source=notifications\u0026email_token=AJFFTNVOI3FH52VXIHACKDLQFRRYXA5CNFSM4IIPXYQ2YY3PNVWWK3TUL52HS4DFWFIHK3DMKJSXC5LFON2FEZLWNFSXPKTDN5WW2ZLOORPWSZGOCCE3ZCQ#discussion_r315920461",
"name": "View Pull Request"
},
"description": "View this Pull Request on GitHub",
"publisher": {
"@type": "Organization",
"name": "GitHub",
"url": "https://github.com"
}
}
]</script>