diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MarmotOutboundDao.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MarmotOutboundDao.kt index 39a597e2..c3859d88 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MarmotOutboundDao.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/dao/MarmotOutboundDao.kt @@ -263,16 +263,19 @@ abstract class MarmotOutboundDao( content = welcomeEvent.content ) - GiftWrapPayload( - id = welcomeEventId, - publicKey = userPublicKey, - chatRoomId = nostrGroupId, - kind = welcomeEvent.kind, - tags = welcomeEvent.tags, - content = welcomeEvent.content, - createdAt = Instant.fromEpochSeconds(welcomeEvent.createdAt) + database.giftWrapPayloadDao().upsert( + GiftWrapPayload( + id = welcomeEventId, + publicKey = userPublicKey, + chatRoomId = nostrGroupId, + kind = welcomeEvent.kind, + tags = welcomeEvent.tags, + content = welcomeEvent.content, + createdAt = Instant.fromEpochSeconds(welcomeEvent.createdAt) + ) ) + // Save chatMessage for the invite... database.chatMessageDao().upsert( ChatMessage( 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 98d1ee0c..050ce34f 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 @@ -1,5 +1,6 @@ package at.torch.compose.database.dao +import androidx.compose.runtime.key import androidx.room3.Dao import androidx.room3.Transaction import at.torch.compose.database.GENESIS_AT @@ -8,6 +9,7 @@ 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.MarmotKeyPackage import at.torch.compose.database.model.Mention import at.torch.compose.database.model.NegentropySynchronizeRequest import at.torch.compose.database.model.NostrEvent @@ -331,6 +333,19 @@ abstract class NostrDao( } // MLSGroupEvent handling... + nostrEvent.toKeyPackageEvent()?.let { keyPackageEvent -> + logger.d("KeyPackageEvent: $keyPackageEvent") + database.marmotKeyPackageDao().upsert( + MarmotKeyPackage( + id = keyPackageEvent.id, + publicKey = keyPackageEvent.pubKey, + tlsEncodedMarmotKeyPackage = Base64.decode( + source = keyPackageEvent.keyPackageBase64() + ), + createdAt = Instant.fromEpochSeconds(keyPackageEvent.createdAt) + ) + ) + } nostrEvent.toGroupEvent( userPublicKey = activeKeyPair.pubKey.toHex() )?.let { groupEvent -> diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEvent.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEvent.kt index 90a8b42b..16eef63f 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEvent.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/NostrEvent.kt @@ -5,6 +5,7 @@ import androidx.room3.Ignore import androidx.room3.Index import androidx.room3.PrimaryKey import co.touchlab.kermit.Logger +import com.vitorpamplona.quartz.marmot.mip00KeyPackages.KeyPackageEvent import com.vitorpamplona.quartz.marmot.mip03GroupMessages.GroupEvent import com.vitorpamplona.quartz.nip01Core.core.Event import com.vitorpamplona.quartz.nip01Core.core.HexKey @@ -249,6 +250,22 @@ data class NostrEvent( return null } + fun toKeyPackageEvent(): KeyPackageEvent? = try { + if (kind == KeyPackageEvent.KIND) { + return KeyPackageEvent( + id = id, + pubKey = pubKey, + createdAt = createdAt.epochSeconds, + tags = tags, + content = content, + sig = sig + ) + } + return null + } catch (e: Throwable) { + logger.e("Coulldn't cast to KeyPackageEvent: ", e) + return null + } fun toReaction(): Reaction? = try { if (kind == ReactionEvent.KIND) { val reactionEvent = EventFactory.create(