diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt index a891ffa40..25ba5aad9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/advanced/process/MigrationListController.kt @@ -272,7 +272,7 @@ class MigrationListController(bundle: Bundle? = null) : override fun updateCount() { launchUI { - if (router.backstack.last().controller() == this@MigrationListController) { + if (router.backstack.lastOrNull()?.controller() == this@MigrationListController) { setTitle() } } diff --git a/app/src/main/java/exh/md/network/MangaDexLoginHelper.kt b/app/src/main/java/exh/md/network/MangaDexLoginHelper.kt index 02018d163..cd3ed4d24 100644 --- a/app/src/main/java/exh/md/network/MangaDexLoginHelper.kt +++ b/app/src/main/java/exh/md/network/MangaDexLoginHelper.kt @@ -60,31 +60,34 @@ class MangaDexLoginHelper(val client: OkHttpClient, val preferences: Preferences val jsonString = MdUtil.jsonParser.encodeToString(loginRequest) - val postResult = client.newCall( - POST( - MdUtil.loginUrl, - Headers.Builder().build(), - jsonString.toRequestBody("application/json".toMediaType()) - ) - ).await() + val postResult = runCatching { + client.newCall( + POST( + MdUtil.loginUrl, + Headers.Builder().build(), + jsonString.toRequestBody("application/json".toMediaType()) + ) + ).await() + } + val response = postResult.getOrNull() ?: return@withIOContext LoginResult.Failure(postResult.exceptionOrNull()) // if it fails to parse then login failed val loginResponse = try { - postResult.parseAs(MdUtil.jsonParser) + response.parseAs(MdUtil.jsonParser) } catch (e: SerializationException) { null } - if (postResult.code == 200 && loginResponse != null) { + if (response.code == 200 && loginResponse != null) { LoginResult.Success(loginResponse.token) } else { - LoginResult.Failure + LoginResult.Failure() } } } sealed class LoginResult { - object Failure : LoginResult() + data class Failure(val e: Throwable? = null) : 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) if (username.isNullOrBlank() || password.isNullOrBlank()) { xLogI("No username or password stored, can't login") - return LoginResult.Failure + return LoginResult.Failure() } return login(username, password) } diff --git a/app/src/main/java/exh/md/network/TokenAuthenticator.kt b/app/src/main/java/exh/md/network/TokenAuthenticator.kt index 18c8d530a..698657447 100644 --- a/app/src/main/java/exh/md/network/TokenAuthenticator.kt +++ b/app/src/main/java/exh/md/network/TokenAuthenticator.kt @@ -18,7 +18,6 @@ class TokenAuthenticator(private val loginHelper: MangaDexLoginHelper) : Authent return if (token != null) { response.request.newBuilder().header("Authorization", token).build() } else { - // throw Exception("Unable to authenticate request, please re login") null } } @@ -28,7 +27,7 @@ class TokenAuthenticator(private val loginHelper: MangaDexLoginHelper) : Authent var validated = false runBlocking { - val checkToken = try { + val checkTokenResult = runCatching { loginHelper.isAuthenticated( MdUtil.getAuthHeaders( Headers.Builder().build(), @@ -36,8 +35,14 @@ class TokenAuthenticator(private val loginHelper: MangaDexLoginHelper) : Authent 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 }