From 1fa05703fac5857af53a0686b400753ccd133d7c Mon Sep 17 00:00:00 2001 From: MajorTanya <39014446+MajorTanya@users.noreply.github.com> Date: Thu, 30 Jan 2025 16:29:03 +0100 Subject: [PATCH] Fix Bangumi tracker losing track of login expiration (#1681) * Fix Bangumi tracking losing track of login state kotlinx.serialization does NOT serialize default values (like createdAt in BGMOAuth.kt), so every time the Bangumi tracker deserialized the tracker OAuth, createdAt was set to the time of the read, not the time of issuance. Separately, BangumiInterceptor did correctly fetch new OAuth credentials upon detected expiry of the stored credentials and saved them, but did not use them for the current request (the new credentials were used for all subsequent requests only). This led to 401 errors from Bangumi because the expired access_token was provided. A subsequent request using the newly acquired access_token would end up being successful. * Add CHANGELOG.md entry (cherry picked from commit dce6aacf02d07f3f123b19b1b74cbbe18c28852b) # Conflicts: # CHANGELOG.md --- .../tachiyomi/data/track/bangumi/BangumiInterceptor.kt | 5 +++-- .../eu/kanade/tachiyomi/data/track/bangumi/dto/BGMOAuth.kt | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt index 9e15e6a60..9d6295a87 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/BangumiInterceptor.kt @@ -21,12 +21,13 @@ class BangumiInterceptor(private val bangumi: Bangumi) : Interceptor { override fun intercept(chain: Interceptor.Chain): Response { val originalRequest = chain.request() - val currAuth = oauth ?: throw Exception("Not authenticated with Bangumi") + var currAuth: BGMOAuth = oauth ?: throw Exception("Not authenticated with Bangumi") if (currAuth.isExpired()) { val response = chain.proceed(BangumiApi.refreshTokenRequest(currAuth.refreshToken!!)) if (response.isSuccessful) { - newAuth(json.decodeFromString(response.body.string())) + currAuth = json.decodeFromString(response.body.string()) + newAuth(currAuth) } else { response.close() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMOAuth.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMOAuth.kt index 6a4fea3cb..9ac1308a9 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMOAuth.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/bangumi/dto/BGMOAuth.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.data.track.bangumi.dto +import kotlinx.serialization.EncodeDefault import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -10,6 +11,7 @@ data class BGMOAuth( @SerialName("token_type") val tokenType: String, @SerialName("created_at") + @EncodeDefault val createdAt: Long = System.currentTimeMillis() / 1000, @SerialName("expires_in") val expiresIn: Long,