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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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());
|
||||
|
||||
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)
|
||||
{
|
||||
var ret = new List<RelayDistance>();
|
||||
var geoRelays = await _database.GeoSearchAsync(RelayPositionKey(), lon, lat, new GeoSearchCircle(radius), count);
|
||||
var ret = new Dictionary<Uri, RelayDistance>();
|
||||
var geoRelays =
|
||||
await _database.GeoSearchAsync(RelayPositionKey(), lon, lat, new GeoSearchCircle(radius), count);
|
||||
foreach (var gr in geoRelays)
|
||||
{
|
||||
var id = ((string)gr.Member!).Split('\x1');
|
||||
var u = new Uri(id[0]);
|
||||
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,
|
||||
Relay = info,
|
||||
@ -154,7 +159,7 @@ public class RedisStore
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
return ret.Values.ToList();
|
||||
}
|
||||
|
||||
public async IAsyncEnumerable<string> EnumerateProfiles()
|
||||
@ -359,4 +364,4 @@ public class RelaySetting
|
||||
|
||||
[ProtoMember(3)]
|
||||
public bool Write { get; init; }
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user