[bisq-network/bisq] Backup, restore and create a new onion address via GUI (#3044)
Manfred Karrer
notifications at github.com
Tue Aug 20 21:54:19 UTC 2019
ManfredKarrer commented on this pull request.
> @@ -97,6 +98,8 @@
private final P2PService p2PService;
private final BtcWalletService btcWalletService;
private final TradeWalletService tradeWalletService;
+ @Inject
+ private TradeManager tradeManager;
With a 3rd component as listener for both open offer and trades it works:
Here is a patch:
```
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;
+
+ at Slf4j
+ at 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);
+ }
}
```
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/bisq-network/bisq/pull/3044#discussion_r315920461
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.bisq.network/pipermail/bisq-github/attachments/20190820/3151e6b2/attachment-0001.html>
More information about the bisq-github
mailing list