From e6b0b41e807a64b8340def2eccc0c318684e5f6d Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Wed, 7 May 2025 13:46:39 -0400 Subject: [PATCH] Adds a Normal Nostr filter as a PerRelay filter --- .../ammolite/relays/filters/NormalFilter.kt | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 ammolite/src/main/java/com/vitorpamplona/ammolite/relays/filters/NormalFilter.kt diff --git a/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/filters/NormalFilter.kt b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/filters/NormalFilter.kt new file mode 100644 index 000000000..b388f1899 --- /dev/null +++ b/ammolite/src/main/java/com/vitorpamplona/ammolite/relays/filters/NormalFilter.kt @@ -0,0 +1,57 @@ +/** + * Copyright (c) 2024 Vitor Pamplona + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN + * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +package com.vitorpamplona.ammolite.relays.filters + +import com.vitorpamplona.quartz.nip01Core.core.Event +import com.vitorpamplona.quartz.nip01Core.jackson.EventMapper +import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter +import com.vitorpamplona.quartz.nip01Core.relay.filters.FilterMatcher +import com.vitorpamplona.quartz.nip01Core.relay.filters.FilterSerializer + +/** + * This is a nostr filter with per-relay authors list and since parameters + */ +class NormalFilter( + val ids: List? = null, + val authors: List? = null, + val kinds: List? = null, + val tags: Map>? = null, + val since: Long? = null, + val until: Long? = null, + val limit: Int? = null, + val search: String? = null, +) : IPerRelayFilter { + override fun isValidFor(url: String) = true + + override fun toRelay(forRelay: String) = Filter(ids, authors, kinds, tags, since, until, limit, search) + + override fun toJson(forRelay: String) = FilterSerializer.toJson(ids, authors, kinds, tags, since, until, limit, search) + + override fun match( + event: Event, + forRelay: String, + ) = FilterMatcher.match(event, ids, authors, kinds, tags, since, until) + + override fun toDebugJson(): String { + val obj = FilterSerializer.toJsonObject(ids, authors, kinds, tags, since, until, limit, search) + return EventMapper.toJson(obj) + } +}