Don't show deleted chat

This commit is contained in:
Kgothatso Ngako
2026-07-13 00:44:32 +02:00
parent 30db090de8
commit d3eed07d7c
5 changed files with 33 additions and 27 deletions

View File

@@ -16,11 +16,11 @@ interface ChatRoomDao {
fun findChatRoomById(id: String): LocalChatRoom?
@Transaction
@Query("SELECT * FROM ChatRoom WHERE userPublicKey = :userPublicKey")
@Query("SELECT * FROM ChatRoom WHERE userPublicKey = :userPublicKey AND deletedAt IS NULL")
fun getChatRoomListByUserPublicKey(userPublicKey: String): List<LocalChatRoom>
@Transaction
@Query("SELECT * FROM ChatRoom WHERE userPublicKey = :userPublicKey")
@Query("SELECT * FROM ChatRoom WHERE userPublicKey = :userPublicKey AND deletedAt IS NULL")
fun observeChatRoomListByUserPublicKey(userPublicKey: String): Flow<List<LocalChatRoom>>
@Upsert

View File

@@ -49,6 +49,7 @@ import at.torch.compose.ui.composable.widgets.dialogs.NewChatBottomSheetDialog
import at.torch.compose.ui.composable.widgets.dialogs.StartDirectMessageToNpubOrNip05Dialog
import at.torch.compose.ui.composable.widgets.profile.ProfileAvatar
import at.torch.compose.ui.theme.TorchTheme
import at.torch.compose.ui.view.model.ChatRoomListViewModel
import at.torch.compose.ui.view.model.HomeScreenType
import at.torch.compose.ui.view.model.HomeViewModel
import at.torch.compose.ui.view.state.HomeScreenUIState
@@ -202,9 +203,9 @@ fun HomeScreen(
) { pageIndex ->
when (val homeScreenTypeType = HomeScreenType.entries[pageIndex]) {
HomeScreenType.Messages -> {
val chatRoomListViewModel: at.torch.compose.ui.view.model.ChatRoomListViewModel = viewModel(
val chatRoomListViewModel: ChatRoomListViewModel = viewModel(
key = homeScreenTypeType.name,
factory = at.torch.compose.ui.view.model.ChatRoomListViewModel.factory(
factory = ChatRoomListViewModel.factory(
initialChatRoomListUIState = at.torch.compose.ui.view.state.ChatRoomListUIState.Loading,
publicKey = homeScreenUIState.profileWithFollowing.profile.publicKey,
nostrRepository = nostrRepository,

View File

@@ -28,6 +28,9 @@ import androidx.lifecycle.viewmodel.viewModelFactory
import at.torch.compose.database.model.NegentropySynchronizeRequest
import at.torch.compose.database.model.types.SynchronizationFilter
import at.torch.compose.nostr.Relays
import at.torch.compose.repository.ChatRepository
import at.torch.compose.repository.NostrRepository
import at.torch.compose.ui.view.state.ChatRoomListUIState
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.marmot.mip03GroupMessages.GroupEvent
import com.vitorpamplona.quartz.nip59Giftwrap.wraps.GiftWrapEvent
@@ -36,13 +39,13 @@ import kotlinx.coroutines.IO
import kotlinx.coroutines.launch
class ChatRoomListViewModel(
initialChatRoomListUIState: at.torch.compose.ui.view.state.ChatRoomListUIState,
initialChatRoomListUIState: ChatRoomListUIState,
val publicKey: String,
val nostrRepository: at.torch.compose.repository.NostrRepository,
val chatRepository: at.torch.compose.repository.ChatRepository
val nostrRepository: NostrRepository,
val chatRepository: ChatRepository
): ViewModel() {
val logger = Logger.withTag(TAG)
var chatRoomListUIState: at.torch.compose.ui.view.state.ChatRoomListUIState by mutableStateOf(initialChatRoomListUIState)
var chatRoomListUIState: ChatRoomListUIState by mutableStateOf(initialChatRoomListUIState)
private set
fun initiate() {
@@ -58,7 +61,7 @@ class ChatRoomListViewModel(
publicKey
).collect { chatRooms ->
logger.d("ChatRoomList: $chatRooms")
chatRoomListUIState = at.torch.compose.ui.view.state.ChatRoomListUIState.Loaded(
chatRoomListUIState = ChatRoomListUIState.Loaded(
chatRoomList = chatRooms
)
}
@@ -137,7 +140,7 @@ class ChatRoomListViewModel(
horizontalAlignment = Alignment.CenterHorizontally
) {
when (val chatRoomListUIState = chatRoomListUIState) {
at.torch.compose.ui.view.state.ChatRoomListUIState.Error -> {
ChatRoomListUIState.Error -> {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
@@ -150,7 +153,7 @@ class ChatRoomListViewModel(
)
}
}
is at.torch.compose.ui.view.state.ChatRoomListUIState.Loaded -> {
is ChatRoomListUIState.Loaded -> {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
@@ -194,7 +197,7 @@ class ChatRoomListViewModel(
}
}
}
at.torch.compose.ui.view.state.ChatRoomListUIState.Loading -> {
ChatRoomListUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
@@ -221,10 +224,10 @@ class ChatRoomListViewModel(
const val TAG = "ChatRoomListViewModel"
fun factory(
initialChatRoomListUIState: at.torch.compose.ui.view.state.ChatRoomListUIState = at.torch.compose.ui.view.state.ChatRoomListUIState.Loading,
initialChatRoomListUIState: ChatRoomListUIState = ChatRoomListUIState.Loading,
publicKey: String,
nostrRepository: at.torch.compose.repository.NostrRepository,
chatRepository: at.torch.compose.repository.ChatRepository
nostrRepository: NostrRepository,
chatRepository: ChatRepository
): ViewModelProvider.Factory = viewModelFactory {
initializer {
ChatRoomListViewModel(

View File

@@ -26,6 +26,7 @@ import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import at.torch.compose.database.model.NegentropySynchronizeRequest
import at.torch.compose.ui.composable.widgets.feed.ListView
import at.torch.compose.ui.view.state.FeedListUIState
import co.touchlab.kermit.Logger
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
@@ -34,12 +35,12 @@ import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
class FeedListViewModel(
initialFeedListUIState: at.torch.compose.ui.view.state.FeedListUIState,
initialFeedListUIState: FeedListUIState,
val synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter,
val nostrRepository: at.torch.compose.repository.NostrRepository
): ViewModel() {
val logger = Logger.withTag(TAG)
var feedListUIState: at.torch.compose.ui.view.state.FeedListUIState by mutableStateOf(initialFeedListUIState)
var feedListUIState: FeedListUIState by mutableStateOf(initialFeedListUIState)
private set
val isSynchronizationPending: MutableState<Boolean> = mutableStateOf(false)
@@ -71,7 +72,7 @@ class FeedListViewModel(
nostrRepository.observeNostrFeed(
synchronizationFilter
).distinctUntilChanged().first().let { localNostrEvents ->
feedListUIState = at.torch.compose.ui.view.state.FeedListUIState.Loaded(
feedListUIState = FeedListUIState.Loaded(
localNostrEvents = localNostrEvents
)
}
@@ -109,7 +110,7 @@ class FeedListViewModel(
horizontalAlignment = Alignment.CenterHorizontally
) {
when (val feedListUIState = feedListUIState) {
at.torch.compose.ui.view.state.FeedListUIState.Error -> {
FeedListUIState.Error -> {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
@@ -122,7 +123,7 @@ class FeedListViewModel(
)
}
}
is at.torch.compose.ui.view.state.FeedListUIState.Loaded -> {
is FeedListUIState.Loaded -> {
if (feedListUIState.localNostrEvents.isEmpty()) {
Column(
modifier = Modifier.fillMaxWidth(),
@@ -160,7 +161,7 @@ class FeedListViewModel(
}
}
at.torch.compose.ui.view.state.FeedListUIState.Loading -> {
FeedListUIState.Loading -> {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
@@ -187,7 +188,7 @@ class FeedListViewModel(
const val TAG = "FeedListViewModel"
fun factory(
initialFeedListUIState: at.torch.compose.ui.view.state.FeedListUIState = at.torch.compose.ui.view.state.FeedListUIState.Loading,
initialFeedListUIState: FeedListUIState = FeedListUIState.Loading,
synchronizationFilter: at.torch.compose.database.model.types.SynchronizationFilter,
nostrRepository: at.torch.compose.repository.NostrRepository,
): ViewModelProvider.Factory = viewModelFactory {

View File

@@ -10,6 +10,7 @@ import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.initializer
import androidx.lifecycle.viewmodel.viewModelFactory
import at.torch.compose.database.model.types.SynchronizationFilter
import at.torch.compose.ui.view.state.HomeScreenUIState
import co.touchlab.kermit.Logger
import com.vitorpamplona.quartz.marmot.mip03GroupMessages.GroupEvent
import com.vitorpamplona.quartz.nip01Core.core.HexKey
@@ -26,7 +27,7 @@ enum class HomeScreenType {
class HomeViewModel(
val activeUserPublicKey: HexKey,
val initialHomeScreenUIState: at.torch.compose.ui.view.state.HomeScreenUIState,
val initialHomeScreenUIState: HomeScreenUIState,
val nostrRepository: at.torch.compose.repository.NostrRepository,
val pagerState: PagerState
): ViewModel() {
@@ -34,7 +35,7 @@ class HomeViewModel(
val logger = Logger.withTag(TAG)
var homeScreenUIState: at.torch.compose.ui.view.state.HomeScreenUIState by mutableStateOf(initialHomeScreenUIState)
var homeScreenUIState: HomeScreenUIState by mutableStateOf(initialHomeScreenUIState)
private set
fun initiate() {
@@ -48,11 +49,11 @@ class HomeViewModel(
activeUserPublicKey
).collect { profileWithFollowing ->
homeScreenUIState = if (profileWithFollowing != null) {
at.torch.compose.ui.view.state.HomeScreenUIState.Loaded(
HomeScreenUIState.Loaded(
profileWithFollowing = profileWithFollowing
)
} else {
at.torch.compose.ui.view.state.HomeScreenUIState.Error
HomeScreenUIState.Error
}
}
}
@@ -63,7 +64,7 @@ class HomeViewModel(
fun factory(
activeUserPublicKey: HexKey,
initialHomeScreenUIState: at.torch.compose.ui.view.state.HomeScreenUIState,
initialHomeScreenUIState: HomeScreenUIState,
nostrRepository: at.torch.compose.repository.NostrRepository,
pagerState: PagerState
): ViewModelProvider.Factory = viewModelFactory {