mirror of
https://github.com/bisq-network/bisq.git
synced 2025-02-24 23:18:17 +01:00
Merge branch 'HotFix_0.4.8.1' into Development
Conflicts: common/pom.xml common/src/main/java/io/bitsquare/app/Version.java core/pom.xml gui/pom.xml jsocks/pom.xml jtorctl/pom.xml jtorproxy/pom.xml network/pom.xml package/linux/create_32bit_app.sh package/linux/create_64bit_app.sh package/mac/create_app.sh package/mac/finalize.sh package/windows/Bitsquare.iss package/windows/create_32bit_app.bat package/windows/create_64bit_app.bat pom.xml seednode/pom.xml
This commit is contained in:
commit
3f9c35fe55
4 changed files with 41 additions and 21 deletions
|
@ -28,6 +28,7 @@ import io.bitsquare.p2p.NodeAddress;
|
|||
import io.bitsquare.p2p.P2PService;
|
||||
import io.bitsquare.p2p.storage.HashMapChangedListener;
|
||||
import io.bitsquare.p2p.storage.storageentry.ProtectedStorageEntry;
|
||||
import io.bitsquare.user.Preferences;
|
||||
import io.bitsquare.user.User;
|
||||
import javafx.collections.FXCollections;
|
||||
import javafx.collections.ObservableMap;
|
||||
|
@ -94,7 +95,9 @@ public class ArbitratorManager {
|
|||
private final KeyRing keyRing;
|
||||
private final ArbitratorService arbitratorService;
|
||||
private final User user;
|
||||
private Preferences preferences;
|
||||
private final ObservableMap<NodeAddress, Arbitrator> arbitratorsObservableMap = FXCollections.observableHashMap();
|
||||
private final List<Arbitrator> persistedAcceptedArbitrators;
|
||||
private Timer republishArbitratorTimer, retryRepublishArbitratorTimer;
|
||||
|
||||
|
||||
|
@ -103,20 +106,26 @@ public class ArbitratorManager {
|
|||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@Inject
|
||||
public ArbitratorManager(KeyRing keyRing, ArbitratorService arbitratorService, User user) {
|
||||
public ArbitratorManager(KeyRing keyRing, ArbitratorService arbitratorService, User user, Preferences preferences) {
|
||||
this.keyRing = keyRing;
|
||||
this.arbitratorService = arbitratorService;
|
||||
this.user = user;
|
||||
this.preferences = preferences;
|
||||
|
||||
persistedAcceptedArbitrators = new ArrayList<>(user.getAcceptedArbitrators());
|
||||
user.clearAcceptedArbitrators();
|
||||
|
||||
arbitratorService.addHashSetChangedListener(new HashMapChangedListener() {
|
||||
@Override
|
||||
public void onAdded(ProtectedStorageEntry data) {
|
||||
applyArbitrators();
|
||||
if (data.getStoragePayload() instanceof Arbitrator)
|
||||
updateArbitratorMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRemoved(ProtectedStorageEntry data) {
|
||||
applyArbitrators();
|
||||
if (data.getStoragePayload() instanceof Arbitrator)
|
||||
updateArbitratorMap();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -145,7 +154,7 @@ public class ArbitratorManager {
|
|||
});
|
||||
}
|
||||
|
||||
applyArbitrators();
|
||||
updateArbitratorMap();
|
||||
}
|
||||
|
||||
private void isBootstrapped() {
|
||||
|
@ -156,7 +165,7 @@ public class ArbitratorManager {
|
|||
}
|
||||
}
|
||||
|
||||
public void applyArbitrators() {
|
||||
public void updateArbitratorMap() {
|
||||
Map<NodeAddress, Arbitrator> map = arbitratorService.getArbitrators();
|
||||
arbitratorsObservableMap.clear();
|
||||
Map<NodeAddress, Arbitrator> filtered = map.values().stream()
|
||||
|
@ -165,19 +174,25 @@ public class ArbitratorManager {
|
|||
.collect(Collectors.toMap(Arbitrator::getArbitratorNodeAddress, Function.identity()));
|
||||
|
||||
arbitratorsObservableMap.putAll(filtered);
|
||||
// we need to remove accepted arbitrators which are not available anymore
|
||||
if (user.getAcceptedArbitrators() != null) {
|
||||
List<Arbitrator> removeList = user.getAcceptedArbitrators().stream()
|
||||
.filter(e -> !arbitratorsObservableMap.containsValue(e))
|
||||
.collect(Collectors.toList());
|
||||
removeList.stream().forEach(user::removeAcceptedArbitrator);
|
||||
arbitratorsObservableMap.values().stream()
|
||||
.filter(arbitrator -> persistedAcceptedArbitrators.contains(arbitrator))
|
||||
.forEach(user::addAcceptedArbitrator);
|
||||
|
||||
// if we don't have any arbitrator anymore we set all matching
|
||||
if (user.getAcceptedArbitrators().isEmpty()) {
|
||||
arbitratorsObservableMap.values().stream()
|
||||
.filter(user::hasMatchingLanguage)
|
||||
.forEach(user::addAcceptedArbitrator);
|
||||
}
|
||||
if (preferences.getAutoSelectArbitrators()) {
|
||||
arbitratorsObservableMap.values().stream()
|
||||
.filter(user::hasMatchingLanguage)
|
||||
.forEach(user::addAcceptedArbitrator);
|
||||
} else {
|
||||
// if we don't have any arbitrator we set all matching
|
||||
// we use a delay as we might get our matching arbitrator a bit delayed (first we get one we did not selected
|
||||
// then we get our selected one - we don't want to activate the first in that case)
|
||||
UserThread.runAfter(() -> {
|
||||
if (user.getAcceptedArbitrators().isEmpty()) {
|
||||
arbitratorsObservableMap.values().stream()
|
||||
.filter(user::hasMatchingLanguage)
|
||||
.forEach(user::addAcceptedArbitrator);
|
||||
}
|
||||
}, 100, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -190,7 +205,7 @@ public class ArbitratorManager {
|
|||
resultHandler.handleResult();
|
||||
|
||||
if (arbitratorsObservableMap.size() > 0)
|
||||
UserThread.runAfter(this::applyArbitrators, 100, TimeUnit.MILLISECONDS);
|
||||
UserThread.runAfter(this::updateArbitratorMap, 100, TimeUnit.MILLISECONDS);
|
||||
},
|
||||
errorMessageHandler::handleErrorMessage);
|
||||
}
|
||||
|
@ -243,7 +258,7 @@ public class ArbitratorManager {
|
|||
Arbitrator registeredArbitrator = user.getRegisteredArbitrator();
|
||||
if (registeredArbitrator != null) {
|
||||
addArbitrator(registeredArbitrator,
|
||||
this::applyArbitrators,
|
||||
this::updateArbitratorMap,
|
||||
errorMessage -> {
|
||||
if (retryRepublishArbitratorTimer == null)
|
||||
retryRepublishArbitratorTimer = UserThread.runPeriodically(() -> {
|
||||
|
|
|
@ -272,6 +272,11 @@ public final class User implements Persistable {
|
|||
return null;
|
||||
}
|
||||
|
||||
public void clearAcceptedArbitrators() {
|
||||
acceptedArbitrators.clear();
|
||||
storage.queueUpForSave();
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Utils
|
||||
|
|
|
@ -66,7 +66,7 @@ class ArbitratorSelectionViewModel extends ActivatableDataModel {
|
|||
protected void activate() {
|
||||
languageCodes.setAll(user.getAcceptedLanguageLocaleCodes());
|
||||
arbitratorManager.getArbitratorsObservableMap().addListener(arbitratorMapChangeListener);
|
||||
arbitratorManager.applyArbitrators();
|
||||
arbitratorManager.updateArbitratorMap();
|
||||
applyArbitratorMap();
|
||||
|
||||
updateAutoSelectArbitrators();
|
||||
|
|
|
@ -106,7 +106,7 @@ public class DisputesView extends ActivatableViewAndModel<TabPane, Activatable>
|
|||
|
||||
@Override
|
||||
protected void activate() {
|
||||
arbitratorManager.applyArbitrators();
|
||||
arbitratorManager.updateArbitratorMap();
|
||||
arbitratorManager.getArbitratorsObservableMap().addListener(arbitratorMapChangeListener);
|
||||
updateArbitratorsDisputesTabDisableState();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue