diff --git a/app/src/main/java/com/jerboa/model/InboxViewModel.kt b/app/src/main/java/com/jerboa/model/InboxViewModel.kt index 6a2f95c43..3f2bb4b9b 100644 --- a/app/src/main/java/com/jerboa/model/InboxViewModel.kt +++ b/app/src/main/java/com/jerboa/model/InboxViewModel.kt @@ -364,6 +364,7 @@ class InboxViewModel : ViewModel(), Initializable { fun markReplyAsRead( form: MarkCommentReplyAsRead, + onSuccess: () -> Unit, ) { viewModelScope.launch { markReplyAsReadRes = ApiState.Loading @@ -384,6 +385,7 @@ class InboxViewModel : ViewModel(), Initializable { val newRes = ApiState.Success(existing.data.copy(replies = mutable.toList())) repliesRes = newRes + onSuccess() } else -> {} @@ -397,6 +399,7 @@ class InboxViewModel : ViewModel(), Initializable { fun markPersonMentionAsRead( form: MarkPersonMentionAsRead, + onSuccess: () -> Unit, ) { viewModelScope.launch { markMentionAsReadRes = ApiState.Loading @@ -411,9 +414,9 @@ class InboxViewModel : ViewModel(), Initializable { existing.data.mentions, readRes.data.person_mention_view, ) - val newRes = - ApiState.Success(existing.data.copy(mentions = newMentions)) + val newRes = ApiState.Success(existing.data.copy(mentions = newMentions)) mentionsRes = newRes + onSuccess() } else -> {} @@ -427,6 +430,7 @@ class InboxViewModel : ViewModel(), Initializable { fun markPrivateMessageAsRead( form: MarkPrivateMessageAsRead, + onSuccess: () -> Unit, ) { viewModelScope.launch { markMessageAsReadRes = ApiState.Loading @@ -441,9 +445,9 @@ class InboxViewModel : ViewModel(), Initializable { existing.data.private_messages, readRes.data.private_message_view, ) - val newRes = - ApiState.Success(existing.data.copy(private_messages = newMessages)) + val newRes = ApiState.Success(existing.data.copy(private_messages = newMessages)) messagesRes = newRes + onSuccess() } else -> {} @@ -473,6 +477,7 @@ class InboxViewModel : ViewModel(), Initializable { fun markAllAsRead( form: MarkAllAsRead, + onComplete: () -> Unit, ) { viewModelScope.launch { markAllAsReadRes = ApiState.Loading @@ -507,6 +512,7 @@ class InboxViewModel : ViewModel(), Initializable { else -> {} } + onComplete() } } diff --git a/app/src/main/java/com/jerboa/model/SiteViewModel.kt b/app/src/main/java/com/jerboa/model/SiteViewModel.kt index cd3ca14f6..2701a6e10 100644 --- a/app/src/main/java/com/jerboa/model/SiteViewModel.kt +++ b/app/src/main/java/com/jerboa/model/SiteViewModel.kt @@ -1,5 +1,6 @@ package com.jerboa.model +import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue @@ -25,6 +26,8 @@ class SiteViewModel : ViewModel() { private var unreadCountRes: ApiState by mutableStateOf(ApiState.Empty) + val unreadCount by derivedStateOf { getUnreadCountTotal(unreadCountRes) } + var sortType by mutableStateOf(SortType.Active) private set var listingType by mutableStateOf(ListingType.Local) @@ -73,7 +76,7 @@ class SiteViewModel : ViewModel() { } } - fun getUnreadCountTotal(): Int { + private fun getUnreadCountTotal(unreadCountRes: ApiState): Int { return when (val res = unreadCountRes) { is ApiState.Success -> { val unreads = res.data diff --git a/app/src/main/java/com/jerboa/ui/components/drawer/DrawerActivity.kt b/app/src/main/java/com/jerboa/ui/components/drawer/DrawerActivity.kt index cc6f68e57..af7926688 100644 --- a/app/src/main/java/com/jerboa/ui/components/drawer/DrawerActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/drawer/DrawerActivity.kt @@ -42,7 +42,7 @@ fun MainDrawer( is ApiState.Success -> res.data.my_user else -> null }, - unreadCount = siteViewModel.getUnreadCountTotal(), + unreadCount = siteViewModel.unreadCount, accountViewModel = accountViewModel, onAddAccount = onClickLogin, isOpen = drawerState.isOpen, diff --git a/app/src/main/java/com/jerboa/ui/components/home/BottomNavActivity.kt b/app/src/main/java/com/jerboa/ui/components/home/BottomNavActivity.kt index 48b14e93f..959bd8f79 100644 --- a/app/src/main/java/com/jerboa/ui/components/home/BottomNavActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/home/BottomNavActivity.kt @@ -140,7 +140,7 @@ fun BottomNavActivity( if (appSettings.showBottomNav) { BottomAppBarAll( selectedTab = selectedTab, - unreadCounts = siteViewModel.getUnreadCountTotal(), + unreadCounts = siteViewModel.unreadCount, showTextDescriptionsInNavbar = appSettings.showTextDescriptionsInNavbar, onSelect = onSelectTab, ) diff --git a/app/src/main/java/com/jerboa/ui/components/inbox/InboxActivity.kt b/app/src/main/java/com/jerboa/ui/components/inbox/InboxActivity.kt index 4c3526925..220e8db14 100644 --- a/app/src/main/java/com/jerboa/ui/components/inbox/InboxActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/inbox/InboxActivity.kt @@ -96,7 +96,7 @@ fun InboxActivity( val snackbarHostState = remember { SnackbarHostState() } val ctx = LocalContext.current val account = getCurrentAccount(accountViewModel) - val unreadCount = siteViewModel.getUnreadCountTotal() + val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState()) val inboxViewModel: InboxViewModel = viewModel() @@ -112,6 +112,7 @@ fun InboxActivity( inboxViewModel.getMessages( inboxViewModel.getFormMessages(account.jwt), ) + siteViewModel.fetchUnreadCounts(GetUnreadCount(account.jwt)) } } @@ -121,7 +122,7 @@ fun InboxActivity( topBar = { InboxHeader( scrollBehavior = scrollBehavior, - unreadCount = unreadCount, + unreadCount = siteViewModel.unreadCount, openDrawer = { scope.launch { drawerState.open() @@ -149,13 +150,23 @@ fun InboxActivity( MarkAllAsRead( auth = acct.jwt, ), - ) - // TODO test this - // Update site counts - siteViewModel.fetchUnreadCounts( - GetUnreadCount( - auth = acct.jwt, - ), + onComplete = { + siteViewModel.fetchUnreadCounts( + GetUnreadCount( + auth = acct.jwt, + ), + ) + inboxViewModel.resetPages() + inboxViewModel.getReplies( + inboxViewModel.getFormReplies(account.jwt), + ) + inboxViewModel.getMentions( + inboxViewModel.getFormMentions(account.jwt), + ) + inboxViewModel.getMessages( + inboxViewModel.getFormMessages(account.jwt), + ) + }, ) } }, @@ -287,11 +298,13 @@ fun InboxTabs( read = !crv.comment_reply.read, auth = acct.jwt, ), - ) - siteViewModel.fetchUnreadCounts( - GetUnreadCount( - auth = acct.jwt, - ), + onSuccess = { + siteViewModel.fetchUnreadCounts( + GetUnreadCount( + auth = acct.jwt, + ), + ) + }, ) } } @@ -525,11 +538,13 @@ fun InboxTabs( read = !pm.person_mention.read, auth = acct.jwt, ), - ) - siteViewModel.fetchUnreadCounts( - GetUnreadCount( - auth = acct.jwt, - ), + onSuccess = { + siteViewModel.fetchUnreadCounts( + GetUnreadCount( + auth = acct.jwt, + ), + ) + }, ) } }, @@ -658,11 +673,13 @@ fun InboxTabs( read = !pm.private_message.read, auth = acct.jwt, ), - ) - siteViewModel.fetchUnreadCounts( - GetUnreadCount( - auth = acct.jwt, - ), + onSuccess = { + siteViewModel.fetchUnreadCounts( + GetUnreadCount( + auth = acct.jwt, + ), + ) + }, ) }, onPersonClick = appState::toProfile,