Don't show deleted chat
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user