Use chatRoomId
This commit is contained in:
1 parent
da6e3cbc78
commit
91699ea0b9
7 files changed
+36
-36
No files matched your search
+19
-8
@@ -1,8 +1,5 @@
|
|||||||
package at.torch.compose.ui.composable
|
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.background
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
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.foundation.text.input.rememberTextFieldState
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Mic
|
import androidx.compose.material.icons.filled.Mic
|
||||||
|
import androidx.compose.material.icons.filled.PersonAdd
|
||||||
import androidx.compose.material.icons.filled.Send
|
import androidx.compose.material.icons.filled.Send
|
||||||
import androidx.compose.material3.BottomAppBarDefaults
|
import androidx.compose.material3.BottomAppBarDefaults
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
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.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
|
import at.torch.compose.ui.view.model.ChatRoomDetailViewModel
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun ChatRoomDetailScreen(
|
fun ChatRoomDetailScreen(
|
||||||
activeUserPublicKey: HexKey,
|
activeUserPublicKey: HexKey,
|
||||||
publicKey: String,
|
chatRoomId: String,
|
||||||
relayHint: String?,
|
relayHint: String?,
|
||||||
initialChatRoomDetailUIState: at.torch.compose.ui.view.state.ChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loading,
|
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,
|
nostrRepository: at.torch.compose.repository.NostrRepository,
|
||||||
chatRepository: at.torch.compose.repository.ChatRepository
|
chatRepository: at.torch.compose.repository.ChatRepository
|
||||||
) {
|
) {
|
||||||
val chatRoomDetailViewModel: at.torch.compose.ui.view.model.ChatRoomDetailViewModel = viewModel(
|
val chatRoomDetailViewModel: ChatRoomDetailViewModel = viewModel(
|
||||||
factory = _root_ide_package_.at.torch.compose.ui.view.model.ChatRoomDetailViewModel.Companion.factory(
|
factory = ChatRoomDetailViewModel.factory(
|
||||||
publicKey = publicKey,
|
chatRoomId = chatRoomId,
|
||||||
relayHint = relayHint,
|
relayHint = relayHint,
|
||||||
initialChatRoomDetailUIState = initialChatRoomDetailUIState,
|
initialChatRoomDetailUIState = initialChatRoomDetailUIState,
|
||||||
nostrRepository = nostrRepository,
|
nostrRepository = nostrRepository,
|
||||||
@@ -92,6 +91,18 @@ fun ChatRoomDetailScreen(
|
|||||||
TopAppBar(
|
TopAppBar(
|
||||||
title = {
|
title = {
|
||||||
chatRoomDetailUIState.localChatRoom.RenderChatRoomTitleText()
|
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(
|
ChatRoomDetailScreen(
|
||||||
activeUserPublicKey = "",
|
activeUserPublicKey = "",
|
||||||
publicKey = "publicKey",
|
chatRoomId = "publicKey",
|
||||||
relayHint = null,
|
relayHint = null,
|
||||||
initialChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loaded(
|
initialChatRoomDetailUIState = _root_ide_package_.at.torch.compose.ui.view.state.ChatRoomDetailUIState.Loaded(
|
||||||
localChatRoom = _root_ide_package_.at.torch.compose.database.model.intermdiate.LocalChatRoom(
|
localChatRoom = _root_ide_package_.at.torch.compose.database.model.intermdiate.LocalChatRoom(
|
||||||
|
|||||||
+3
-2
@@ -15,6 +15,7 @@ import androidx.lifecycle.compose.LocalLifecycleOwner
|
|||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import at.torch.compose.ui.composable.ChatRoomCreationScreen
|
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.HomeScreen
|
||||||
import at.torch.compose.ui.composable.navigation.routes.ChatRoomCreationRoute
|
import at.torch.compose.ui.composable.navigation.routes.ChatRoomCreationRoute
|
||||||
import co.touchlab.kermit.Logger
|
import co.touchlab.kermit.Logger
|
||||||
@@ -435,9 +436,9 @@ fun TorchNavHost(
|
|||||||
composable<at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute> { backStackEntry ->
|
composable<at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute> { backStackEntry ->
|
||||||
val route = backStackEntry.toRoute<at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute>()
|
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,
|
activeUserPublicKey = route.activeUserPublicKey,
|
||||||
publicKey = route.directMessageIdentifier,
|
chatRoomId = route.chatRoomId,
|
||||||
relayHint = route.relayHint,
|
relayHint = route.relayHint,
|
||||||
nostrRepository = databaseNostrRepository,
|
nostrRepository = databaseNostrRepository,
|
||||||
chatRepository = databaseChatRepository
|
chatRepository = databaseChatRepository
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ import kotlinx.serialization.Serializable
|
|||||||
@Serializable
|
@Serializable
|
||||||
data class ChatRoomDetailRoute(
|
data class ChatRoomDetailRoute(
|
||||||
val activeUserPublicKey: String,
|
val activeUserPublicKey: String,
|
||||||
val directMessageIdentifier: String, // TODO: have this as a publicKey
|
val chatRoomId: String, // TODO: have this as a publicKey
|
||||||
val relayHint: String?
|
val relayHint: String?
|
||||||
): Route() {
|
): Route() {
|
||||||
}
|
}
|
||||||
+1
-6
@@ -1,10 +1,5 @@
|
|||||||
package at.torch.compose.ui.composable.widgets.detail
|
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.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
@@ -218,7 +213,7 @@ fun MetadataEventDetail(
|
|||||||
onNavigateToChatRoom.invoke(
|
onNavigateToChatRoom.invoke(
|
||||||
_root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute(
|
_root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute(
|
||||||
activeUserPublicKey = activeUserPublicKey,
|
activeUserPublicKey = activeUserPublicKey,
|
||||||
directMessageIdentifier = localNostrEvent.nostrEvent.pubKey,
|
chatRoomId = localNostrEvent.nostrEvent.pubKey,
|
||||||
relayHint = localNostrEvent.nostrEvent.relayUrl,
|
relayHint = localNostrEvent.nostrEvent.relayUrl,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
+6
-10
@@ -1,9 +1,7 @@
|
|||||||
package at.torch.compose.ui.view.model
|
package at.torch.compose.ui.view.model
|
||||||
|
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
@@ -13,23 +11,17 @@ import at.torch.compose.extensions.toHex
|
|||||||
import at.torch.compose.nostr.Relays
|
import at.torch.compose.nostr.Relays
|
||||||
import at.torch.compose.repository.ChatRepository
|
import at.torch.compose.repository.ChatRepository
|
||||||
import at.torch.compose.repository.NostrRepository
|
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.ImplementationPendingRoute
|
||||||
import at.torch.compose.ui.composable.navigation.routes.Route
|
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.ChatRoomCreationFormState
|
||||||
import at.torch.compose.ui.view.state.form.CreateProfileFormState
|
|
||||||
import co.touchlab.kermit.Logger
|
import co.touchlab.kermit.Logger
|
||||||
import com.vitorpamplona.quartz.marmot.mip01Groups.MarmotGroupData
|
import com.vitorpamplona.quartz.marmot.mip01Groups.MarmotGroupData
|
||||||
import com.vitorpamplona.quartz.marmot.mls.crypto.Ed25519
|
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.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.core.toHexKey
|
||||||
import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair
|
import com.vitorpamplona.quartz.nip01Core.crypto.KeyPair
|
||||||
import com.vitorpamplona.quartz.nip01Core.relay.normalizer.NormalizedRelayUrl
|
|
||||||
import com.vitorpamplona.quartz.utils.RandomInstance
|
import com.vitorpamplona.quartz.utils.RandomInstance
|
||||||
import fr.acinq.bitcoin.Crypto
|
|
||||||
import fr.acinq.phoenix.data.ActiveWallet
|
import fr.acinq.phoenix.data.ActiveWallet
|
||||||
import fr.acinq.phoenix.managers.nostrPrivateKey
|
import fr.acinq.phoenix.managers.nostrPrivateKey
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -101,7 +93,11 @@ class ChatRoomCreationViewModel(
|
|||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
onNavigateToChatRoom.invoke(
|
onNavigateToChatRoom.invoke(
|
||||||
ImplementationPendingRoute("Chat Room view ${localChatRoom.chatRoom.id}")
|
ChatRoomDetailRoute(
|
||||||
|
activeUserPublicKey = keyPair.pubKey.toHexKey(),
|
||||||
|
chatRoomId = localChatRoom.chatRoom.id,
|
||||||
|
relayHint = null
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-6
@@ -12,13 +12,12 @@ import androidx.lifecycle.viewmodel.viewModelFactory
|
|||||||
import at.torch.compose.ui.view.state.ChatRoomDetailUIState
|
import at.torch.compose.ui.view.state.ChatRoomDetailUIState
|
||||||
import co.touchlab.kermit.Logger
|
import co.touchlab.kermit.Logger
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||||
import fr.acinq.bitcoin.Crypto
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.IO
|
import kotlinx.coroutines.IO
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class ChatRoomDetailViewModel(
|
class ChatRoomDetailViewModel(
|
||||||
val directMessageId: String,
|
val chatRoomId: String,
|
||||||
val activeUserPublicKey: HexKey,
|
val activeUserPublicKey: HexKey,
|
||||||
val relayHint: String?,
|
val relayHint: String?,
|
||||||
initialChatRoomDetailUIState: ChatRoomDetailUIState,
|
initialChatRoomDetailUIState: ChatRoomDetailUIState,
|
||||||
@@ -36,10 +35,10 @@ class ChatRoomDetailViewModel(
|
|||||||
val isActionPending: MutableState<Boolean> = mutableStateOf(false)
|
val isActionPending: MutableState<Boolean> = mutableStateOf(false)
|
||||||
|
|
||||||
fun initiateChatRoomDetail() {
|
fun initiateChatRoomDetail() {
|
||||||
logger.d("compressed (most likely chat room): $directMessageId")
|
logger.d("compressed (most likely chat room): $chatRoomId")
|
||||||
// Get ChatRoomById
|
// Get ChatRoomById
|
||||||
viewModelScope.launch(Dispatchers.IO) {
|
viewModelScope.launch(Dispatchers.IO) {
|
||||||
val localChatRoom = chatRepository.getChatRoomByIdentifier(directMessageId)
|
val localChatRoom = chatRepository.getChatRoomByIdentifier(chatRoomId)
|
||||||
|
|
||||||
chatRoomDetailUIState = if (localChatRoom == null) {
|
chatRoomDetailUIState = if (localChatRoom == null) {
|
||||||
ChatRoomDetailUIState.Error
|
ChatRoomDetailUIState.Error
|
||||||
@@ -57,7 +56,7 @@ class ChatRoomDetailViewModel(
|
|||||||
|
|
||||||
fun factory(
|
fun factory(
|
||||||
activeUserPublicKey: HexKey,
|
activeUserPublicKey: HexKey,
|
||||||
publicKey: String,
|
chatRoomId: String,
|
||||||
relayHint: String?,
|
relayHint: String?,
|
||||||
initialChatRoomDetailUIState: ChatRoomDetailUIState = ChatRoomDetailUIState.Loading,
|
initialChatRoomDetailUIState: ChatRoomDetailUIState = ChatRoomDetailUIState.Loading,
|
||||||
nostrRepository: at.torch.compose.repository.NostrRepository,
|
nostrRepository: at.torch.compose.repository.NostrRepository,
|
||||||
@@ -66,7 +65,7 @@ class ChatRoomDetailViewModel(
|
|||||||
initializer {
|
initializer {
|
||||||
ChatRoomDetailViewModel(
|
ChatRoomDetailViewModel(
|
||||||
activeUserPublicKey = activeUserPublicKey,
|
activeUserPublicKey = activeUserPublicKey,
|
||||||
directMessageId = publicKey,
|
chatRoomId = chatRoomId,
|
||||||
relayHint = relayHint,
|
relayHint = relayHint,
|
||||||
initialChatRoomDetailUIState = initialChatRoomDetailUIState,
|
initialChatRoomDetailUIState = initialChatRoomDetailUIState,
|
||||||
nostrRepository = nostrRepository,
|
nostrRepository = nostrRepository,
|
||||||
|
|||||||
+1
-3
@@ -1,7 +1,5 @@
|
|||||||
package at.torch.compose.ui.view.model
|
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.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
@@ -133,7 +131,7 @@ class ChatRoomListViewModel(
|
|||||||
onNavigateToDirectMessageDetail.invoke(
|
onNavigateToDirectMessageDetail.invoke(
|
||||||
_root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute(
|
_root_ide_package_.at.torch.compose.ui.composable.navigation.routes.ChatRoomDetailRoute(
|
||||||
activeUserPublicKey = publicKey,
|
activeUserPublicKey = publicKey,
|
||||||
directMessageIdentifier = localChatRoom.chatRoom.id,
|
chatRoomId = localChatRoom.chatRoom.id,
|
||||||
relayHint = localChatRoom.localParticipants.firstOrNull { it.participant.participantPublicKey != localChatRoom.chatRoom.userPublicKey }?.participant?.relayHint
|
relayHint = localChatRoom.localParticipants.firstOrNull { it.participant.participantPublicKey != localChatRoom.chatRoom.userPublicKey }?.participant?.relayHint
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in new issue
Block a user