From 9592e37a451cbe6f4fb08d66fa414b8bb1dce3e5 Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Fri, 3 Jul 2026 23:03:57 +0200 Subject: [PATCH] Link up marmotGroupEvent --- .../torch/compose/database/TorchDatabase.kt | 6 ++++++ .../database/dao/MarmotGroupEventDao.kt | 15 ++++++++++++++ .../at/torch/compose/database/dao/NostrDao.kt | 20 +++++++++++++------ 3 files changed, 35 insertions(+), 6 deletions(-) create mode 100644 composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MarmotGroupEventDao.kt diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabase.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabase.kt index 1e7df39f..18176923 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabase.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/TorchDatabase.kt @@ -5,6 +5,7 @@ import androidx.room3.RoomDatabase import androidx.room3.TypeConverters import androidx.room3.immediateTransaction import androidx.room3.useWriterConnection +import at.torch.compose.database.dao.MarmotGroupEventDao import at.torch.compose.database.dao.MarmotInnerEventDao import at.torch.compose.database.dao.MarmotKeyPackageBundleDao import at.torch.compose.database.dao.MarmotKeyPackageDao @@ -20,6 +21,8 @@ import at.torch.compose.database.model.GiftWrapMessage import at.torch.compose.database.model.GiftWrapPayload import at.torch.compose.database.model.GiftWrapSeal import at.torch.compose.database.model.InReplyToRelation +import at.torch.compose.database.model.MarmotGroupEvent +import at.torch.compose.database.model.MarmotInnerEvent import at.torch.compose.database.model.MarmotKeyPackage import at.torch.compose.database.model.MarmotKeyPackageBundle import at.torch.compose.database.model.Mention @@ -57,6 +60,8 @@ val GENESIS_AT = Instant.fromEpochMilliseconds(1231006505000L) GiftWrapSeal::class, GiftWrapPayload::class, InReplyToRelation::class, + MarmotGroupEvent::class, + MarmotInnerEvent::class, MarmotKeyPackage::class, MarmotKeyPackageBundle::class, Mention::class, @@ -104,6 +109,7 @@ abstract class TorchDatabase: RoomDatabase() { abstract fun inReplyToRelationDao(): at.torch.compose.database.dao.InReplyToRelationDao + abstract fun marmotGroupEventDao(): MarmotGroupEventDao abstract fun marmotInnerEventDao(): MarmotInnerEventDao abstract fun marmotKeyPackageDao(): MarmotKeyPackageDao diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MarmotGroupEventDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MarmotGroupEventDao.kt new file mode 100644 index 00000000..4ced8b8d --- /dev/null +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MarmotGroupEventDao.kt @@ -0,0 +1,15 @@ +package at.torch.compose.database.dao + +import androidx.room3.Dao +import androidx.room3.Query +import androidx.room3.Upsert +import at.torch.compose.database.model.MarmotGroupEvent +import at.torch.compose.database.model.MarmotInnerEvent +import kotlinx.coroutines.flow.Flow + +@Dao +interface MarmotGroupEventDao { + + @Upsert + suspend fun upsert(marmotGroupEvent: MarmotGroupEvent) +} \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrDao.kt index 0de50268..1b668cf1 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/NostrDao.kt @@ -7,6 +7,7 @@ import at.torch.compose.database.model.BroadcastNostrEventRequest import at.torch.compose.database.model.ChatMessage import at.torch.compose.database.model.ChatRoom import at.torch.compose.database.model.Connection +import at.torch.compose.database.model.MarmotGroupEvent import at.torch.compose.database.model.Mention import at.torch.compose.database.model.NegentropySynchronizeRequest import at.torch.compose.database.model.NostrEvent @@ -53,6 +54,7 @@ import com.vitorpamplona.quartz.nip01Core.tags.people.taggedUsers import com.vitorpamplona.quartz.nip02FollowList.ContactListEvent import com.vitorpamplona.quartz.nip17Dm.messages.ChatMessageEvent import com.vitorpamplona.quartz.nip17Dm.settings.ChatMessageRelayListEvent +import com.vitorpamplona.quartz.nip40Expiration.expiration import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent import kotlin.io.encoding.Base64 import kotlin.time.Clock @@ -367,7 +369,18 @@ abstract class NostrDao( } if (memberPubkeys.contains(activeKeyPair.pubKey.toHex())) { - // Ingest message... + database.marmotGroupEventDao().upsert( + MarmotGroupEvent( + id = groupEvent.id, + userPublicKey = activeKeyPair.pubKey.toHex(), + publicKey = groupEvent.pubKey, + encryptedContent = groupEvent.encryptedContent(), + chatRoomId = chatRoomId, + nostrEventId = nostrEvent.id, + createdAt = Instant.fromEpochSeconds(groupEvent.createdAt), + expiresAt = groupEvent.expiration()?.let { Instant.fromEpochSeconds(it) } + ) + ) MarmotInboundManager.processGroupEvent( database = database, activeKeyPair = activeKeyPair, @@ -375,7 +388,6 @@ abstract class NostrDao( mlsGroup = mlsGroup, groupEvent = groupEvent )?.let { groupEventResult -> - ChatMessage.fromGroupEventResult( database = database, activeKeyPair = activeKeyPair, @@ -386,11 +398,7 @@ abstract class NostrDao( chatMessage ) } - - } - - } else { throw MarmotNotMemberOfChatGroupException("We are not a member of the chat room ${localChatRoom.chatRoom.id}") }