refactor: fetch settings when Authenticated frame arrives

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2023-10-31 20:46:09 +01:00
parent b08aaec999
commit 9bbc8f513c
4 changed files with 7 additions and 31 deletions

View File

@ -28,6 +28,8 @@ import chat.revolt.api.realtime.frames.receivable.UserUpdateFrame
import chat.revolt.api.realtime.frames.sendable.AuthorizationFrame import chat.revolt.api.realtime.frames.sendable.AuthorizationFrame
import chat.revolt.api.realtime.frames.sendable.PingFrame import chat.revolt.api.realtime.frames.sendable.PingFrame
import chat.revolt.api.routes.server.fetchMember import chat.revolt.api.routes.server.fetchMember
import chat.revolt.api.settings.GlobalState
import chat.revolt.api.settings.SyncedSettings
import io.ktor.client.plugins.websocket.ws import io.ktor.client.plugins.websocket.ws
import io.ktor.websocket.CloseReason import io.ktor.websocket.CloseReason
import io.ktor.websocket.Frame import io.ktor.websocket.Frame
@ -446,7 +448,8 @@ object RealtimeSocket {
} }
"Authenticated" -> { "Authenticated" -> {
/* no-op */ SyncedSettings.fetch()
GlobalState.hydrateWithSettings(SyncedSettings)
} }
else -> { else -> {

View File

@ -38,15 +38,13 @@ import chat.revolt.api.RevoltAPI
import chat.revolt.api.RevoltHttp import chat.revolt.api.RevoltHttp
import chat.revolt.api.internals.WebChallenge import chat.revolt.api.internals.WebChallenge
import chat.revolt.api.routes.onboard.needsOnboarding import chat.revolt.api.routes.onboard.needsOnboarding
import chat.revolt.api.settings.GlobalState
import chat.revolt.api.settings.SyncedSettings
import chat.revolt.components.screens.splash.DisconnectedScreen import chat.revolt.components.screens.splash.DisconnectedScreen
import chat.revolt.persistence.KVStorage import chat.revolt.persistence.KVStorage
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import io.ktor.client.request.get import io.ktor.client.request.get
import javax.inject.Inject
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel @HiltViewModel
@SuppressLint("StaticFieldLeak") @SuppressLint("StaticFieldLeak")
@ -130,19 +128,11 @@ class SplashScreenViewModel @Inject constructor(
RevoltAPI.loginAs(token) RevoltAPI.loginAs(token)
RevoltAPI.setSessionId(id) RevoltAPI.setSessionId(id)
loadSettings()
setNavigateTo("home") setNavigateTo("home")
} }
} }
} }
private fun loadSettings() {
viewModelScope.launch {
SyncedSettings.fetch()
GlobalState.hydrateWithSettings(SyncedSettings)
}
}
init { init {
checkLoggedInState() checkLoggedInState()
} }

View File

@ -42,15 +42,13 @@ import chat.revolt.api.RevoltAPI
import chat.revolt.api.routes.account.EmailPasswordAssessment import chat.revolt.api.routes.account.EmailPasswordAssessment
import chat.revolt.api.routes.account.negotiateAuthentication import chat.revolt.api.routes.account.negotiateAuthentication
import chat.revolt.api.routes.onboard.needsOnboarding import chat.revolt.api.routes.onboard.needsOnboarding
import chat.revolt.api.settings.GlobalState
import chat.revolt.api.settings.SyncedSettings
import chat.revolt.components.generic.AnyLink import chat.revolt.components.generic.AnyLink
import chat.revolt.components.generic.FormTextField import chat.revolt.components.generic.FormTextField
import chat.revolt.components.generic.Weblink import chat.revolt.components.generic.Weblink
import chat.revolt.persistence.KVStorage import chat.revolt.persistence.KVStorage
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel @HiltViewModel
class LoginViewModel @Inject constructor( class LoginViewModel @Inject constructor(
@ -76,11 +74,6 @@ class LoginViewModel @Inject constructor(
val mfaResponse: EmailPasswordAssessment? val mfaResponse: EmailPasswordAssessment?
get() = _mfaResponse get() = _mfaResponse
private suspend fun loadSettings(token: String) {
SyncedSettings.fetch(token)
GlobalState.hydrateWithSettings(SyncedSettings)
}
fun doLogin() { fun doLogin() {
_error = null _error = null
@ -115,7 +108,6 @@ class LoginViewModel @Inject constructor(
RevoltAPI.loginAs(token) RevoltAPI.loginAs(token)
RevoltAPI.setSessionId(response.firstUserHints.token) RevoltAPI.setSessionId(response.firstUserHints.token)
loadSettings(token)
_navigateTo = "home" _navigateTo = "home"
} catch (e: Error) { } catch (e: Error) {

View File

@ -42,14 +42,12 @@ import chat.revolt.api.routes.account.MfaResponseRecoveryCode
import chat.revolt.api.routes.account.MfaResponseTotpCode import chat.revolt.api.routes.account.MfaResponseTotpCode
import chat.revolt.api.routes.account.authenticateWithMfaRecoveryCode import chat.revolt.api.routes.account.authenticateWithMfaRecoveryCode
import chat.revolt.api.routes.account.authenticateWithMfaTotpCode import chat.revolt.api.routes.account.authenticateWithMfaTotpCode
import chat.revolt.api.settings.GlobalState
import chat.revolt.api.settings.SyncedSettings
import chat.revolt.components.generic.CollapsibleCard import chat.revolt.components.generic.CollapsibleCard
import chat.revolt.components.generic.FormTextField import chat.revolt.components.generic.FormTextField
import chat.revolt.persistence.KVStorage import chat.revolt.persistence.KVStorage
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import javax.inject.Inject
@HiltViewModel @HiltViewModel
class MfaScreenViewModel @Inject constructor( class MfaScreenViewModel @Inject constructor(
@ -79,11 +77,6 @@ class MfaScreenViewModel @Inject constructor(
_recoveryCode = code _recoveryCode = code
} }
private suspend fun loadSettings(token: String) {
SyncedSettings.fetch(token)
GlobalState.hydrateWithSettings(SyncedSettings)
}
fun tryAuthorizeTotp(mfaTicket: String) { fun tryAuthorizeTotp(mfaTicket: String) {
_error = null _error = null
viewModelScope.launch { viewModelScope.launch {
@ -102,7 +95,6 @@ class MfaScreenViewModel @Inject constructor(
RevoltAPI.loginAs(token) RevoltAPI.loginAs(token)
RevoltAPI.setSessionId(id) RevoltAPI.setSessionId(id)
loadSettings(token)
kvStorage.set("sessionToken", token) kvStorage.set("sessionToken", token)
kvStorage.set("sessionId", id) kvStorage.set("sessionId", id)
@ -133,7 +125,6 @@ class MfaScreenViewModel @Inject constructor(
RevoltAPI.loginAs(token) RevoltAPI.loginAs(token)
RevoltAPI.setSessionId(id) RevoltAPI.setSessionId(id)
loadSettings(token)
kvStorage.set("sessionToken", token) kvStorage.set("sessionToken", token)
kvStorage.set("sessionId", id) kvStorage.set("sessionId", id)