enhancement: improve profile loading (#575)

This commit is contained in:
Diego Beraldin 2024-03-06 22:08:58 +01:00 committed by GitHub
parent c1d02449cf
commit fcc8d179f4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 24 additions and 8 deletions

View File

@ -2,6 +2,7 @@ package com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository
import com.github.diegoberaldin.raccoonforlemmy.core.persistence.repository.AccountRepository
import com.github.diegoberaldin.raccoonforlemmy.core.utils.network.NetworkManager
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
@ -16,6 +17,8 @@ internal class DefaultIdentityRepository(
override val authToken = MutableStateFlow<String?>(null)
override val isLogged = MutableStateFlow<Boolean?>(null)
override var cachedUser: UserModel? = null
private set
override suspend fun startup() = withContext(Dispatchers.IO) {
val account = accountRepository.getActive()
@ -33,6 +36,7 @@ internal class DefaultIdentityRepository(
override fun clearToken() {
authToken.value = ""
cachedUser = null
isLogged.value = false
}
@ -42,8 +46,8 @@ internal class DefaultIdentityRepository(
isLogged.value = false
} else {
val newIsLogged = if (networkManager.isNetworkAvailable()) {
val currentUser = siteRepository.getCurrentUser(auth)
currentUser != null
cachedUser = siteRepository.getCurrentUser(auth)
cachedUser != null
} else {
null
}

View File

@ -1,17 +1,17 @@
package com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel
import kotlinx.coroutines.flow.StateFlow
interface IdentityRepository {
val authToken: StateFlow<String?>
val isLogged: StateFlow<Boolean?>
val cachedUser: UserModel?
suspend fun startup()
fun storeToken(
jwt: String,
)
fun storeToken(jwt: String)
fun clearToken()

View File

@ -41,6 +41,7 @@ internal class DefaultLoginUseCase(
} else {
val accountSettings = siteRepository.getAccountSettings(auth)
identityRepository.storeToken(auth)
identityRepository.refreshLoggedState()
val account = AccountModel(
username = username,

View File

@ -28,6 +28,7 @@ internal class DefaultSwitchAccountUseCase(
notificationCenter.send(NotificationCenterEvent.Logout)
serviceProvider.changeInstance(instance)
identityRepository.storeToken(jwt)
identityRepository.refreshLoggedState()
val newSettings = settingsRepository.getSettings(accountId)
settingsRepository.changeCurrentSettings(newSettings)

View File

@ -98,9 +98,19 @@ class ProfileLoggedViewModel(
}.launchIn(this)
if (uiState.value.posts.isEmpty()) {
withContext(Dispatchers.IO) {
refreshUser()
refresh(initial = true)
val userFromCache = identityRepository.cachedUser
if (userFromCache != null) {
updateState {
it.copy(
user = userFromCache,
initial = false,
)
}
} else {
withContext(Dispatchers.IO) {
refreshUser()
refresh(initial = true)
}
}
}
}