mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-11-10 06:57:34 +01:00
Fixes the download of 1000s of NIP-65 relay lists because some relays consider empty lists as null and return everything.
This commit is contained in:
@@ -83,7 +83,7 @@ abstract class NostrDataSource(
|
||||
eventCounter = eventCounter + Pair(key, Counter(subscriptionId, event.kind, 1))
|
||||
}
|
||||
|
||||
// Log.d(this@NostrDataSource.javaClass.simpleName, "Relay ${relay.url}: ${event.kind}")
|
||||
// Log.d(this@NostrDataSource.javaClass.simpleName, "Relay ${relay.url}: $subscriptionId ${event.kind} ")
|
||||
|
||||
consume(event, relay)
|
||||
if (afterEOSE) {
|
||||
|
||||
@@ -389,7 +389,7 @@ class Relay(
|
||||
if (isReady) {
|
||||
val relayFilters =
|
||||
filters.filter { filter ->
|
||||
activeTypes.any { it in filter.types }
|
||||
activeTypes.any { it in filter.types } && filter.filter.isValidFor(url)
|
||||
}
|
||||
|
||||
if (relayFilters.isNotEmpty()) {
|
||||
|
||||
@@ -31,4 +31,7 @@ interface IPerRelayFilter {
|
||||
): Boolean
|
||||
|
||||
fun toDebugJson(): String
|
||||
|
||||
// This only exists because some relays confuse empty lists with null lists
|
||||
fun isValidFor(url: String): Boolean
|
||||
}
|
||||
|
||||
@@ -36,7 +36,22 @@ class SinceAuthorPerRelayFilter(
|
||||
val limit: Int? = null,
|
||||
val search: String? = null,
|
||||
) : IPerRelayFilter {
|
||||
override fun toJson(forRelay: String) = FilterSerializer.toJson(ids, authors?.get(forRelay), kinds, tags, since?.get(forRelay)?.time, until, limit, search)
|
||||
// This only exists because some relays consider empty arrays as null and return everything.
|
||||
// So, if there is an author list, but no list for the specific relay or if the list is empty
|
||||
// don't send it.
|
||||
override fun isValidFor(forRelay: String) = authors == null || !authors[forRelay].isNullOrEmpty()
|
||||
|
||||
override fun toJson(forRelay: String): String {
|
||||
// if authors is empty, but not null
|
||||
val authorsForThisRelay =
|
||||
if (authors != null) {
|
||||
authors[forRelay]?.ifEmpty { null }
|
||||
} else {
|
||||
null
|
||||
}
|
||||
|
||||
return FilterSerializer.toJson(ids, authors?.get(forRelay), kinds, tags, since?.get(forRelay)?.time, until, limit, search)
|
||||
}
|
||||
|
||||
override fun match(
|
||||
event: Event,
|
||||
|
||||
@@ -35,6 +35,8 @@ class SincePerRelayFilter(
|
||||
val limit: Int? = null,
|
||||
val search: String? = null,
|
||||
) : IPerRelayFilter {
|
||||
override fun isValidFor(url: String) = true
|
||||
|
||||
override fun toJson(forRelay: String) = FilterSerializer.toJson(ids, authors, kinds, tags, since?.get(forRelay)?.time, until, limit, search)
|
||||
|
||||
override fun match(
|
||||
|
||||
Reference in New Issue
Block a user