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 75cc9916..a29ee351 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 @@ -87,11 +87,11 @@ abstract class MarmotOutboundDao( logger.d("groupEvent: ${groupEvent.toJson()}") // May need to update chatRoom mlsGroupState... or last sent message -// database.chatRoomDao().upsert( -// localChatRoom.chatRoom.copy( -// mlsGroupState = mlsGroup.saveState().encodeTls().toHex() -// ) -// ) + database.chatRoomDao().upsert( + localChatRoom.chatRoom.copy( + mlsGroupState = mlsGroup.saveState().encodeTls().toHex() + ) + ) database.nostrEventDao().upsert( NostrEvent( diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatRoom.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatRoom.kt index 2decdcdb..800fcf36 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatRoom.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/database/model/ChatRoom.kt @@ -4,6 +4,10 @@ import androidx.room3.Entity import androidx.room3.ForeignKey import androidx.room3.Ignore import androidx.room3.PrimaryKey +import at.torch.compose.database.model.traits.LocalStoreEntity +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.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.hexToByteArray @@ -75,10 +79,7 @@ data class ChatRoom( override val viewedAt: Instant? = null, override val deletedAt: Instant? = null, - ): at.torch.compose.database.model.traits.TimestampedEntity, - at.torch.compose.database.model.traits.LocalStoreEntity, - at.torch.compose.database.model.traits.UserViewableEntity, - at.torch.compose.database.model.traits.SoftDeletableEntity + ): TimestampedEntity, LocalStoreEntity, UserViewableEntity, SoftDeletableEntity { companion object { const val TAG = "ChatRoom" diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt index 998d84d0..ebe59b5f 100755 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/ChatRoomListViewModel.kt @@ -38,6 +38,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import kotlinx.coroutines.launch import kotlin.math.log +import kotlin.time.Instant class ChatRoomListViewModel( initialChatRoomListUIState: at.torch.compose.ui.view.state.ChatRoomListUIState, @@ -83,7 +84,7 @@ class ChatRoomListViewModel( limit = 50 ) nostrRepository.queueNegentropySynchronizeRequest( - at.torch.compose.nostr.Relays.DefaultDMRelayList.shuffled().map { normalizedRelayUrl -> + Relays.DefaultDMRelayList.shuffled().map { normalizedRelayUrl -> NegentropySynchronizeRequest( id = NegentropySynchronizeRequest.computeId( relayURL = normalizedRelayUrl.url, @@ -101,27 +102,10 @@ class ChatRoomListViewModel( val chatRooms = chatRepository.getChatRoomListByPublicKey(publicKey) val relayChatRoomMaps = Relays.DefaultDMRelayList.map { dmRelay -> dmRelay.url to chatRooms.map { localChatRoom -> - // TODO: Just return localChatRoom.chatRoom.id once we have nostrGroupId stored as the chatRoom primary id - if (localChatRoom.chatRoom.mlsGroupState != null) { - - if (localChatRoom.chatRoom.id.length == 64) { - localChatRoom.chatRoom.id - } else { - val group = MlsGroup.restore( - MlsGroupState.decodeTls( - localChatRoom.chatRoom.mlsGroupState.hexToByteArray() - ) - ) - - logger.d("chatRoomId: ${localChatRoom.chatRoom.id} vs nostrGroupId (${group.currentMarmotData()?.nostrGroupId})") - group.currentMarmotData()?.nostrGroupId ?: localChatRoom.chatRoom.id - } - } else { - localChatRoom.chatRoom.id - } + localChatRoom.chatRoom.id } } - // TODO: Get relay with chatGroups... + val negentropySyncRequests = relayChatRoomMaps.map { relayChatRoomMap -> val mlsGroupMessageFilter = SynchronizationFilter( kinds = arrayOf(GroupEvent.KIND), diff --git a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SynchronizationViewModel.kt b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SynchronizationViewModel.kt index 99ae2a02..e6f36e12 100644 --- a/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SynchronizationViewModel.kt +++ b/composeApp/src/commonMain/kotlin/at/torch/compose/ui/view/model/SynchronizationViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import at.torch.compose.network.dto.toRelayDTO +import at.torch.compose.network.sockets.NostrIncomingMessage import co.touchlab.kermit.Logger import com.vitorpamplona.negentropy.Negentropy import com.vitorpamplona.negentropy.storage.StorageVector @@ -266,7 +267,7 @@ class SynchronizationViewModel( ) } } - is at.torch.compose.network.sockets.NostrIncomingMessage.EoseMessage -> { + is NostrIncomingMessage.EoseMessage -> { logger.d("Sync request has been successfully processed (${negentropySynchronizeRequest.relayURL}): $nostrIncomingMessage") relaysSocketManager.closeNegentropySync( @@ -276,7 +277,7 @@ class SynchronizationViewModel( return@collect } - is at.torch.compose.network.sockets.NostrIncomingMessage.NegentropyError -> { + is NostrIncomingMessage.NegentropyError -> { logger.d("Negentropy Error (need to synchronize like normal): ${nostrIncomingMessage.negentropyReason}") // TODO: Don't schedule a sync when on mobile internet. @@ -287,7 +288,7 @@ class SynchronizationViewModel( ) return@collect } - is at.torch.compose.network.sockets.NostrIncomingMessage.NegentropyMessage -> { + is NostrIncomingMessage.NegentropyMessage -> { logger.d("NegentropyMessage: ${nostrIncomingMessage.negentropyMessage}") val result = negentropy.reconcile( @@ -336,7 +337,7 @@ class SynchronizationViewModel( return@collect } - is at.torch.compose.network.sockets.NostrIncomingMessage.NoticeMessage -> { + is NostrIncomingMessage.NoticeMessage -> { logger.d("Notice message ${negentropySynchronizeRequest.relayURL}: $nostrIncomingMessage") if (nostrIncomingMessage.subscriptionId?.contains("negentropy disabled") == true) { nostrRepository.queueSynchronizeNostrEvent(