@@ -22,6 +22,7 @@ import org.xmtp.android.library.messages.sentAt
22
22
import org.xmtp.android.library.messages.toPublicKeyBundle
23
23
import org.xmtp.android.library.messages.walletAddress
24
24
import org.xmtp.proto.message.api.v1.MessageApiOuterClass
25
+ import uniffi.xmtp_dh.org.xmtp.android.library.messages.DecryptedMessage
25
26
import java.util.Date
26
27
27
28
data class ConversationV1 (
@@ -56,21 +57,59 @@ data class ConversationV1(
56
57
}
57
58
}
58
59
59
- fun decode (envelope : Envelope ): DecodedMessage {
60
- val message = Message .parseFrom(envelope.message)
61
- val decrypted = message.v1.decrypt(client.privateKeyBundleV1)
62
- val encodedMessage = EncodedContent .parseFrom(decrypted)
63
- val header = message.v1.header
64
- val decoded = DecodedMessage (
65
- topic = envelope.contentTopic,
66
- encodedContent = encodedMessage,
67
- senderAddress = header.sender.walletAddress,
68
- sent = message.v1.sentAt
69
- )
60
+ fun decryptedMessages (
61
+ limit : Int? = null,
62
+ before : Date ? = null,
63
+ after : Date ? = null,
64
+ direction : PagingInfoSortDirection = MessageApiOuterClass .SortDirection .SORT_DIRECTION_DESCENDING ,
65
+ ): List <DecryptedMessage > {
66
+ val pagination =
67
+ Pagination (limit = limit, before = before, after = after, direction = direction)
68
+
69
+ val envelopes = runBlocking {
70
+ client.apiClient.envelopes(
71
+ topic = Topic .directMessageV1(client.address, peerAddress).description,
72
+ pagination = pagination
73
+ )
74
+ }
70
75
71
- decoded.id = generateId(envelope)
76
+ return envelopes.map { decrypt(it) }
77
+ }
72
78
73
- return decoded
79
+ fun decrypt (envelope : Envelope ): DecryptedMessage {
80
+ try {
81
+ val message = Message .parseFrom(envelope.message)
82
+ val decrypted = message.v1.decrypt(client.privateKeyBundleV1)
83
+
84
+ val encodedMessage = EncodedContent .parseFrom(decrypted)
85
+ val header = message.v1.header
86
+
87
+ return DecryptedMessage (
88
+ id = generateId(envelope),
89
+ encodedContent = encodedMessage,
90
+ senderAddress = header.sender.walletAddress,
91
+ sentAt = message.v1.sentAt
92
+ )
93
+ } catch (e: Exception ) {
94
+ throw XMTPException (" Error decrypting message" , e)
95
+ }
96
+ }
97
+
98
+ fun decode (envelope : Envelope ): DecodedMessage {
99
+ try {
100
+ val decryptedMessage = decrypt(envelope)
101
+
102
+ return DecodedMessage (
103
+ id = generateId(envelope),
104
+ client = client,
105
+ topic = envelope.contentTopic,
106
+ encodedContent = decryptedMessage.encodedContent,
107
+ senderAddress = decryptedMessage.senderAddress,
108
+ sent = decryptedMessage.sentAt
109
+ )
110
+ } catch (e: Exception ) {
111
+ throw XMTPException (" Error decoding message" , e)
112
+ }
74
113
}
75
114
76
115
private fun decodeOrNull (envelope : Envelope ): DecodedMessage ? {
0 commit comments