From 40117122c701b88ba0b32b50ff6e0ea0b757b8b6 Mon Sep 17 00:00:00 2001 From: Antoine POPINEAU Date: Fri, 22 Nov 2019 00:13:22 +0100 Subject: [PATCH] Display error messages from Funkwhale's API on login error. --- .../apognu/otter/activities/LoginActivity.kt | 34 +++++++++++++------ 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/github/apognu/otter/activities/LoginActivity.kt b/app/src/main/java/com/github/apognu/otter/activities/LoginActivity.kt index cba1e1f..8f1bee6 100644 --- a/app/src/main/java/com/github/apognu/otter/activities/LoginActivity.kt +++ b/app/src/main/java/com/github/apognu/otter/activities/LoginActivity.kt @@ -8,15 +8,17 @@ import com.github.apognu.otter.R import com.github.apognu.otter.fragments.LoginDialog import com.github.apognu.otter.utils.AppContext import com.github.kittinunf.fuel.Fuel -import com.github.kittinunf.fuel.coroutines.awaitObjectResult +import com.github.kittinunf.fuel.coroutines.awaitObjectResponseResult import com.github.kittinunf.fuel.gson.gsonDeserializerOf +import com.github.kittinunf.result.Result +import com.google.gson.Gson import com.preference.PowerPreference import kotlinx.android.synthetic.main.activity_login.* import kotlinx.coroutines.Dispatchers.Main import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch -data class FwCredentials(val token: String) +data class FwCredentials(val token: String, val non_field_errors: List) class LoginActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -64,28 +66,38 @@ class LoginActivity : AppCompatActivity() { GlobalScope.launch(Main) { try { - val result = Fuel.post("$hostname/api/v1/token/", body) - .awaitObjectResult(gsonDeserializerOf(FwCredentials::class.java)) + val (_, response, result) = Fuel.post("$hostname/api/v1/token/", body) + .awaitObjectResponseResult(gsonDeserializerOf(FwCredentials::class.java)) - result.fold( - { data -> + when (result) { + is Result.Success -> { PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).apply { setString("hostname", hostname) setString("username", username) setString("password", password) - setString("access_token", data.token) + setString("access_token", result.get().token) } dialog.dismiss() startActivity(Intent(this@LoginActivity, MainActivity::class.java)) finish() - }, - { error -> + } + + is Result.Failure -> { dialog.dismiss() - hostname_field.error = error.localizedMessage + val error = Gson().fromJson(String(response.data), FwCredentials::class.java) + + hostname_field.error = null + username_field.error = null + + if (error != null && error.non_field_errors.isNotEmpty()) { + username_field.error = error.non_field_errors[0] + } else { + hostname_field.error = result.error.localizedMessage + } } - ) + } } catch (e: Exception) { dialog.dismiss()