From a346d31554e3f0f9531b422731ca8270ed6e88b9 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 13 Jun 2023 17:08:50 -0400 Subject: [PATCH] Finally adds markers to kind 1s --- .../vitorpamplona/amethyst/model/Account.kt | 8 ++++- .../amethyst/service/model/TextNoteEvent.kt | 33 +++++++++++++++++-- .../amethyst/ui/actions/NewMessageTagger.kt | 6 ++++ .../amethyst/ui/actions/NewPostViewModel.kt | 19 ++++++++++- .../amethyst/ui/note/AddBountyAmountDialog.kt | 5 ++- 5 files changed, 65 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index 87a98cbb4..1c67d5a0f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -497,7 +497,10 @@ class Account( mentions: List?, tags: List? = null, zapReceiver: String? = null, - wantsToMarkAsSensitive: Boolean + wantsToMarkAsSensitive: Boolean, + replyingTo: String?, + root: String?, + directMentions: Set ) { if (!isWriteable()) return @@ -513,6 +516,9 @@ class Account( extraTags = tags, zapReceiver = zapReceiver, markAsSensitive = wantsToMarkAsSensitive, + replyingTo = replyingTo, + root = root, + directMentions = directMentions, privateKey = loggedIn.privKey!! ) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/TextNoteEvent.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/TextNoteEvent.kt index e0b0a98f3..0e8dc8c84 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/TextNoteEvent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/TextNoteEvent.kt @@ -21,6 +21,8 @@ class TextNoteEvent( fun subject() = tags.firstOrNull() { it.size > 1 && it[0] == "subject" }?.get(1) + fun root() = tags.firstOrNull() { it.size > 3 && it[3] == "root" }?.get(1) + companion object { const val kind = 1 @@ -32,19 +34,44 @@ class TextNoteEvent( extraTags: List?, zapReceiver: String?, markAsSensitive: Boolean, + replyingTo: String?, + root: String?, + directMentions: Set, + privateKey: ByteArray, createdAt: Long = Date().time / 1000 ): TextNoteEvent { val pubKey = Utils.pubkeyCreate(privateKey).toHexKey() val tags = mutableListOf>() replyTos?.forEach { - tags.add(listOf("e", it)) + if (it == replyingTo) { + tags.add(listOf("e", it, "", "reply")) + } else if (it == root) { + tags.add(listOf("e", it, "", "root")) + } else if (it in directMentions) { + tags.add(listOf("e", it, "", "mention")) + } else { + tags.add(listOf("e", it)) + } } mentions?.forEach { - tags.add(listOf("p", it)) + if (it in directMentions) { + tags.add(listOf("p", it, "", "mention")) + } else { + tags.add(listOf("p", it)) + } } addresses?.forEach { - tags.add(listOf("a", it.toTag())) + val aTag = it.toTag() + if (aTag == replyingTo) { + tags.add(listOf("a", aTag, "", "reply")) + } else if (aTag == root) { + tags.add(listOf("a", aTag, "", "root")) + } else if (aTag in directMentions) { + tags.add(listOf("a", aTag, "", "mention")) + } else { + tags.add(listOf("a", aTag)) + } } findHashtags(msg).forEach { tags.add(listOf("t", it)) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMessageTagger.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMessageTagger.kt index 00ffcd3f0..b298169ef 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMessageTagger.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewMessageTagger.kt @@ -1,5 +1,6 @@ package com.vitorpamplona.amethyst.ui.actions +import com.vitorpamplona.amethyst.model.HexKey import com.vitorpamplona.amethyst.model.LocalCache import com.vitorpamplona.amethyst.model.Note import com.vitorpamplona.amethyst.model.User @@ -8,11 +9,16 @@ import com.vitorpamplona.amethyst.service.nip19.Nip19 class NewMessageTagger(var channelHex: String?, var mentions: List?, var replyTos: List?, var message: String) { + val directMentions = mutableSetOf() + fun addUserToMentions(user: User) { + directMentions.add(user.pubkeyHex) mentions = if (mentions?.contains(user) == true) mentions else mentions?.plus(user) ?: listOf(user) } fun addNoteToReplyTos(note: Note) { + directMentions.add(note.idHex) + note.author?.let { addUserToMentions(it) } replyTos = if (replyTos?.contains(note) == true) replyTos else replyTos?.plus(note) ?: listOf(note) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt index 02dfbb5c0..b141a92dd 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt @@ -137,7 +137,24 @@ open class NewPostViewModel() : ViewModel() { } else if (originalNote?.event is PrivateDmEvent) { account?.sendPrivateMessage(tagger.message, originalNote!!.author!!, originalNote!!, tagger.mentions, zapReceiver, wantsToMarkAsSensitive) } else { - account?.sendPost(tagger.message, tagger.replyTos, tagger.mentions, null, zapReceiver, wantsToMarkAsSensitive) + // adds markers + val rootId = + (originalNote?.event as? TextNoteEvent)?.root() // if it has a marker as root + ?: originalNote?.replyTo?.firstOrNull { it.event != null && it.replyTo?.isEmpty() == true }?.idHex // if it has loaded events with zero replies in the reply list + ?: originalNote?.replyTo?.firstOrNull()?.idHex // old rules, first item is root. + val replyId = originalNote?.idHex + + account?.sendPost( + message = tagger.message, + replyTo = tagger.replyTos, + mentions = tagger.mentions, + tags = null, + zapReceiver = zapReceiver, + wantsToMarkAsSensitive = wantsToMarkAsSensitive, + replyingTo = replyId, + root = rootId, + directMentions = tagger.directMentions + ) } cancel() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/AddBountyAmountDialog.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/AddBountyAmountDialog.kt index 5d2e3b826..cfece88ef 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/AddBountyAmountDialog.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/AddBountyAmountDialog.kt @@ -57,7 +57,10 @@ class AddBountyAmountViewModel : ViewModel() { replyTo = listOfNotNull(bounty), mentions = listOfNotNull(bounty?.author), tags = listOf("bounty-added-reward"), - wantsToMarkAsSensitive = false + wantsToMarkAsSensitive = false, + replyingTo = null, + root = null, + directMentions = setOf() ) nextAmount = TextFieldValue("")