@@ -12,6 +12,7 @@ import kotlinx.coroutines.flow.merge
12
12
import kotlinx.coroutines.runBlocking
13
13
import org.xmtp.android.library.GRPCApiClient.Companion.makeQueryRequest
14
14
import org.xmtp.android.library.GRPCApiClient.Companion.makeSubscribeRequest
15
+ import org.xmtp.android.library.libxmtp.Message
15
16
import org.xmtp.android.library.messages.DecryptedMessage
16
17
import org.xmtp.android.library.messages.Envelope
17
18
import org.xmtp.android.library.messages.EnvelopeBuilder
@@ -39,6 +40,8 @@ import uniffi.xmtpv3.FfiConversationCallback
39
40
import uniffi.xmtpv3.FfiConversations
40
41
import uniffi.xmtpv3.FfiGroup
41
42
import uniffi.xmtpv3.FfiListConversationsOptions
43
+ import uniffi.xmtpv3.FfiMessage
44
+ import uniffi.xmtpv3.FfiMessageCallback
42
45
import uniffi.xmtpv3.GroupPermissions
43
46
import java.util.Date
44
47
import kotlin.time.Duration.Companion.nanoseconds
@@ -530,12 +533,34 @@ data class Conversations(
530
533
awaitClose { stream.end() }
531
534
}
532
535
536
+ fun streamAllGroupMessages (): Flow <DecodedMessage > = callbackFlow {
537
+ val messageCallback = object : FfiMessageCallback {
538
+ override fun onMessage (message : FfiMessage ) {
539
+ trySend(Message (client, message).decode())
540
+ }
541
+ }
542
+ val stream = libXMTPConversations?.streamAllMessages(messageCallback)
543
+ ? : throw XMTPException (" Client does not support Groups" )
544
+ awaitClose { stream.end() }
545
+ }
546
+
547
+ fun streamAllGroupDecryptedMessages (): Flow <DecryptedMessage > = callbackFlow {
548
+ val messageCallback = object : FfiMessageCallback {
549
+ override fun onMessage (message : FfiMessage ) {
550
+ trySend(Message (client, message).decrypt())
551
+ }
552
+ }
553
+ val stream = libXMTPConversations?.streamAllMessages(messageCallback)
554
+ ? : throw XMTPException (" Client does not support Groups" )
555
+ awaitClose { stream.end() }
556
+ }
557
+
533
558
/* *
534
559
* Get the stream of all messages of the current [Client]
535
560
* @return Flow object of [DecodedMessage] that represents all the messages of the
536
561
* current [Client] as userInvite and userIntro
537
562
*/
538
- fun streamAllMessages (): Flow <DecodedMessage > = flow {
563
+ private fun streamAllV2Messages (): Flow <DecodedMessage > = flow {
539
564
val topics = mutableListOf (
540
565
Topic .userInvite(client.address).description,
541
566
Topic .userIntro(client.address).description,
@@ -590,7 +615,23 @@ data class Conversations(
590
615
}
591
616
}
592
617
593
- fun streamAllDecryptedMessages (): Flow <DecryptedMessage > = flow {
618
+ fun streamAllMessages (includeGroups : Boolean = false): Flow <DecodedMessage > {
619
+ return if (includeGroups) {
620
+ merge(streamAllV2Messages(), streamAllGroupMessages())
621
+ } else {
622
+ streamAllV2Messages()
623
+ }
624
+ }
625
+
626
+ fun streamAllDecryptedMessages (includeGroups : Boolean = false): Flow <DecryptedMessage > {
627
+ return if (includeGroups) {
628
+ merge(streamAllV2DecryptedMessages(), streamAllGroupDecryptedMessages())
629
+ } else {
630
+ streamAllV2DecryptedMessages()
631
+ }
632
+ }
633
+
634
+ private fun streamAllV2DecryptedMessages (): Flow <DecryptedMessage > = flow {
594
635
val topics = mutableListOf (
595
636
Topic .userInvite(client.address).description,
596
637
Topic .userIntro(client.address).description,
0 commit comments