diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/RelayMembers.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/RelayMembers.kt
index ee19fdba8..86287e585 100644
--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/RelayMembers.kt
+++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/note/types/RelayMembers.kt
@@ -77,13 +77,19 @@ fun RenderRelayAddMember(
nav: INav,
) {
val noteEvent = baseNote.event as? RelayAddMemberEvent ?: return
- val memberKey = remember(noteEvent) { noteEvent.memberPubKey() }
+ val memberKeys = remember(noteEvent) { noteEvent.memberPubKeys() }
+ val title =
+ if (memberKeys.size == 1) {
+ stringRes(R.string.relay_member_added)
+ } else {
+ stringRes(R.string.relay_members_added, memberKeys.size)
+ }
+ val subtitle = remember(memberKeys) { memberKeys.joinToString(", ") { it.take(16) + "..." } }
RelayMemberEventCard(
icon = Icons.Default.PersonAdd,
- title = stringRes(R.string.relay_member_added),
- subtitle = memberKey?.take(16)?.let { "$it..." },
- nav = nav,
+ title = title,
+ subtitle = subtitle,
relayPubKey = noteEvent.pubKey,
)
}
@@ -95,13 +101,19 @@ fun RenderRelayRemoveMember(
nav: INav,
) {
val noteEvent = baseNote.event as? RelayRemoveMemberEvent ?: return
- val memberKey = remember(noteEvent) { noteEvent.memberPubKey() }
+ val memberKeys = remember(noteEvent) { noteEvent.memberPubKeys() }
+ val title =
+ if (memberKeys.size == 1) {
+ stringRes(R.string.relay_member_removed)
+ } else {
+ stringRes(R.string.relay_members_removed, memberKeys.size)
+ }
+ val subtitle = remember(memberKeys) { memberKeys.joinToString(", ") { it.take(16) + "..." } }
RelayMemberEventCard(
icon = Icons.Default.PersonRemove,
- title = stringRes(R.string.relay_member_removed),
- subtitle = memberKey?.take(16)?.let { "$it..." },
- nav = nav,
+ title = title,
+ subtitle = subtitle,
relayPubKey = noteEvent.pubKey,
)
}
diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/threadview/ThreadFeedView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/threadview/ThreadFeedView.kt
index d46423583..4f855ce20 100644
--- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/threadview/ThreadFeedView.kt
+++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/threadview/ThreadFeedView.kt
@@ -165,7 +165,12 @@ import com.vitorpamplona.amethyst.ui.note.types.RenderPoll
import com.vitorpamplona.amethyst.ui.note.types.RenderPostApproval
import com.vitorpamplona.amethyst.ui.note.types.RenderPrivateMessage
import com.vitorpamplona.amethyst.ui.note.types.RenderPublicMessage
+import com.vitorpamplona.amethyst.ui.note.types.RenderRelayAddMember
import com.vitorpamplona.amethyst.ui.note.types.RenderRelayDiscovery
+import com.vitorpamplona.amethyst.ui.note.types.RenderRelayJoinRequest
+import com.vitorpamplona.amethyst.ui.note.types.RenderRelayLeaveRequest
+import com.vitorpamplona.amethyst.ui.note.types.RenderRelayMembershipList
+import com.vitorpamplona.amethyst.ui.note.types.RenderRelayRemoveMember
import com.vitorpamplona.amethyst.ui.note.types.RenderTextEvent
import com.vitorpamplona.amethyst.ui.note.types.RenderTextModificationEvent
import com.vitorpamplona.amethyst.ui.note.types.RenderTorrent
@@ -231,6 +236,11 @@ import com.vitorpamplona.quartz.nip34Git.repository.GitRepositoryEvent
import com.vitorpamplona.quartz.nip35Torrents.TorrentCommentEvent
import com.vitorpamplona.quartz.nip35Torrents.TorrentEvent
import com.vitorpamplona.quartz.nip37Drafts.DraftWrapEvent
+import com.vitorpamplona.quartz.nip43RelayMembers.addMember.RelayAddMemberEvent
+import com.vitorpamplona.quartz.nip43RelayMembers.joinRequest.RelayJoinRequestEvent
+import com.vitorpamplona.quartz.nip43RelayMembers.leaveRequest.RelayLeaveRequestEvent
+import com.vitorpamplona.quartz.nip43RelayMembers.list.RelayMembershipListEvent
+import com.vitorpamplona.quartz.nip43RelayMembers.removeMember.RelayRemoveMemberEvent
import com.vitorpamplona.quartz.nip50Search.SearchRelayListEvent
import com.vitorpamplona.quartz.nip51Lists.PinListEvent
import com.vitorpamplona.quartz.nip51Lists.followList.FollowListEvent
@@ -712,6 +722,16 @@ private fun FullBleedNoteCompose(
RenderRepost(baseNote, quotesLeft = 3, backgroundColor, accountViewModel, nav)
} else if (noteEvent is RelayDiscoveryEvent) {
RenderRelayDiscovery(baseNote, accountViewModel, nav)
+ } else if (noteEvent is RelayMembershipListEvent) {
+ RenderRelayMembershipList(baseNote, accountViewModel, nav)
+ } else if (noteEvent is RelayAddMemberEvent) {
+ RenderRelayAddMember(baseNote, accountViewModel, nav)
+ } else if (noteEvent is RelayRemoveMemberEvent) {
+ RenderRelayRemoveMember(baseNote, accountViewModel, nav)
+ } else if (noteEvent is RelayJoinRequestEvent) {
+ RenderRelayJoinRequest(baseNote, accountViewModel, nav)
+ } else if (noteEvent is RelayLeaveRequestEvent) {
+ RenderRelayLeaveRequest(baseNote, accountViewModel, nav)
} else if (noteEvent is TextNoteModificationEvent) {
RenderTextModificationEvent(
note = baseNote,
diff --git a/amethyst/src/main/res/values/strings.xml b/amethyst/src/main/res/values/strings.xml
index 81becc5f6..835a4e4c1 100644
--- a/amethyst/src/main/res/values/strings.xml
+++ b/amethyst/src/main/res/values/strings.xml
@@ -2096,7 +2096,9 @@
You are a member
Relay membership list
Member added to relay
+ %1$d members added to relay
Member removed from relay
+ %1$d members removed from relay
Relay join request
Relay leave request
diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip43RelayMembers/addMember/RelayAddMemberEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip43RelayMembers/addMember/RelayAddMemberEvent.kt
index 504355cce..8c387a6a9 100644
--- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip43RelayMembers/addMember/RelayAddMemberEvent.kt
+++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip43RelayMembers/addMember/RelayAddMemberEvent.kt
@@ -39,20 +39,20 @@ class RelayAddMemberEvent(
content: String,
sig: HexKey,
) : Event(id, pubKey, createdAt, KIND, tags, content, sig) {
- fun memberPubKey() = tags.firstNotNullOfOrNull(PTag::parseKey)
+ fun memberPubKeys() = tags.mapNotNull(PTag::parseKey)
companion object {
const val KIND = 8000
const val ALT_DESCRIPTION = "Relay member added"
fun build(
- memberPubKey: HexKey,
+ memberPubKeys: List,
createdAt: Long = TimeUtils.now(),
initializer: TagArrayBuilder.() -> Unit = {},
) = eventTemplate(KIND, "", createdAt) {
alt(ALT_DESCRIPTION)
protect()
- add(PTag.assemble(memberPubKey, null))
+ memberPubKeys.forEach { add(PTag.assemble(it, null)) }
initializer()
}
}
diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip43RelayMembers/removeMember/RelayRemoveMemberEvent.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip43RelayMembers/removeMember/RelayRemoveMemberEvent.kt
index 9d5ea2668..83b82c41c 100644
--- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip43RelayMembers/removeMember/RelayRemoveMemberEvent.kt
+++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip43RelayMembers/removeMember/RelayRemoveMemberEvent.kt
@@ -39,20 +39,20 @@ class RelayRemoveMemberEvent(
content: String,
sig: HexKey,
) : Event(id, pubKey, createdAt, KIND, tags, content, sig) {
- fun memberPubKey() = tags.firstNotNullOfOrNull(PTag::parseKey)
+ fun memberPubKeys() = tags.mapNotNull(PTag::parseKey)
companion object {
const val KIND = 8001
const val ALT_DESCRIPTION = "Relay member removed"
fun build(
- memberPubKey: HexKey,
+ memberPubKeys: List,
createdAt: Long = TimeUtils.now(),
initializer: TagArrayBuilder.() -> Unit = {},
) = eventTemplate(KIND, "", createdAt) {
alt(ALT_DESCRIPTION)
protect()
- add(PTag.assemble(memberPubKey, null))
+ memberPubKeys.forEach { add(PTag.assemble(it, null)) }
initializer()
}
}