Use chatRoomId

This commit is contained in:
Kgothatso Ngako
2026-06-18 18:05:58 +03:00
parent da6e3cbc78
commit 91699ea0b9
7 changed files with 36 additions and 36 deletions

View File

@@ -1,8 +1,5 @@
package at.torch.compose.ui.composable
import at.torch.compose.database.model.ChatRoom
import at.torch.compose.database.model.intermdiate.LocalChatRoom
import at.torch.compose.ui.composable.widgets.LoadingDataIndicator
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -16,6 +13,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.input.rememberTextFieldState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Mic
import androidx.compose.material.icons.filled.PersonAdd
import androidx.compose.material.icons.filled.Send
import androidx.compose.material3.BottomAppBarDefaults
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -39,21 +37,22 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import at.torch.compose.ui.view.model.ChatRoomDetailViewModel
import com.vitorpamplona.quartz.nip01Core.core.HexKey
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
@Composable
fun ChatRoomDetailScreen(
activeUserPublicKey: HexKey,
publicKey: String,
chatRoomId: String,
relayHint: String?,
initialChatRoomDetailUIState: at.torch.compose.ui.view.state.ChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loading,
nostrRepository: at.torch.compose.repository.NostrRepository,
chatRepository: at.torch.compose.repository.ChatRepository
) {
val chatRoomDetailViewModel: at.torch.compose.ui.view.model.ChatRoomDetailViewModel = viewModel(
factory = _root_ide_package_.at.torch.compose.ui.view.model.ChatRoomDetailViewModel.Companion.factory(
publicKey = publicKey,
val chatRoomDetailViewModel: ChatRoomDetailViewModel = viewModel(
factory = ChatRoomDetailViewModel.factory(
chatRoomId = chatRoomId,
relayHint = relayHint,
initialChatRoomDetailUIState = initialChatRoomDetailUIState,
nostrRepository = nostrRepository,
@@ -92,6 +91,18 @@ fun ChatRoomDetailScreen(
TopAppBar(
title = {
chatRoomDetailUIState.localChatRoom.RenderChatRoomTitleText()
},
actions = {
IconButton(
onClick = {
// TODO: Navigate to the invite user screen...
}
) {
Icon(
Icons.Default.PersonAdd,
contentDescription = "Invite memeber"
)
}
}
)
}
@@ -268,7 +279,7 @@ private fun ChatRoomDetailScreenPreview() {
) {
ChatRoomDetailScreen(
activeUserPublicKey = "",
publicKey = "publicKey",
chatRoomId = "publicKey",
relayHint = null,
initialChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loaded(
localChatRoom = _root_ide_package_.at.torch.compose.database.model.intermdiate.LocalChatRoom(

View File

@@ -15,6 +15,7 @@ import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.compose.composable
import at.torch.compose.ui.composable.ChatRoomCreationScreen
import at.torch.compose.ui.composable.ChatRoomDetailScreen
import at.torch.compose.ui.composable.HomeScreen
import at.torch.compose.ui.composable.navigation.routes.ChatRoomCreationRoute
import co.touchlab.kermit.Logger
@@ -435,9 +436,9 @@ fun TorchNavHost(
composable<at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute> { backStackEntry ->
val route = backStackEntry.toRoute<at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute>()
_root_ide_package_.at.torch.compose.ui.composable.ChatRoomDetailScreen(
ChatRoomDetailScreen(
activeUserPublicKey = route.activeUserPublicKey,
publicKey = route.directMessageIdentifier,
chatRoomId = route.chatRoomId,
relayHint = route.relayHint,
nostrRepository = databaseNostrRepository,
chatRepository = databaseChatRepository

View File

@@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable
@Serializable
data class ChatRoomDetailRoute(
val activeUserPublicKey: String,
val directMessageIdentifier: String, // TODO: have this as a publicKey
val chatRoomId: String, // TODO: have this as a publicKey
val relayHint: String?
): Route() {
}

View File

@@ -1,10 +1,5 @@
package at.torch.compose.ui.composable.widgets.detail
import at.torch.compose.database.model.NostrEvent
import at.torch.compose.database.model.Profile
import at.torch.compose.database.model.intermdiate.LocalNostrEvent
import at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute
import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -218,7 +213,7 @@ fun MetadataEventDetail(
onNavigateToChatRoom.invoke(
_root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute(
activeUserPublicKey = activeUserPublicKey,
directMessageIdentifier = localNostrEvent.nostrEvent.pubKey,
chatRoomId = localNostrEvent.nostrEvent.pubKey,
relayHint = localNostrEvent.nostrEvent.relayUrl,
)
)

View File

@@ -1,9 +1,7 @@
package at.torch.compose.ui.view.model
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope
@@ -13,23 +11,17 @@ import at.torch.compose.extensions.toHex
import at.torch.compose.nostr.Relays
import at.torch.compose.repository.ChatRepository
import at.torch.compose.repository.NostrRepository
import at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute
import at.torch.compose.ui.composable.navigation.routes.ImplementationPendingRoute
import at.torch.compose.ui.composable.navigation.routes.Route
import at.torch.compose.ui.view.state.ChatRoomDetailUIState
import at.torch.compose.ui.view.state.form.ChatRoomCreationFormState
import at.torch.compose.ui.view.state.form.CreateProfileFormState
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.marmot.mip01Groups.MarmotGroupData
import com.vitorpamplona.quartz.marmot.mls.crypto.Ed25519
import com.vitorpamplona.quartz.marmot.mls.crypto.Ed25519KeyPair
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroup
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroupState
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.toHexKey
import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
import com.vitorpamplona.quartz.utils.RandomInstance
import fr.acinq.bitcoin.Crypto
import fr.acinq.phoenix.data.ActiveWallet
import fr.acinq.phoenix.managers.nostrPrivateKey
import kotlinx.coroutines.Dispatchers
@@ -101,7 +93,11 @@ class ChatRoomCreationViewModel(
)
} else {
onNavigateToChatRoom.invoke(
ImplementationPendingRoute("Chat Room view ${localChatRoom.chatRoom.id}")
ChatRoomDetailRoute(
activeUserPublicKey = keyPair.pubKey.toHexKey(),
chatRoomId = localChatRoom.chatRoom.id,
relayHint = null
)
)
}
}

View File

@@ -12,13 +12,12 @@ import androidx.lifecycle.viewmodel.viewModelFactory
import at.torch.compose.ui.view.state.ChatRoomDetailUIState
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import fr.acinq.bitcoin.Crypto
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import kotlinx.coroutines.launch
class ChatRoomDetailViewModel(
val directMessageId: String,
val chatRoomId: String,
val activeUserPublicKey: HexKey,
val relayHint: String?,
initialChatRoomDetailUIState: ChatRoomDetailUIState,
@@ -36,10 +35,10 @@ class ChatRoomDetailViewModel(
val isActionPending: MutableState<Boolean> = mutableStateOf(false)
fun initiateChatRoomDetail() {
logger.d("compressed (most likely chat room): $directMessageId")
logger.d("compressed (most likely chat room): $chatRoomId")
// Get ChatRoomById
viewModelScope.launch(Dispatchers.IO) {
val localChatRoom = chatRepository.getChatRoomByIdentifier(directMessageId)
val localChatRoom = chatRepository.getChatRoomByIdentifier(chatRoomId)
chatRoomDetailUIState = if (localChatRoom == null) {
ChatRoomDetailUIState.Error
@@ -57,7 +56,7 @@ class ChatRoomDetailViewModel(
fun factory(
activeUserPublicKey: HexKey,
publicKey: String,
chatRoomId: String,
relayHint: String?,
initialChatRoomDetailUIState: ChatRoomDetailUIState = ChatRoomDetailUIState.Loading,
nostrRepository: at.torch.compose.repository.NostrRepository,
@@ -66,7 +65,7 @@ class ChatRoomDetailViewModel(
initializer {
ChatRoomDetailViewModel(
activeUserPublicKey = activeUserPublicKey,
directMessageId = publicKey,
chatRoomId = chatRoomId,
relayHint = relayHint,
initialChatRoomDetailUIState = initialChatRoomDetailUIState,
nostrRepository = nostrRepository,

View File

@@ -1,7 +1,5 @@
package at.torch.compose.ui.view.model
import at.torch.compose.database.model.NegentropySynchronizeRequest
import at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
@@ -133,7 +131,7 @@ class ChatRoomListViewModel(
onNavigateToDirectMessageDetail.invoke(
_root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute(
activeUserPublicKey = publicKey,
directMessageIdentifier = localChatRoom.chatRoom.id,
chatRoomId = localChatRoom.chatRoom.id,
relayHint = localChatRoom.localParticipants.firstOrNull { it.participant.participantPublicKey != localChatRoom.chatRoom.userPublicKey }?.participant?.relayHint
)
)