mirror of
https://github.com/LiveFastEatTrashRaccoon/RaccoonForLemmy.git
synced 2025-02-03 07:57:39 +01:00
enhancement: improve profile loading (#575)
This commit is contained in:
parent
c1d02449cf
commit
fcc8d179f4
@ -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
|
||||
}
|
||||
|
@ -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()
|
||||
|
||||
|
@ -41,6 +41,7 @@ internal class DefaultLoginUseCase(
|
||||
} else {
|
||||
val accountSettings = siteRepository.getAccountSettings(auth)
|
||||
identityRepository.storeToken(auth)
|
||||
identityRepository.refreshLoggedState()
|
||||
|
||||
val account = AccountModel(
|
||||
username = username,
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user