mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-03-28 18:51:45 +01:00
Starts the work to filter events that return from the relay to make sure they match the subscription submitted
This commit is contained in:
parent
e3e90229ce
commit
3ac303c724
@ -52,6 +52,17 @@ class RelaySubFilter(
|
|||||||
val activeTypes: Set<FeedType>,
|
val activeTypes: Set<FeedType>,
|
||||||
val subs: SubscriptionManager,
|
val subs: SubscriptionManager,
|
||||||
) : SubscriptionCollection {
|
) : SubscriptionCollection {
|
||||||
|
fun isMatch(filter: TypedFilter) = activeTypes.any { it in filter.types } && filter.filter.isValidFor(url)
|
||||||
|
|
||||||
|
fun match(filters: List<TypedFilter>): Boolean =
|
||||||
|
filters.any { filter ->
|
||||||
|
isMatch(filter)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun isActive(subscriptionId: String): Boolean = subs.isActive(subscriptionId) && match(subs.getSubscriptionFilters(subscriptionId))
|
||||||
|
|
||||||
|
override fun getFilters(subscriptionId: String) = filter(subs.getSubscriptionFilters(subscriptionId))
|
||||||
|
|
||||||
override fun allSubscriptions(): List<Subscription> =
|
override fun allSubscriptions(): List<Subscription> =
|
||||||
subs.allSubscriptions().mapNotNull { filter ->
|
subs.allSubscriptions().mapNotNull { filter ->
|
||||||
val filters = filter(filter.value)
|
val filters = filter(filter.value)
|
||||||
@ -62,9 +73,14 @@ class RelaySubFilter(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun match(
|
||||||
|
subscriptionId: String,
|
||||||
|
event: Event,
|
||||||
|
): Boolean = subs.getSubscriptionFilters(subscriptionId).any { it.filter.match(event, url) }
|
||||||
|
|
||||||
fun filter(filters: List<TypedFilter>): List<Filter> =
|
fun filter(filters: List<TypedFilter>): List<Filter> =
|
||||||
filters.mapNotNull { filter ->
|
filters.mapNotNull { filter ->
|
||||||
if (activeTypes.any { it in filter.types } && filter.filter.isValidFor(url)) {
|
if (isMatch(filter)) {
|
||||||
filter.filter.toRelay(url)
|
filter.filter.toRelay(url)
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
|
@ -238,13 +238,28 @@ class SimpleRelay(
|
|||||||
|
|
||||||
// Log.w("Relay", "Relay onEVENT ${event.kind} $url, $subscriptionId ${msgArray.get(2)}")
|
// Log.w("Relay", "Relay onEVENT ${event.kind} $url, $subscriptionId ${msgArray.get(2)}")
|
||||||
|
|
||||||
listeners.forEach {
|
// filter results: subs.isActive(subscriptionId) && subs.match(subscriptionId, event)
|
||||||
it.onEvent(
|
if (true) {
|
||||||
this@SimpleRelay,
|
listeners.forEach {
|
||||||
subscriptionId,
|
it.onEvent(
|
||||||
event,
|
this@SimpleRelay,
|
||||||
afterEOSEPerSubscription[subscriptionId] == true,
|
subscriptionId,
|
||||||
)
|
event,
|
||||||
|
afterEOSEPerSubscription[subscriptionId] == true,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
val filter =
|
||||||
|
subs.getFilters(subscriptionId).joinToStringLimited(
|
||||||
|
separator = ",",
|
||||||
|
limit = 19,
|
||||||
|
prefix = """["REQ","$subscriptionId",""",
|
||||||
|
postfix = "]",
|
||||||
|
) {
|
||||||
|
it.toJson()
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.w("Relay", "Subscription $filter is not active or the filter does not match the event ${msgArray.get(2)}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"EOSE" ->
|
"EOSE" ->
|
||||||
|
@ -20,6 +20,18 @@
|
|||||||
*/
|
*/
|
||||||
package com.vitorpamplona.ammolite.relays.relays
|
package com.vitorpamplona.ammolite.relays.relays
|
||||||
|
|
||||||
|
import com.vitorpamplona.quartz.nip01Core.core.Event
|
||||||
|
import com.vitorpamplona.quartz.nip01Core.relays.Filter
|
||||||
|
|
||||||
interface SubscriptionCollection {
|
interface SubscriptionCollection {
|
||||||
|
fun isActive(subscriptionId: String): Boolean
|
||||||
|
|
||||||
|
fun getFilters(subscriptionId: String): List<Filter>
|
||||||
|
|
||||||
fun allSubscriptions(): List<Subscription>
|
fun allSubscriptions(): List<Subscription>
|
||||||
|
|
||||||
|
fun match(
|
||||||
|
subscriptionId: String,
|
||||||
|
event: Event,
|
||||||
|
): Boolean
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user