diff --git a/app/build.gradle b/app/build.gradle index 0a4dea6..da2109d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -38,6 +38,9 @@ android { } kotlinOptions { jvmTarget = '1.8' + kotlin.sourceSets.all { + languageSettings.optIn("kotlin.RequiresOptIn") + } } namespace 'org.mosad.teapod' } diff --git a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt index e80a9ad..9a4a9e7 100644 --- a/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt +++ b/app/src/main/java/org/mosad/teapod/parser/crunchyroll/Crunchyroll.kt @@ -33,8 +33,6 @@ import io.ktor.client.request.forms.* import io.ktor.client.statement.* import io.ktor.http.* import kotlinx.coroutines.* -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock import kotlinx.serialization.SerializationException import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonObject @@ -59,7 +57,8 @@ object Crunchyroll { private lateinit var token: Token private var tokenValidUntil: Long = 0 - private val tokeRefreshMutex = Mutex() + @OptIn(DelicateCoroutinesApi::class) + private val tokenRefreshContext = newSingleThreadContext("TokenRefreshContext") private var accountID = "" @@ -141,8 +140,7 @@ object Crunchyroll { params: List> = listOf(), bodyObject: Any = Any() ): T = coroutineScope { - // TODO find a better way to make token refresh thread safe, currently it's blocking - tokeRefreshMutex.withLock { + withContext(tokenRefreshContext) { if (System.currentTimeMillis() > tokenValidUntil) refreshToken() }