Traverse generations to send messages
This commit is contained in:
@@ -24,6 +24,9 @@ interface ChatMessageDao {
|
||||
@Query("SELECT * FROM ChatMessage WHERE marmotInnerEventId = :marmotInnerEventId ORDER BY createdAt DESC")
|
||||
fun getChatMessagesByMarmotInnerEventId(marmotInnerEventId: HexKey): ChatMessage?
|
||||
|
||||
@Query("SELECT COUNT(*) FROM ChatMessage WHERE chatRoomId = :chatRoomId AND senderPublicKey = :senderPublicKey")
|
||||
fun countChatMessagesBySenderPublicKey(chatRoomId: HexKey, senderPublicKey: HexKey): Int
|
||||
|
||||
@Upsert
|
||||
suspend fun upsert(chatMessage: at.torch.compose.database.model.ChatMessage): Long
|
||||
}
|
||||
@@ -9,6 +9,11 @@ import at.torch.compose.database.model.traits.SoftDeletableEntity
|
||||
import at.torch.compose.database.model.traits.TimestampedEntity
|
||||
import at.torch.compose.database.model.traits.UserViewableEntity
|
||||
import co.touchlab.kermit.Logger
|
||||
import com.vitorpamplona.quartz.marmot.mls.codec.TlsReader
|
||||
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroup
|
||||
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroupState
|
||||
import com.vitorpamplona.quartz.marmot.mls.schedule.SecretTree
|
||||
import com.vitorpamplona.quartz.marmot.mls.tree.RatchetTree
|
||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
import com.vitorpamplona.quartz.nip01Core.core.hexToByteArray
|
||||
import fr.acinq.bitcoin.PrivateKey
|
||||
@@ -120,5 +125,28 @@ data class ChatRoom(
|
||||
|
||||
return chatRoomXOnlyPublicKey.publicKey.toHex()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fun toMlsGroup(sentGenerations: Int): MlsGroup? {
|
||||
return mlsGroupState?.let {
|
||||
val mlsGroup = MlsGroup.restore(
|
||||
MlsGroupState.decodeTls(
|
||||
mlsGroupState.hexToByteArray()
|
||||
)
|
||||
)
|
||||
|
||||
logger.i("${userPublicKey} sent $sentGenerations messsages in ${id}")
|
||||
mlsGroup.traverseGenerations(sentGenerations)
|
||||
|
||||
mlsGroup
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun MlsGroup.traverseGenerations(generations: Int) {
|
||||
val plainByteArray = ByteArray(0)
|
||||
for (index in 0 until generations) {
|
||||
encrypt(plainByteArray)
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,6 @@ import com.vitorpamplona.quartz.marmot.mip00KeyPackages.KeyPackageUtils
|
||||
import com.vitorpamplona.quartz.marmot.mls.crypto.Ed25519
|
||||
import com.vitorpamplona.quartz.marmot.mls.crypto.MlsCryptoProvider
|
||||
import com.vitorpamplona.quartz.marmot.mls.crypto.X25519
|
||||
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroup
|
||||
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroupState
|
||||
import com.vitorpamplona.quartz.marmot.mls.messages.KeyPackageBundle
|
||||
import com.vitorpamplona.quartz.marmot.mls.messages.MlsKeyPackage
|
||||
import com.vitorpamplona.quartz.marmot.mls.tree.Capabilities
|
||||
@@ -110,12 +108,12 @@ class DatabaseMarmotRepository(
|
||||
nostrSignerSync: NostrSignerSync
|
||||
) {
|
||||
database.chatRoomDao().findChatRoomById(marmotInnerEvent.chatRoomId)?.let { localChatRoom ->
|
||||
localChatRoom.chatRoom.mlsGroupState?.let {
|
||||
val mlsGroup = MlsGroup.restore(
|
||||
MlsGroupState.decodeTls(
|
||||
localChatRoom.chatRoom.mlsGroupState.hexToByteArray()
|
||||
)
|
||||
)
|
||||
val sentGenerations: Int = database.chatMessageDao().countChatMessagesBySenderPublicKey(
|
||||
chatRoomId = localChatRoom.chatRoom.id,
|
||||
senderPublicKey = nostrSignerSync.pubKey
|
||||
)
|
||||
|
||||
localChatRoom.chatRoom.toMlsGroup(sentGenerations)?.let { mlsGroup ->
|
||||
logger.d("mlsGroup: $mlsGroup")
|
||||
|
||||
val groupEvent = database.marmotOutboundDao().encryptAndSendMarmotInnerEvent(
|
||||
|
||||
Reference in New Issue
Block a user