Likely fix background crashes

This commit is contained in:
Jobobby04 2021-05-10 22:00:56 -04:00
parent be6637c7fd
commit 2ec5581e8c
3 changed files with 25 additions and 17 deletions

View File

@ -272,7 +272,7 @@ class MigrationListController(bundle: Bundle? = null) :
override fun updateCount() { override fun updateCount() {
launchUI { launchUI {
if (router.backstack.last().controller() == this@MigrationListController) { if (router.backstack.lastOrNull()?.controller() == this@MigrationListController) {
setTitle() setTitle()
} }
} }

View File

@ -60,31 +60,34 @@ class MangaDexLoginHelper(val client: OkHttpClient, val preferences: Preferences
val jsonString = MdUtil.jsonParser.encodeToString(loginRequest) val jsonString = MdUtil.jsonParser.encodeToString(loginRequest)
val postResult = client.newCall( val postResult = runCatching {
POST( client.newCall(
MdUtil.loginUrl, POST(
Headers.Builder().build(), MdUtil.loginUrl,
jsonString.toRequestBody("application/json".toMediaType()) Headers.Builder().build(),
) jsonString.toRequestBody("application/json".toMediaType())
).await() )
).await()
}
val response = postResult.getOrNull() ?: return@withIOContext LoginResult.Failure(postResult.exceptionOrNull())
// if it fails to parse then login failed // if it fails to parse then login failed
val loginResponse = try { val loginResponse = try {
postResult.parseAs<LoginResponse>(MdUtil.jsonParser) response.parseAs<LoginResponse>(MdUtil.jsonParser)
} catch (e: SerializationException) { } catch (e: SerializationException) {
null null
} }
if (postResult.code == 200 && loginResponse != null) { if (response.code == 200 && loginResponse != null) {
LoginResult.Success(loginResponse.token) LoginResult.Success(loginResponse.token)
} else { } else {
LoginResult.Failure LoginResult.Failure()
} }
} }
} }
sealed class LoginResult { sealed class LoginResult {
object Failure : LoginResult() data class Failure(val e: Throwable? = null) : LoginResult()
data class Success(val token: LoginBodyToken) : LoginResult() data class Success(val token: LoginBodyToken) : LoginResult()
} }
@ -93,7 +96,7 @@ class MangaDexLoginHelper(val client: OkHttpClient, val preferences: Preferences
val password = preferences.trackPassword(mdList) val password = preferences.trackPassword(mdList)
if (username.isNullOrBlank() || password.isNullOrBlank()) { if (username.isNullOrBlank() || password.isNullOrBlank()) {
xLogI("No username or password stored, can't login") xLogI("No username or password stored, can't login")
return LoginResult.Failure return LoginResult.Failure()
} }
return login(username, password) return login(username, password)
} }

View File

@ -18,7 +18,6 @@ class TokenAuthenticator(private val loginHelper: MangaDexLoginHelper) : Authent
return if (token != null) { return if (token != null) {
response.request.newBuilder().header("Authorization", token).build() response.request.newBuilder().header("Authorization", token).build()
} else { } else {
// throw Exception("Unable to authenticate request, please re login")
null null
} }
} }
@ -28,7 +27,7 @@ class TokenAuthenticator(private val loginHelper: MangaDexLoginHelper) : Authent
var validated = false var validated = false
runBlocking { runBlocking {
val checkToken = try { val checkTokenResult = runCatching {
loginHelper.isAuthenticated( loginHelper.isAuthenticated(
MdUtil.getAuthHeaders( MdUtil.getAuthHeaders(
Headers.Builder().build(), Headers.Builder().build(),
@ -36,8 +35,14 @@ class TokenAuthenticator(private val loginHelper: MangaDexLoginHelper) : Authent
loginHelper.mdList loginHelper.mdList
) )
) )
} catch (e: NoSessionException) { }
this@TokenAuthenticator.xLogD("Session token does not exist") val checkToken = if (checkTokenResult.isSuccess) {
checkTokenResult.getOrNull() ?: false
} else {
val e = checkTokenResult.exceptionOrNull()
if (e is NoSessionException) {
this@TokenAuthenticator.xLogD("Session token does not exist")
}
false false
} }