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 1a0b54aa4..f10b74848 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -909,15 +909,7 @@ class Account( fun decryptContent(note: Note): String? { val event = note.event return if (event is PrivateDmEvent && loggedIn.privKey != null) { - var pubkeyToUse = event.pubKey - - val recepientPK = event.verifiedRecipientPubKey() - - if (note.author == userProfile() && recepientPK != null) { - pubkeyToUse = recepientPK - } - - event.plainContent(loggedIn.privKey!!, pubkeyToUse.hexToByteArray()) + event.plainContent(loggedIn.privKey!!, event.talkingWith(userProfile().pubkeyHex).hexToByteArray()) } else if (event is LnZapRequestEvent && loggedIn.privKey != null) { decryptZapContentAuthor(note)?.content() } else { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/model/PrivateDmEvent.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/model/PrivateDmEvent.kt index 837747f8e..63e429d0c 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/model/PrivateDmEvent.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/model/PrivateDmEvent.kt @@ -29,6 +29,10 @@ class PrivateDmEvent( fun verifiedRecipientPubKey() = recipientPubKey()?.runCatching { Hex.decode(this[1]).toHexKey() }?.getOrNull() // makes sure its a valid one + fun talkingWith(oneSideHex: String): HexKey { + return if (pubKey == oneSideHex) verifiedRecipientPubKey() ?: pubKey else pubKey + } + /** * To be fully compatible with nip-04, we read e-tags that are in violation to nip-18. * diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListKnownFeedFilter.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListKnownFeedFilter.kt index fdabe63b4..75c8de3c9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListKnownFeedFilter.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/dal/ChatroomListKnownFeedFilter.kt @@ -72,10 +72,7 @@ object ChatroomListKnownFeedFilter : AdditiveFeedFilter() { newRelevantPrivateMessages.forEach { newNotePair -> oldList.forEach { oldNote -> - val oldAuthor = oldNote.author?.pubkeyHex - val oldRecipient = (oldNote.event as? PrivateDmEvent)?.verifiedRecipientPubKey() - - val oldRoom = if (oldAuthor == me.pubkeyHex) oldRecipient else oldAuthor + val oldRoom = (oldNote.event as? PrivateDmEvent)?.talkingWith(me.pubkeyHex) if ( (newNotePair.key == oldRoom) && (newNotePair.value.createdAt() ?: 0) > (oldNote.createdAt() ?: 0) @@ -132,13 +129,10 @@ object ChatroomListKnownFeedFilter : AdditiveFeedFilter() { val newRelevantPrivateMessages = mutableMapOf() newItems.filter { it.event is PrivateDmEvent }.forEach { newNote -> - val newAuthor = newNote.author?.pubkeyHex - val newRecipient = (newNote.event as? PrivateDmEvent)?.verifiedRecipientPubKey() - - val roomUserHex = if (newAuthor == me.pubkeyHex) newRecipient else newAuthor + val roomUserHex = (newNote.event as? PrivateDmEvent)?.talkingWith(me.pubkeyHex) val roomUser = roomUserHex?.let { LocalCache.users[it] } - if (roomUserHex != null && (newAuthor == me.pubkeyHex || roomUserHex in followingKeySet || me.hasSentMessagesTo(roomUser)) && !account.isHidden(roomUserHex)) { + if (roomUserHex != null && (newNote.author?.pubkeyHex == me.pubkeyHex || roomUserHex in followingKeySet || me.hasSentMessagesTo(roomUser)) && !account.isHidden(roomUserHex)) { val lastNote = newRelevantPrivateMessages.get(roomUserHex) if (lastNote != null) { if ((newNote.createdAt() ?: 0) > (lastNote.createdAt() ?: 0)) { diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt index 08463fb71..7cf66bc64 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/navigation/Routes.kt @@ -189,7 +189,9 @@ object MessagesLatestItem : LatestItem() { val newestItem = updateNewestItem(newNotes, account, ChatroomListKnownFeedFilter) - val lastTime = cache.load("Room/${newestItem?.author?.pubkeyHex}") + val roomUserHex = (newestItem?.event as? PrivateDmEvent)?.talkingWith(account.userProfile().pubkeyHex) + + val lastTime = cache.load("Room/$roomUserHex") return (newestItem?.createdAt() ?: 0) > lastTime } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/MessageSetCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/MessageSetCompose.kt index 9400e9dc9..12c843973 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/MessageSetCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/MessageSetCompose.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import com.vitorpamplona.amethyst.NotificationCache import com.vitorpamplona.amethyst.R +import com.vitorpamplona.amethyst.service.model.PrivateDmEvent import com.vitorpamplona.amethyst.ui.screen.MessageSetCard import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.theme.newItemBackgroundColor @@ -99,9 +100,11 @@ fun MessageSetCompose(messageSetCard: MessageSetCard, routeForLastRead: String, MessageIcon() Column(modifier = remember { Modifier.padding(start = 10.dp) }) { + val routeForLastRead = "Room/${(baseNote.event as? PrivateDmEvent)?.talkingWith(loggedIn.pubkeyHex)}" + NoteCompose( baseNote = baseNote, - routeForLastRead = null, + routeForLastRead = routeForLastRead, isBoostedNote = true, addMarginTop = false, parentBackgroundColor = backgroundColor, diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt index d7894962b..2266b74bf 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ui/note/NoteCompose.kt @@ -442,20 +442,7 @@ fun routeFor(note: Note, loggedIn: User): String? { return "Channel/${it.idHex}" } } else if (noteEvent is PrivateDmEvent) { - val replyAuthorBase = - (note.event as? PrivateDmEvent) - ?.verifiedRecipientPubKey() - ?.let { LocalCache.getOrCreateUser(it) } - - var userToComposeOn = note.author!! - - if (replyAuthorBase != null) { - if (note.author == loggedIn) { - userToComposeOn = replyAuthorBase - } - } - - return "Room/${userToComposeOn.pubkeyHex}" + return "Room/${noteEvent.talkingWith(loggedIn.pubkeyHex)}" } else { return "Note/${note.idHex}" }