diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/agentProfiles/AgentProfileEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/agentProfiles/AgentProfileEvent.kt index 887d4dbb1d..bd39d2837b 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/agentProfiles/AgentProfileEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/agentProfiles/AgentProfileEvent.kt @@ -25,6 +25,7 @@ import com.vitorpamplona.quartz.nip01Core.core.BaseReplaceableEvent import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils import kotlinx.coroutines.CancellationException @@ -47,7 +48,10 @@ class AgentProfileEvent( tags: Array>, content: String, sig: HexKey, -) : BaseReplaceableEvent(id, pubKey, createdAt, KIND, tags, content, sig) { +) : BaseReplaceableEvent(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = profileOrNull()?.let { listOfNotNull(it.name, it.displayName).joinToString("\n") } ?: "" + /** Parses the profile metadata, or throws if the JSON is malformed. */ fun profile(): AgentProfileContent = AgentProfileContent.decodeFromJson(content) diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/apPersonas/PersonaEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/apPersonas/PersonaEvent.kt index 1b69451e5f..920e9f4c13 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/apPersonas/PersonaEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/apPersonas/PersonaEvent.kt @@ -26,6 +26,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate import com.vitorpamplona.quartz.nip01Core.tags.dTag.dTag +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils import kotlinx.coroutines.CancellationException @@ -46,7 +47,10 @@ class PersonaEvent( tags: Array>, content: String, sig: HexKey, -) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig) { +) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = personaOrNull()?.let { listOfNotNull(it.displayName, it.systemPrompt).joinToString("\n") } ?: "" + /** The persona slug — the `d` tag. */ fun slug() = dTag() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/forum/ForumCommentEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/forum/ForumCommentEvent.kt index 64e35c7aa5..a213323dde 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/forum/ForumCommentEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/forum/ForumCommentEvent.kt @@ -25,6 +25,7 @@ import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils /** @@ -41,7 +42,10 @@ class ForumCommentEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = content + /** The channel UUID (the `h` tag) this comment belongs to. */ fun channel() = tags.forumChannel() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/forum/ForumPostEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/forum/ForumPostEvent.kt index 77f6adb756..06110370b1 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/forum/ForumPostEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/forum/ForumPostEvent.kt @@ -25,6 +25,7 @@ import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils /** @@ -41,7 +42,10 @@ class ForumPostEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = content + /** The channel UUID (the `h` tag) this post belongs to. */ fun channel() = tags.forumChannel() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/huddles/HuddleGuidelinesEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/huddles/HuddleGuidelinesEvent.kt index 868cae5185..89794fee44 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/huddles/HuddleGuidelinesEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/huddles/HuddleGuidelinesEvent.kt @@ -25,6 +25,7 @@ import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils /** @@ -45,7 +46,10 @@ class HuddleGuidelinesEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = content + /** The channel UUID these guidelines apply to — the `h` tag. */ fun channelId(): String? = tags.huddleChannel() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/managedAgents/ManagedAgentEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/managedAgents/ManagedAgentEvent.kt index d1d39c0ee1..99bda33fdd 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/managedAgents/ManagedAgentEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/managedAgents/ManagedAgentEvent.kt @@ -26,6 +26,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate import com.vitorpamplona.quartz.nip01Core.tags.dTag.dTag +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils import kotlinx.coroutines.CancellationException @@ -47,7 +48,10 @@ class ManagedAgentEvent( tags: Array>, content: String, sig: HexKey, -) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig) { +) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = agentOrNull()?.let { listOfNotNull(it.name, it.systemPrompt).joinToString("\n") } ?: "" + /** The managed agent's pubkey — the `d` tag. */ fun agentPubKey() = dTag() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/teams/TeamEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/teams/TeamEvent.kt index c707d01b3e..fb0ad171a0 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/teams/TeamEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/teams/TeamEvent.kt @@ -26,6 +26,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate import com.vitorpamplona.quartz.nip01Core.tags.dTag.dTag +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils import kotlinx.coroutines.CancellationException @@ -45,7 +46,10 @@ class TeamEvent( tags: Array>, content: String, sig: HexKey, -) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig) { +) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = teamOrNull()?.let { listOfNotNull(it.name, it.description, it.instructions).joinToString("\n") } ?: "" + /** The team's stable id — the `d` tag. */ fun teamId() = dTag() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/workflow/WorkflowDefEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/workflow/WorkflowDefEvent.kt index fa4ac64d5a..3a1a7adef6 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/workflow/WorkflowDefEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/buzz/workflow/WorkflowDefEvent.kt @@ -26,6 +26,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate import com.vitorpamplona.quartz.nip01Core.tags.dTag.dTag +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils /** @@ -43,7 +44,10 @@ class WorkflowDefEvent( tags: Array>, content: String, sig: HexKey, -) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig) { +) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = listOfNotNull(name(), content).joinToString("\n") + /** The workflow UUID - the NIP-33 `d` tag. */ fun workflowId() = dTag() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/concord/cord03Channels/ConcordChatEditEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/concord/cord03Channels/ConcordChatEditEvent.kt index 40cd7bbd8c..3832cd7e79 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/concord/cord03Channels/ConcordChatEditEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/concord/cord03Channels/ConcordChatEditEvent.kt @@ -24,6 +24,7 @@ import androidx.compose.runtime.Immutable import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.tags.events.firstTaggedEvent +import com.vitorpamplona.quartz.nip50Search.SearchableEvent /** * A Concord Chat Plane **message edit** (CORD-02 Appendix B, `kind:3302`). @@ -45,7 +46,10 @@ class ConcordChatEditEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = content + /** The id of the message this edit replaces (its `e` tag), or null if malformed. */ fun editedMessageId(): HexKey? = firstTaggedEvent()?.eventId diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/attestations/attestation/AttestationEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/attestations/attestation/AttestationEvent.kt index a4ee13f6f6..666faf3a9a 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/attestations/attestation/AttestationEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/attestations/attestation/AttestationEvent.kt @@ -37,6 +37,7 @@ import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate import com.vitorpamplona.quartz.nip01Core.tags.aTag.ATag import com.vitorpamplona.quartz.nip01Core.tags.dTag.dTag import com.vitorpamplona.quartz.nip01Core.tags.events.ETag +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils @Immutable @@ -49,7 +50,10 @@ class AttestationEvent( sig: HexKey, ) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig), EventHintProvider, - AddressHintProvider { + AddressHintProvider, + SearchableEvent { + override fun indexableContent() = content + override fun eventHints(): List = tags.mapNotNull(ETag::parseAsHint) override fun linkedEventIds(): List = tags.mapNotNull(ETag::parseId) diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/attestations/request/AttestationRequestEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/attestations/request/AttestationRequestEvent.kt index c7b452a39e..df0f24a26c 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/attestations/request/AttestationRequestEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/attestations/request/AttestationRequestEvent.kt @@ -37,6 +37,7 @@ import com.vitorpamplona.quartz.nip01Core.tags.aTag.ATag import com.vitorpamplona.quartz.nip01Core.tags.dTag.dTag import com.vitorpamplona.quartz.nip01Core.tags.events.ETag import com.vitorpamplona.quartz.nip01Core.tags.people.PTag +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils @Immutable @@ -50,7 +51,10 @@ class AttestationRequestEvent( ) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig), EventHintProvider, AddressHintProvider, - PubKeyHintProvider { + PubKeyHintProvider, + SearchableEvent { + override fun indexableContent() = content + override fun eventHints(): List = tags.mapNotNull(ETag::parseAsHint) override fun linkedEventIds(): List = tags.mapNotNull(ETag::parseId) diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/birdstar/BirdexEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/birdstar/BirdexEvent.kt index 5d15bb0896..74a9f2ada7 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/birdstar/BirdexEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/birdstar/BirdexEvent.kt @@ -57,7 +57,7 @@ class BirdexEvent( sig: HexKey, ) : BaseReplaceableEvent(id, pubKey, createdAt, KIND, tags, content, sig), SearchableEvent { - override fun indexableContent() = listOfNotNull(summary()).joinToString("\n") + override fun indexableContent() = (listOfNotNull(summary()) + speciesNames()).joinToString("\n") /** Scientific names of the collected species, in event order, from the `n` tags. */ fun speciesNames() = tags.mapValueTagged("n") { it } diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/ps1saves/Ps1SaveEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/ps1saves/Ps1SaveEvent.kt index 39d1974122..2ff80829f4 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/ps1saves/Ps1SaveEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/ps1saves/Ps1SaveEvent.kt @@ -60,7 +60,7 @@ class Ps1SaveEvent( sig: HexKey, ) : BaseAddressableEvent(id, pubKey, createdAt, KIND, tags, content, sig), SearchableEvent { - override fun indexableContent() = listOfNotNull(summary(), saveTitle(), filename()).joinToString("\n") + override fun indexableContent() = listOfNotNull(summary(), saveTitle(), region(), filename()).joinToString("\n") /** Human-readable save name, from the `title` tag (may be null). */ fun saveTitle() = tags.firstTagValue("title") diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/roadstr/report/RoadEventReportEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/roadstr/report/RoadEventReportEvent.kt index 319b8d22ee..44b6328f2d 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/roadstr/report/RoadEventReportEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/experimental/roadstr/report/RoadEventReportEvent.kt @@ -33,6 +33,7 @@ import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate import com.vitorpamplona.quartz.nip01Core.tags.geohash.geohashes import com.vitorpamplona.quartz.nip31Alts.AltTag import com.vitorpamplona.quartz.nip40Expiration.expiration +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.utils.TimeUtils /** @@ -60,7 +61,10 @@ class RoadEventReportEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = content + /** The parsed [RoadEventType], or null when the `t` tag is missing/unknown. */ fun roadEventType() = tags.roadEventType() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip15Marketplace/auction/AuctionEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip15Marketplace/auction/AuctionEvent.kt index 6d20e2f0cb..94767d6b65 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip15Marketplace/auction/AuctionEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip15Marketplace/auction/AuctionEvent.kt @@ -55,7 +55,7 @@ class AuctionEvent( null } - override fun indexableContent() = auctionData()?.let { listOfNotNull(it.name, it.description).joinToString("\n") } ?: "" + override fun indexableContent() = auctionData()?.let { (listOfNotNull(it.name, it.description) + tags.hashtags()).joinToString("\n") } ?: "" companion object { const val KIND = 30020 diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip22Comments/CommentEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip22Comments/CommentEvent.kt index 07761c3b98..17110cce9d 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip22Comments/CommentEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip22Comments/CommentEvent.kt @@ -36,6 +36,7 @@ import com.vitorpamplona.quartz.nip01Core.hints.types.EventIdHint import com.vitorpamplona.quartz.nip01Core.hints.types.PubKeyHint import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate import com.vitorpamplona.quartz.nip01Core.tags.geohash.GeoHashTag +import com.vitorpamplona.quartz.nip01Core.tags.hashtags.hashtags import com.vitorpamplona.quartz.nip10Notes.BaseThreadedEvent import com.vitorpamplona.quartz.nip18Reposts.quotes.QTag import com.vitorpamplona.quartz.nip19Bech32.addressHints @@ -75,7 +76,7 @@ class CommentEvent( PubKeyHintProvider, AddressHintProvider, SearchableEvent { - override fun indexableContent() = content + override fun indexableContent() = (listOf(content) + tags.hashtags()).joinToString("\n") override fun pubKeyHints(): List { val pHints = diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip29RelayGroups/moderation/EditMetadataEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip29RelayGroups/moderation/EditMetadataEvent.kt index df9fa03c92..b503c830d3 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip29RelayGroups/moderation/EditMetadataEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip29RelayGroups/moderation/EditMetadataEvent.kt @@ -66,7 +66,7 @@ class EditMetadataEvent( fun previousEvents() = tags.previousEvents() - override fun indexableContent() = listOfNotNull(name(), about()).joinToString("\n") + override fun indexableContent() = (listOfNotNull(name(), about()) + hashtags()).joinToString("\n") companion object { const val KIND = 9002 diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip53LiveActivities/chat/LiveActivitiesChatMessageEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip53LiveActivities/chat/LiveActivitiesChatMessageEvent.kt index b495a9c885..fc223e620c 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip53LiveActivities/chat/LiveActivitiesChatMessageEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip53LiveActivities/chat/LiveActivitiesChatMessageEvent.kt @@ -35,6 +35,7 @@ import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate import com.vitorpamplona.quartz.nip01Core.tags.aTag.ATag import com.vitorpamplona.quartz.nip01Core.tags.aTag.aTag import com.vitorpamplona.quartz.nip01Core.tags.events.ETag +import com.vitorpamplona.quartz.nip01Core.tags.hashtags.hashtags import com.vitorpamplona.quartz.nip01Core.tags.people.PTag import com.vitorpamplona.quartz.nip10Notes.BaseThreadedEvent import com.vitorpamplona.quartz.nip10Notes.tags.markedETag @@ -65,7 +66,7 @@ class LiveActivitiesChatMessageEvent( AddressHintProvider, ExposeInDraft, SearchableEvent { - override fun indexableContent() = content + override fun indexableContent() = (listOf(content) + tags.hashtags()).joinToString("\n") override fun eventHints(): List { val eHints = tags.mapNotNull(ETag::parseAsHint) diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip85TrustedAssertions/users/ContactCardEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip85TrustedAssertions/users/ContactCardEvent.kt index d2e38ed3ff..f3fbabc5d2 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip85TrustedAssertions/users/ContactCardEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip85TrustedAssertions/users/ContactCardEvent.kt @@ -53,7 +53,7 @@ class ContactCardEvent( SearchableEvent { // Only the public summary tag is indexed; the rest of the card lives in // NIP-44 encrypted content and is intentionally never indexed. - override fun indexableContent() = listOfNotNull(summary()).joinToString("\n") + override fun indexableContent() = (listOfNotNull(summary()) + topics()).joinToString("\n") fun aboutUser() = tags.dTag() diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/contentSearch/NIP90ContentSearchRequestEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/contentSearch/NIP90ContentSearchRequestEvent.kt index f2c6a7f069..0569680e76 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/contentSearch/NIP90ContentSearchRequestEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/contentSearch/NIP90ContentSearchRequestEvent.kt @@ -25,6 +25,7 @@ import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.nip90Dvms.tags.InputTag import com.vitorpamplona.quartz.nip90Dvms.tags.dvmParam import com.vitorpamplona.quartz.nip90Dvms.tags.firstInputByType @@ -41,7 +42,10 @@ class NIP90ContentSearchRequestEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = searchQuery() ?: "" + fun inputs(): List = tags.inputs() fun searchQuery(): String? = tags.firstInputByType("text")?.value diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/peopleSearch/NIP90PeopleSearchRequestEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/peopleSearch/NIP90PeopleSearchRequestEvent.kt index e204172a8d..ef7e16681f 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/peopleSearch/NIP90PeopleSearchRequestEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip90Dvms/peopleSearch/NIP90PeopleSearchRequestEvent.kt @@ -25,6 +25,7 @@ import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder import com.vitorpamplona.quartz.nip01Core.signers.eventTemplate +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.nip90Dvms.tags.InputTag import com.vitorpamplona.quartz.nip90Dvms.tags.dvmParam import com.vitorpamplona.quartz.nip90Dvms.tags.firstInputByType @@ -41,7 +42,10 @@ class NIP90PeopleSearchRequestEvent( tags: Array>, content: String, sig: HexKey, -) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { +) : Event(id, pubKey, createdAt, KIND, tags, content, sig), + SearchableEvent { + override fun indexableContent() = searchQuery() ?: "" + fun inputs(): List = tags.inputs() fun searchQuery(): String? = tags.firstInputByType("text")?.value diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nipB1Bolt12Zaps/intent/Bolt12ZapIntentEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nipB1Bolt12Zaps/intent/Bolt12ZapIntentEvent.kt index 675d28a40b..9ac344d95c 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nipB1Bolt12Zaps/intent/Bolt12ZapIntentEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nipB1Bolt12Zaps/intent/Bolt12ZapIntentEvent.kt @@ -36,6 +36,7 @@ import com.vitorpamplona.quartz.nip01Core.tags.events.ETag import com.vitorpamplona.quartz.nip01Core.tags.events.toETag import com.vitorpamplona.quartz.nip01Core.tags.kinds.KindTag import com.vitorpamplona.quartz.nip01Core.tags.people.PTag +import com.vitorpamplona.quartz.nip50Search.SearchableEvent import com.vitorpamplona.quartz.nipB1Bolt12Zaps.tags.AmountTag import com.vitorpamplona.quartz.nipB1Bolt12Zaps.tags.OfferTag import com.vitorpamplona.quartz.nipB1Bolt12Zaps.tags.ZapIdTag @@ -65,7 +66,10 @@ class Bolt12ZapIntentEvent( ) : Event(id, pubKey, createdAt, KIND, tags, content, sig), EventHintProvider, AddressHintProvider, - PubKeyHintProvider { + PubKeyHintProvider, + SearchableEvent { + override fun indexableContent() = content + override fun pubKeyHints() = tags.mapNotNull(PTag::parseAsHint) override fun linkedPubKeys() = tags.mapNotNull(PTag::parseKey) diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nipXXPodcasting20/episode/Podcasting20EpisodeEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nipXXPodcasting20/episode/Podcasting20EpisodeEvent.kt index 96be4d42e0..5994cd41bb 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nipXXPodcasting20/episode/Podcasting20EpisodeEvent.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nipXXPodcasting20/episode/Podcasting20EpisodeEvent.kt @@ -74,7 +74,7 @@ class Podcasting20EpisodeEvent( PodcastEpisode, RootScope, SearchableEvent { - override fun indexableContent() = listOfNotNull(title(), description(), content).joinToString("\n") + override fun indexableContent() = (listOfNotNull(title(), description(), content) + topics()).joinToString("\n") fun title() = tags.firstNotNullOfOrNull(TitleTag::parse)