From f0623ca9a3f202e9183975f1582dfd8265d24b65 Mon Sep 17 00:00:00 2001 From: Diego Beraldin Date: Sun, 31 Dec 2023 14:46:59 +0100 Subject: [PATCH] fix: inbox reload when changing type from default and navigating (#406) --- .../notifications/ContentResetCoordinator.kt | 1 + .../DefaultContentResetCoordinator.kt | 1 + .../feature/inbox/di/InboxModule.kt | 1 + .../feature/inbox/main/InboxViewModel.kt | 20 +++++++++++++++---- .../settings/main/SettingsViewModel.kt | 1 + 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/ContentResetCoordinator.kt b/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/ContentResetCoordinator.kt index a53a81f7e..a6838dc34 100644 --- a/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/ContentResetCoordinator.kt +++ b/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/ContentResetCoordinator.kt @@ -3,4 +3,5 @@ package com.github.diegoberaldin.raccoonforlemmy.core.notifications interface ContentResetCoordinator { var resetHome: Boolean var resetExplore: Boolean + var resetInbox: Boolean } diff --git a/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/DefaultContentResetCoordinator.kt b/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/DefaultContentResetCoordinator.kt index 01bcea0a2..7f7ac2f42 100644 --- a/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/DefaultContentResetCoordinator.kt +++ b/core/notifications/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/notifications/DefaultContentResetCoordinator.kt @@ -4,4 +4,5 @@ class DefaultContentResetCoordinator : ContentResetCoordinator { override var resetHome = false override var resetExplore = false + override var resetInbox = false } diff --git a/feature/inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/di/InboxModule.kt b/feature/inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/di/InboxModule.kt index 0a79432ec..02a461019 100644 --- a/feature/inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/di/InboxModule.kt +++ b/feature/inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/di/InboxModule.kt @@ -22,6 +22,7 @@ val inboxTabModule = module { coordinator = get(), settingsRepository = get(), notificationCenter = get(), + contentResetCoordinator = get(), ) } } diff --git a/feature/inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/main/InboxViewModel.kt b/feature/inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/main/InboxViewModel.kt index bcbca3006..cdc152113 100644 --- a/feature/inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/main/InboxViewModel.kt +++ b/feature/inbox/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/inbox/main/InboxViewModel.kt @@ -2,6 +2,7 @@ package com.github.diegoberaldin.raccoonforlemmy.feature.inbox.main import com.github.diegoberaldin.raccoonforlemmy.core.architecture.DefaultMviModel import com.github.diegoberaldin.raccoonforlemmy.core.architecture.MviModel +import com.github.diegoberaldin.raccoonforlemmy.core.notifications.ContentResetCoordinator import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenter import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationCenterEvent import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.SettingsRepository @@ -22,9 +23,12 @@ class InboxViewModel( private val coordinator: InboxCoordinator, private val settingsRepository: SettingsRepository, private val notificationCenter: NotificationCenter, + private val contentResetCoordinator: ContentResetCoordinator, ) : InboxMviModel, MviModel by mvi { + private var firstLoad = true + override fun onStarted() { mvi.onStarted() mvi.scope?.launch { @@ -47,10 +51,18 @@ class InboxViewModel( changeUnreadOnly(evt.unreadOnly) }.launchIn(this) - val settingsUnreadOnly = - settingsRepository.currentSettings.value.defaultInboxType.toInboxUnreadOnly() - if (uiState.value.unreadOnly != settingsUnreadOnly) { - changeUnreadOnly(settingsUnreadOnly) + if (contentResetCoordinator.resetInbox) { + contentResetCoordinator.resetInbox = false + // apply new inbox type + firstLoad = true + } + if (firstLoad) { + firstLoad = false + val settingsUnreadOnly = + settingsRepository.currentSettings.value.defaultInboxType.toInboxUnreadOnly() + if (uiState.value.unreadOnly != settingsUnreadOnly) { + changeUnreadOnly(settingsUnreadOnly) + } } } } diff --git a/feature/settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/main/SettingsViewModel.kt b/feature/settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/main/SettingsViewModel.kt index 9d766db8f..1f4058cd8 100644 --- a/feature/settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/main/SettingsViewModel.kt +++ b/feature/settings/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/feature/settings/main/SettingsViewModel.kt @@ -669,6 +669,7 @@ class SettingsViewModel( defaultInboxType = value.toInboxDefaultType(), ) saveSettings(settings) + contentResetCoordinator.resetInbox = true } }