mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2025-05-03 07:14:51 -04:00
feat(gui): Switch to up-to-date asb, if current one is outdated (#189)
This commit is contained in:
parent
ba0b7ac893
commit
aa81f3c588
3 changed files with 40 additions and 34 deletions
|
@ -3,7 +3,7 @@ import { ExtendedProviderStatus, ProviderStatus } from "models/apiModel";
|
||||||
import { Seller } from "models/tauriModel";
|
import { Seller } from "models/tauriModel";
|
||||||
import { getStubTestnetProvider } from "store/config";
|
import { getStubTestnetProvider } from "store/config";
|
||||||
import { rendezvousSellerToProviderStatus } from "utils/conversionUtils";
|
import { rendezvousSellerToProviderStatus } from "utils/conversionUtils";
|
||||||
import { isProviderCompatible } from "utils/multiAddrUtils";
|
import { isProviderOutdated } from "utils/multiAddrUtils";
|
||||||
import { sortProviderList } from "utils/sortUtils";
|
import { sortProviderList } from "utils/sortUtils";
|
||||||
|
|
||||||
const stubTestnetProvider = getStubTestnetProvider();
|
const stubTestnetProvider = getStubTestnetProvider();
|
||||||
|
@ -37,13 +37,21 @@ function selectNewSelectedProvider(
|
||||||
): ProviderStatus {
|
): ProviderStatus {
|
||||||
const selectedPeerId = peerId || slice.selectedProvider?.peerId;
|
const selectedPeerId = peerId || slice.selectedProvider?.peerId;
|
||||||
|
|
||||||
return (
|
// Check if we still have a record of the currently selected provider
|
||||||
slice.registry.providers?.find((prov) => prov.peerId === selectedPeerId) ||
|
const currentProvider = slice.registry.providers?.find((prov) => prov.peerId === selectedPeerId) || slice.rendezvous.providers.find((prov) => prov.peerId === selectedPeerId);
|
||||||
slice.rendezvous.providers.find((prov) => prov.peerId === selectedPeerId) ||
|
|
||||||
slice.registry.providers?.at(0) ||
|
// If the currently selected provider is not outdated, keep it
|
||||||
slice.rendezvous.providers[0] ||
|
if (currentProvider != null && !isProviderOutdated(currentProvider)) {
|
||||||
null
|
return currentProvider;
|
||||||
);
|
}
|
||||||
|
|
||||||
|
// Otherwise we'd prefer to switch to a provider that has the newest version
|
||||||
|
const providers = sortProviderList([
|
||||||
|
...(slice.registry.providers ?? []),
|
||||||
|
...(slice.rendezvous.providers ?? []),
|
||||||
|
]);
|
||||||
|
|
||||||
|
return providers.at(0) || null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const providersSlice = createSlice({
|
export const providersSlice = createSlice({
|
||||||
|
@ -61,13 +69,6 @@ export const providersSlice = createSlice({
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the provider was already discovered via the public registry, don't add it again
|
// If the provider was already discovered via the public registry, don't add it again
|
||||||
if (
|
|
||||||
!slice.registry.providers?.some(
|
|
||||||
(prov) =>
|
|
||||||
prov.peerId === discoveredProviderStatus.peerId &&
|
|
||||||
prov.multiAddr === discoveredProviderStatus.multiAddr,
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
const indexOfExistingProvider = slice.rendezvous.providers.findIndex(
|
const indexOfExistingProvider = slice.rendezvous.providers.findIndex(
|
||||||
(prov) =>
|
(prov) =>
|
||||||
prov.peerId === discoveredProviderStatus.peerId &&
|
prov.peerId === discoveredProviderStatus.peerId &&
|
||||||
|
@ -81,9 +82,9 @@ export const providersSlice = createSlice({
|
||||||
} else {
|
} else {
|
||||||
slice.rendezvous.providers.push(discoveredProviderStatus);
|
slice.rendezvous.providers.push(discoveredProviderStatus);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Sort the provider list and select a new provider if needed
|
||||||
slice.rendezvous.providers = sortProviderList(slice.rendezvous.providers);
|
slice.rendezvous.providers = sortProviderList(slice.rendezvous.providers);
|
||||||
slice.selectedProvider = selectNewSelectedProvider(slice);
|
slice.selectedProvider = selectNewSelectedProvider(slice);
|
||||||
},
|
},
|
||||||
|
@ -95,9 +96,8 @@ export const providersSlice = createSlice({
|
||||||
action.payload.push(stubTestnetProvider);
|
action.payload.push(stubTestnetProvider);
|
||||||
}
|
}
|
||||||
|
|
||||||
slice.registry.providers = sortProviderList(action.payload).filter(
|
// Sort the provider list and select a new provider if needed
|
||||||
isProviderCompatible,
|
slice.registry.providers = sortProviderList(action.payload);
|
||||||
);
|
|
||||||
slice.selectedProvider = selectNewSelectedProvider(slice);
|
slice.selectedProvider = selectNewSelectedProvider(slice);
|
||||||
},
|
},
|
||||||
registryConnectionFailed(slice) {
|
registryConnectionFailed(slice) {
|
||||||
|
|
|
@ -11,7 +11,7 @@ export function providerToConcatenatedMultiAddr(provider: Provider) {
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isProviderCompatible(
|
export function isProviderOnCorrectNetwork(
|
||||||
provider: ExtendedProviderStatus,
|
provider: ExtendedProviderStatus,
|
||||||
): boolean {
|
): boolean {
|
||||||
return provider.testnet === isTestnet();
|
return provider.testnet === isTestnet();
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
import { ExtendedProviderStatus } from "models/apiModel";
|
import { ExtendedProviderStatus } from "models/apiModel";
|
||||||
import { isProviderCompatible, isProviderOutdated } from "./multiAddrUtils";
|
import { isProviderOnCorrectNetwork, isProviderOutdated } from "./multiAddrUtils";
|
||||||
|
|
||||||
export function sortProviderList(list: ExtendedProviderStatus[]) {
|
export function sortProviderList(list: ExtendedProviderStatus[]) {
|
||||||
return list
|
return list
|
||||||
.filter(isProviderCompatible)
|
// Filter out providers that are on the wrong network (testnet / mainnet)
|
||||||
|
.filter(isProviderOnCorrectNetwork)
|
||||||
.concat()
|
.concat()
|
||||||
|
// Sort by criteria
|
||||||
.sort((firstEl, secondEl) => {
|
.sort((firstEl, secondEl) => {
|
||||||
// If either provider is outdated, prioritize the one that isn't
|
// If either provider is outdated, prioritize the one that isn't
|
||||||
if (isProviderOutdated(firstEl) && !isProviderOutdated(secondEl)) return 1;
|
if (isProviderOutdated(firstEl) && !isProviderOutdated(secondEl)) return 1;
|
||||||
|
@ -24,5 +26,9 @@ export function sortProviderList(list: ExtendedProviderStatus[]) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
});
|
})
|
||||||
|
// Remove duplicate providers
|
||||||
|
.filter((provider, index, self) =>
|
||||||
|
index === self.findIndex((p) => p.peerId === provider.peerId)
|
||||||
|
)
|
||||||
}
|
}
|
Loading…
Add table
Add a link
Reference in a new issue