fix: remove duplicates from FindCloseRelays
This commit is contained in:
parent
7ad353fdcd
commit
4ec40984d6
@ -95,13 +95,17 @@ public class RedisStore
|
|||||||
if ((old?.Created ?? 0) < relays.Created)
|
if ((old?.Created ?? 0) < relays.Created)
|
||||||
{
|
{
|
||||||
var removed = old?.Relays.Where(a => relays.Relays.All(b => b.Url != a.Url));
|
var removed = old?.Relays.Where(a => relays.Relays.All(b => b.Url != a.Url));
|
||||||
var added = old == default ? relays.Relays : relays.Relays.Where(a => old.Relays.All(b => b.Url != a.Url)).ToList();
|
var added = old == default
|
||||||
|
? relays.Relays
|
||||||
|
: relays.Relays.Where(a => old.Relays.All(b => b.Url != a.Url)).ToList();
|
||||||
if (removed != default)
|
if (removed != default)
|
||||||
{
|
{
|
||||||
await Task.WhenAll(removed.Select(a => _database.SetRemoveAsync(RelayUsersKey(a.Url), Convert.FromHexString(pubkey))));
|
await Task.WhenAll(removed.Select(a =>
|
||||||
|
_database.SetRemoveAsync(RelayUsersKey(a.Url), Convert.FromHexString(pubkey))));
|
||||||
}
|
}
|
||||||
|
|
||||||
await Task.WhenAll(added.Select(a => _database.SetAddAsync(RelayUsersKey(a.Url), Convert.FromHexString(pubkey))));
|
await Task.WhenAll(added.Select(a =>
|
||||||
|
_database.SetAddAsync(RelayUsersKey(a.Url), Convert.FromHexString(pubkey))));
|
||||||
await _database.SetAddAsync("relays", added.Select(a => (RedisValue)a.Url.ToString()).ToArray());
|
await _database.SetAddAsync("relays", added.Select(a => (RedisValue)a.Url.ToString()).ToArray());
|
||||||
|
|
||||||
return await _database.SetAsync(UserRelaysKey(pubkey), relays, DefaultExpire);
|
return await _database.SetAsync(UserRelaysKey(pubkey), relays, DefaultExpire);
|
||||||
@ -136,16 +140,17 @@ public class RedisStore
|
|||||||
|
|
||||||
public async Task<List<RelayDistance>> FindCloseRelays(double lat, double lon, int radius = 50_000, int count = 10)
|
public async Task<List<RelayDistance>> FindCloseRelays(double lat, double lon, int radius = 50_000, int count = 10)
|
||||||
{
|
{
|
||||||
var ret = new List<RelayDistance>();
|
var ret = new Dictionary<Uri, RelayDistance>();
|
||||||
var geoRelays = await _database.GeoSearchAsync(RelayPositionKey(), lon, lat, new GeoSearchCircle(radius), count);
|
var geoRelays =
|
||||||
|
await _database.GeoSearchAsync(RelayPositionKey(), lon, lat, new GeoSearchCircle(radius), count);
|
||||||
foreach (var gr in geoRelays)
|
foreach (var gr in geoRelays)
|
||||||
{
|
{
|
||||||
var id = ((string)gr.Member!).Split('\x1');
|
var id = ((string)gr.Member!).Split('\x1');
|
||||||
var u = new Uri(id[0]);
|
var u = new Uri(id[0]);
|
||||||
var info = await GetRelay(u);
|
var info = await GetRelay(u);
|
||||||
if (info != default)
|
if (info != default && !ret.ContainsKey(u))
|
||||||
{
|
{
|
||||||
ret.Add(new()
|
ret.Add(u, new()
|
||||||
{
|
{
|
||||||
Distance = gr.Distance.HasValue ? (long)gr.Distance.Value : 0,
|
Distance = gr.Distance.HasValue ? (long)gr.Distance.Value : 0,
|
||||||
Relay = info,
|
Relay = info,
|
||||||
@ -154,7 +159,7 @@ public class RedisStore
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret.Values.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async IAsyncEnumerable<string> EnumerateProfiles()
|
public async IAsyncEnumerable<string> EnumerateProfiles()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user