diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt index fbfc1e019..da40b5cfd 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeList.kt @@ -112,11 +112,7 @@ class Myanimelist(private val context: Context, id: Int) : TrackService(id) { .toCompletable() } - // Attempt to login again if cookies have been cleared but credentials are still filled - fun ensureLoggedIn() { - if (isAuthorized) return - if (!isLogged) throw Exception("MAL Login Credentials not found") - + fun refreshLogin() { val username = getUsername() val password = getPassword() logout() @@ -131,6 +127,14 @@ class Myanimelist(private val context: Context, id: Int) : TrackService(id) { } } + // Attempt to login again if cookies have been cleared but credentials are still filled + fun ensureLoggedIn() { + if (isAuthorized) return + if (!isLogged) throw Exception("MAL Login Credentials not found") + + refreshLogin() + } + override fun logout() { super.logout() preferences.trackToken(this).delete() diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListInterceptor.kt index 0a032c6a5..124182168 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/myanimelist/MyAnimeListInterceptor.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.data.track.myanimelist import okhttp3.Interceptor +import okhttp3.Request import okhttp3.RequestBody import okhttp3.Response import okio.Buffer @@ -11,18 +12,27 @@ class MyAnimeListInterceptor(private val myanimelist: Myanimelist): Interceptor override fun intercept(chain: Interceptor.Chain): Response { myanimelist.ensureLoggedIn() - var request = chain.request() - request.body()?.let { + val request = chain.request() + var response = chain.proceed(updateRequest(request)) + + if (response.code() == 400){ + myanimelist.refreshLogin() + response = chain.proceed(updateRequest(request)) + } + + return response + } + + private fun updateRequest(request: Request): Request { + return request.body()?.let { val contentType = it.contentType().toString() val updatedBody = when { contentType.contains("x-www-form-urlencoded") -> updateFormBody(it) contentType.contains("json") -> updateJsonBody(it) else -> it } - request = request.newBuilder().post(updatedBody).build() - } - - return chain.proceed(request) + request.newBuilder().post(updatedBody).build() + } ?: request } private fun bodyToString(requestBody: RequestBody): String {