fix: sync settings on login correctly

Signed-off-by: Infi <wingit@geist.ga>
This commit is contained in:
Infi 2023-07-13 17:55:37 +02:00
parent 2a37f406c3
commit c7d5db8b7c
4 changed files with 24 additions and 15 deletions

View File

@ -16,9 +16,9 @@ import kotlinx.serialization.json.JsonArray
@Serializable @Serializable
data class SyncedSetting(val timestamp: Long, val value: String) data class SyncedSetting(val timestamp: Long, val value: String)
suspend fun getKeys(vararg keys: String): Map<String, SyncedSetting> { suspend fun getKeys(vararg keys: String, revoltToken: String): Map<String, SyncedSetting> {
val response = RevoltHttp.post("/sync/settings/fetch") { val response = RevoltHttp.post("/sync/settings/fetch") {
headers.append(RevoltAPI.TOKEN_HEADER_NAME, RevoltAPI.sessionToken) headers.append(RevoltAPI.TOKEN_HEADER_NAME, revoltToken)
// format: {"keys": ["key1", "key2"]} // format: {"keys": ["key1", "key2"]}
setBody( setBody(
@ -50,6 +50,10 @@ suspend fun getKeys(vararg keys: String): Map<String, SyncedSetting> {
} }
} }
suspend fun getKeys(vararg keys: String): Map<String, SyncedSetting> {
return getKeys(*keys, revoltToken = RevoltAPI.sessionToken)
}
suspend fun setKey(key: String, value: String) { suspend fun setKey(key: String, value: String) {
RevoltHttp.post("/sync/settings/set") { RevoltHttp.post("/sync/settings/set") {
headers.append(RevoltAPI.TOKEN_HEADER_NAME, RevoltAPI.sessionToken) headers.append(RevoltAPI.TOKEN_HEADER_NAME, RevoltAPI.sessionToken)

View File

@ -1,6 +1,7 @@
package chat.revolt.api.settings package chat.revolt.api.settings
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import chat.revolt.api.RevoltAPI
import chat.revolt.api.RevoltJson import chat.revolt.api.RevoltJson
import chat.revolt.api.routes.sync.getKeys import chat.revolt.api.routes.sync.getKeys
import chat.revolt.api.routes.sync.setKey import chat.revolt.api.routes.sync.setKey
@ -16,9 +17,9 @@ object SyncedSettings {
val android: AndroidSpecificSettings val android: AndroidSpecificSettings
get() = _android.value get() = _android.value
suspend fun fetch() { suspend fun fetch(revoltToken: String = RevoltAPI.sessionToken) {
try { try {
val settings = getKeys("ordering", "android") val settings = getKeys("ordering", "android", revoltToken = revoltToken)
settings["ordering"]?.let { settings["ordering"]?.let {
_ordering.value = RevoltJson.decodeFromString( _ordering.value = RevoltJson.decodeFromString(

View File

@ -76,8 +76,8 @@ class LoginViewModel @Inject constructor(
val mfaResponse: EmailPasswordAssessment? val mfaResponse: EmailPasswordAssessment?
get() = _mfaResponse get() = _mfaResponse
private suspend fun loadSettings() { private suspend fun loadSettings(token: String) {
SyncedSettings.fetch() SyncedSettings.fetch(token)
GlobalState.hydrateWithSettings(SyncedSettings) GlobalState.hydrateWithSettings(SyncedSettings)
} }
@ -111,8 +111,8 @@ class LoginViewModel @Inject constructor(
return@launch return@launch
} }
loadSettings()
RevoltAPI.loginAs(token) RevoltAPI.loginAs(token)
loadSettings(token)
_navigateTo = "home" _navigateTo = "home"
} catch (e: Error) { } catch (e: Error) {

View File

@ -75,8 +75,8 @@ class MfaScreenViewModel @Inject constructor(
_recoveryCode = code _recoveryCode = code
} }
private suspend fun loadSettings() { private suspend fun loadSettings(token: String) {
SyncedSettings.fetch() SyncedSettings.fetch(token)
GlobalState.hydrateWithSettings(SyncedSettings) GlobalState.hydrateWithSettings(SyncedSettings)
} }
@ -93,9 +93,11 @@ class MfaScreenViewModel @Inject constructor(
) )
try { try {
loadSettings() val token = response.firstUserHints!!.token
RevoltAPI.loginAs(response.firstUserHints!!.token)
kvStorage.set("sessionToken", response.firstUserHints.token) RevoltAPI.loginAs(token)
loadSettings(token)
kvStorage.set("sessionToken", token)
_navigateToHome = true _navigateToHome = true
} catch (e: Error) { } catch (e: Error) {
@ -119,9 +121,11 @@ class MfaScreenViewModel @Inject constructor(
) )
try { try {
loadSettings() val token = response.firstUserHints!!.token
RevoltAPI.loginAs(response.firstUserHints!!.token)
kvStorage.set("sessionToken", response.firstUserHints.token) RevoltAPI.loginAs(token)
loadSettings(token)
kvStorage.set("sessionToken", token)
_navigateToHome = true _navigateToHome = true
} catch (e: Error) { } catch (e: Error) {