Massive refactoring of Quartz to:

- Define each tag in their own class.
- Allow extension functions to additional responsibilities to other classes
- Migrate from hardcoded tag filters in events to the Tag's parser and assemble functions.
- Migrate hardcoded event.create to builders that use extension functions
- Restructures threading infrastructure for NIP-10
- Decouple the event signing from the Event building functions via event templates
- Create classes to represent Tags and TagArrays and use extension functions to add domain-related methods to the tag array of each nip.
- Uses external functions on event template builders to better point to which functions and which tags can be used in which event kinds.
- Separates Event kinds in packages inside each nip.
- Improves support for NIP-89
- Correctly establishes which imeta params can be used in each nip (video, picture, files)
- Decouples the iMeta builder from any nip.
- Fixes mute list word and user removal when inserted from a different client.
- Migrates the Account class to avoiding having to build each Event inside of it
This commit is contained in:
Vitor Pamplona
2025-02-13 17:39:13 -05:00
parent 0f3b3c4b2d
commit 9c21a8a7da
614 changed files with 15380 additions and 7132 deletions
@@ -23,8 +23,8 @@ package com.vitorpamplona.ammolite.relays
import android.util.Log
import com.vitorpamplona.ammolite.service.checkNotInMainThread
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.relays.RelayState
import com.vitorpamplona.quartz.nip01Core.relays.sockets.WebsocketBuilderFactory
import com.vitorpamplona.quartz.nip01Core.relay.RelayState
import com.vitorpamplona.quartz.nip01Core.relay.sockets.WebsocketBuilderFactory
import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
@@ -23,7 +23,7 @@ package com.vitorpamplona.ammolite.relays
import android.util.Log
import com.vitorpamplona.ammolite.service.checkNotInMainThread
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.relays.RelayState
import com.vitorpamplona.quartz.nip01Core.relay.RelayState
import com.vitorpamplona.quartz.utils.TimeUtils
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.DelicateCoroutinesApi
@@ -21,11 +21,11 @@
package com.vitorpamplona.ammolite.relays
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.relays.RelayState
import com.vitorpamplona.quartz.nip01Core.relays.SimpleClientRelay
import com.vitorpamplona.quartz.nip01Core.relays.SubscriptionCollection
import com.vitorpamplona.quartz.nip01Core.relays.filters.Filter
import com.vitorpamplona.quartz.nip01Core.relays.sockets.WebsocketBuilderFactory
import com.vitorpamplona.quartz.nip01Core.relay.RelayState
import com.vitorpamplona.quartz.nip01Core.relay.SimpleClientRelay
import com.vitorpamplona.quartz.nip01Core.relay.SubscriptionCollection
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
import com.vitorpamplona.quartz.nip01Core.relay.sockets.WebsocketBuilderFactory
import com.vitorpamplona.quartz.nip42RelayAuth.RelayAuthEvent
enum class FeedType {
@@ -62,11 +62,11 @@ class RelaySubFilter(
override fun getFilters(subscriptionId: String) = filter(subs.getSubscriptionFilters(subscriptionId))
override fun allSubscriptions(): List<com.vitorpamplona.quartz.nip01Core.relays.Subscription> =
override fun allSubscriptions(): List<com.vitorpamplona.quartz.nip01Core.relay.Subscription> =
subs.allSubscriptions().mapNotNull { filter ->
val filters = filter(filter.value)
if (filters.isNotEmpty()) {
com.vitorpamplona.quartz.nip01Core.relays
com.vitorpamplona.quartz.nip01Core.relay
.Subscription(filter.key, filters)
} else {
null
@@ -23,7 +23,7 @@ package com.vitorpamplona.ammolite.relays
import androidx.compose.runtime.Immutable
import com.vitorpamplona.ammolite.service.checkNotInMainThread
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.relays.RelayState
import com.vitorpamplona.quartz.nip01Core.relay.RelayState
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.channels.BufferOverflow
@@ -20,7 +20,7 @@
*/
package com.vitorpamplona.ammolite.relays
import com.vitorpamplona.quartz.nip01Core.relays.RelayStat
import com.vitorpamplona.quartz.nip01Core.relay.RelayStat
object RelayStats {
private val innerCache = mutableMapOf<String, RelayStat>()
@@ -21,7 +21,7 @@
package com.vitorpamplona.ammolite.relays.filters
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.relays.filters.Filter
import com.vitorpamplona.quartz.nip01Core.relay.filters.Filter
interface IPerRelayFilter {
fun toRelay(forRelay: String): Filter
@@ -24,9 +24,9 @@ import com.fasterxml.jackson.databind.node.JsonNodeFactory
import com.vitorpamplona.quartz.nip01Core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.jackson.EventMapper
import com.vitorpamplona.quartz.nip01Core.relays.filters.Filter
import com.vitorpamplona.quartz.nip01Core.relays.filters.FilterMatcher
import com.vitorpamplona.quartz.nip01Core.relays.filters.FilterSerializer
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
@@ -23,9 +23,9 @@ package com.vitorpamplona.ammolite.relays.filters
import com.fasterxml.jackson.databind.node.JsonNodeFactory
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.jackson.EventMapper
import com.vitorpamplona.quartz.nip01Core.relays.filters.Filter
import com.vitorpamplona.quartz.nip01Core.relays.filters.FilterMatcher
import com.vitorpamplona.quartz.nip01Core.relays.filters.FilterSerializer
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