Link up marmotGroupEvent

This commit is contained in:
Kgothatso Ngako
2026-07-03 23:03:57 +02:00
parent 225606d724
commit 9592e37a45
3 changed files with 35 additions and 6 deletions

View File

@@ -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

View File

@@ -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)
}

View File

@@ -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}")
}