mirror of
https://github.com/LiveFastEatTrashRaccoon/RaccoonForLemmy.git
synced 2025-02-09 11:58:49 +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.persistence.repository.AccountRepository
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.network.NetworkManager
|
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 com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.repository.SiteRepository
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.IO
|
import kotlinx.coroutines.IO
|
||||||
@ -16,6 +17,8 @@ internal class DefaultIdentityRepository(
|
|||||||
|
|
||||||
override val authToken = MutableStateFlow<String?>(null)
|
override val authToken = MutableStateFlow<String?>(null)
|
||||||
override val isLogged = MutableStateFlow<Boolean?>(null)
|
override val isLogged = MutableStateFlow<Boolean?>(null)
|
||||||
|
override var cachedUser: UserModel? = null
|
||||||
|
private set
|
||||||
|
|
||||||
override suspend fun startup() = withContext(Dispatchers.IO) {
|
override suspend fun startup() = withContext(Dispatchers.IO) {
|
||||||
val account = accountRepository.getActive()
|
val account = accountRepository.getActive()
|
||||||
@ -33,6 +36,7 @@ internal class DefaultIdentityRepository(
|
|||||||
|
|
||||||
override fun clearToken() {
|
override fun clearToken() {
|
||||||
authToken.value = ""
|
authToken.value = ""
|
||||||
|
cachedUser = null
|
||||||
isLogged.value = false
|
isLogged.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,8 +46,8 @@ internal class DefaultIdentityRepository(
|
|||||||
isLogged.value = false
|
isLogged.value = false
|
||||||
} else {
|
} else {
|
||||||
val newIsLogged = if (networkManager.isNetworkAvailable()) {
|
val newIsLogged = if (networkManager.isNetworkAvailable()) {
|
||||||
val currentUser = siteRepository.getCurrentUser(auth)
|
cachedUser = siteRepository.getCurrentUser(auth)
|
||||||
currentUser != null
|
cachedUser != null
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
package com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository
|
package com.github.diegoberaldin.raccoonforlemmy.domain.identity.repository
|
||||||
|
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.UserModel
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
||||||
interface IdentityRepository {
|
interface IdentityRepository {
|
||||||
|
|
||||||
val authToken: StateFlow<String?>
|
val authToken: StateFlow<String?>
|
||||||
val isLogged: StateFlow<Boolean?>
|
val isLogged: StateFlow<Boolean?>
|
||||||
|
val cachedUser: UserModel?
|
||||||
|
|
||||||
suspend fun startup()
|
suspend fun startup()
|
||||||
|
|
||||||
fun storeToken(
|
fun storeToken(jwt: String)
|
||||||
jwt: String,
|
|
||||||
)
|
|
||||||
|
|
||||||
fun clearToken()
|
fun clearToken()
|
||||||
|
|
||||||
|
@ -41,6 +41,7 @@ internal class DefaultLoginUseCase(
|
|||||||
} else {
|
} else {
|
||||||
val accountSettings = siteRepository.getAccountSettings(auth)
|
val accountSettings = siteRepository.getAccountSettings(auth)
|
||||||
identityRepository.storeToken(auth)
|
identityRepository.storeToken(auth)
|
||||||
|
identityRepository.refreshLoggedState()
|
||||||
|
|
||||||
val account = AccountModel(
|
val account = AccountModel(
|
||||||
username = username,
|
username = username,
|
||||||
|
@ -28,6 +28,7 @@ internal class DefaultSwitchAccountUseCase(
|
|||||||
notificationCenter.send(NotificationCenterEvent.Logout)
|
notificationCenter.send(NotificationCenterEvent.Logout)
|
||||||
serviceProvider.changeInstance(instance)
|
serviceProvider.changeInstance(instance)
|
||||||
identityRepository.storeToken(jwt)
|
identityRepository.storeToken(jwt)
|
||||||
|
identityRepository.refreshLoggedState()
|
||||||
|
|
||||||
val newSettings = settingsRepository.getSettings(accountId)
|
val newSettings = settingsRepository.getSettings(accountId)
|
||||||
settingsRepository.changeCurrentSettings(newSettings)
|
settingsRepository.changeCurrentSettings(newSettings)
|
||||||
|
@ -98,9 +98,19 @@ class ProfileLoggedViewModel(
|
|||||||
}.launchIn(this)
|
}.launchIn(this)
|
||||||
|
|
||||||
if (uiState.value.posts.isEmpty()) {
|
if (uiState.value.posts.isEmpty()) {
|
||||||
withContext(Dispatchers.IO) {
|
val userFromCache = identityRepository.cachedUser
|
||||||
refreshUser()
|
if (userFromCache != null) {
|
||||||
refresh(initial = true)
|
updateState {
|
||||||
|
it.copy(
|
||||||
|
user = userFromCache,
|
||||||
|
initial = false,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
withContext(Dispatchers.IO) {
|
||||||
|
refreshUser()
|
||||||
|
refresh(initial = true)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user