diff --git a/app/build.gradle b/app/build.gradle index 22d0269..2346d31 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,7 +74,8 @@ dependencies { implementation "io.ktor:ktor-client-core:$ktor_version" implementation "io.ktor:ktor-client-android:$ktor_version" - implementation "io.ktor:ktor-client-serialization:$ktor_version" + implementation "io.ktor:ktor-client-content-negotiation:$ktor_version" + implementation "io.ktor:ktor-serialization-kotlinx-json:$ktor_version" testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' 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 a700ce4..eb5b2d5 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 @@ -25,13 +25,13 @@ package org.mosad.teapod.parser.crunchyroll import android.util.Log import io.ktor.client.* import io.ktor.client.call.* -import io.ktor.client.features.* -import io.ktor.client.features.json.* -import io.ktor.client.features.json.serializer.* +import io.ktor.client.plugins.* +import io.ktor.client.plugins.contentnegotiation.* import io.ktor.client.request.* import io.ktor.client.request.forms.* import io.ktor.client.statement.* import io.ktor.http.* +import io.ktor.serialization.kotlinx.json.* import kotlinx.coroutines.* import kotlinx.serialization.SerializationException import kotlinx.serialization.json.Json @@ -41,14 +41,14 @@ import kotlinx.serialization.json.put import org.mosad.teapod.preferences.EncryptedPreferences import org.mosad.teapod.preferences.Preferences -private val json = Json { ignoreUnknownKeys = true } - object Crunchyroll { private val TAG = javaClass.name private val client = HttpClient { - install(JsonFeature) { - serializer = KotlinxSerializer(json) + install(ContentNegotiation) { + json(Json { + ignoreUnknownKeys = true + }) } } private const val baseUrl = "https://beta-api.crunchyroll.com" @@ -77,7 +77,7 @@ object Crunchyroll { */ fun initBasicApiToken() = runBlocking { withContext(Dispatchers.IO) { - basicApiToken = (client.get(basicApiTokenUrl) as HttpResponse).readText() + basicApiToken = client.get { url(basicApiTokenUrl) }.bodyAsText() Log.i(TAG, "basic auth token: $basicApiToken") } } @@ -107,7 +107,7 @@ object Crunchyroll { val response: HttpResponse = client.submitForm("$baseUrl$tokenEndpoint", formParameters = formData) { header("Authorization", "Basic $basicApiToken") } - token = response.receive() + token = response.body() tokenValidUntil = System.currentTimeMillis() + (token.expiresIn * 1000) response.status } catch (ex: ClientRequestException) { @@ -155,10 +155,10 @@ object Crunchyroll { // for json set body and content type if (bodyObject is JsonObject) { - body = bodyObject + setBody(bodyObject) contentType(ContentType.Application.Json) } - } + }.body() response } diff --git a/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerViewModel.kt b/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerViewModel.kt index c779528..e417ac9 100644 --- a/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerViewModel.kt +++ b/app/src/main/java/org/mosad/teapod/ui/activity/player/PlayerViewModel.kt @@ -135,8 +135,6 @@ class PlayerViewModel(application: Application) : AndroidViewModel(application) currentPlayheads = Crunchyroll.playheads(episodeIDs) } ).joinAll() - - Log.d(classTag, "meta: $mediaMeta") setCurrentEpisode(episodeId) diff --git a/app/src/main/java/org/mosad/teapod/util/metadb/MetaDBController.kt b/app/src/main/java/org/mosad/teapod/util/metadb/MetaDBController.kt index 3389ef7..4a77328 100644 --- a/app/src/main/java/org/mosad/teapod/util/metadb/MetaDBController.kt +++ b/app/src/main/java/org/mosad/teapod/util/metadb/MetaDBController.kt @@ -24,11 +24,12 @@ package org.mosad.teapod.util.metadb import android.util.Log import io.ktor.client.* -import io.ktor.client.features.* -import io.ktor.client.features.json.* -import io.ktor.client.features.json.serializer.* +import io.ktor.client.call.* +import io.ktor.client.plugins.* +import io.ktor.client.plugins.contentnegotiation.* import io.ktor.client.request.* import io.ktor.http.* +import io.ktor.serialization.kotlinx.json.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.serialization.decodeFromString @@ -40,8 +41,8 @@ object MetaDBController { private const val repoUrl = "https://gitlab.com/Seil0/teapodmetadb/-/raw/main/crunchy/" private val client = HttpClient { - install(JsonFeature) { - serializer = KotlinxSerializer(Json) + install(ContentNegotiation) { + json() } } @@ -49,7 +50,7 @@ object MetaDBController { private var metaCacheList = arrayListOf() suspend fun list() = withContext(Dispatchers.IO) { - val raw: String = client.get("$repoUrl/list.json") + val raw: String = client.get("$repoUrl/list.json").body() mediaList = Json.decodeFromString(raw) } @@ -70,7 +71,7 @@ object MetaDBController { private suspend fun getTVShowMetadataFromDB(crSeriesId: String): TVShowMeta? = withContext(Dispatchers.IO) { return@withContext try { - val raw: String = client.get("$repoUrl/tv/$crSeriesId/media.json") + val raw: String = client.get("$repoUrl/tv/$crSeriesId/media.json").body() val meta: TVShowMeta = Json.decodeFromString(raw) metaCacheList.add(meta) diff --git a/app/src/main/java/org/mosad/teapod/util/tmdb/TMDBApiController.kt b/app/src/main/java/org/mosad/teapod/util/tmdb/TMDBApiController.kt index ba0cd53..7084394 100644 --- a/app/src/main/java/org/mosad/teapod/util/tmdb/TMDBApiController.kt +++ b/app/src/main/java/org/mosad/teapod/util/tmdb/TMDBApiController.kt @@ -25,10 +25,10 @@ package org.mosad.teapod.util.tmdb import android.util.Log import io.ktor.client.* import io.ktor.client.call.* -import io.ktor.client.features.json.* -import io.ktor.client.features.json.serializer.* +import io.ktor.client.plugins.contentnegotiation.* import io.ktor.client.request.* import io.ktor.client.statement.* +import io.ktor.serialization.kotlinx.json.* import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.invoke @@ -46,10 +46,11 @@ import org.mosad.teapod.util.concatenate class TMDBApiController { private val classTag = javaClass.name - private val json = Json { ignoreUnknownKeys = true } private val client = HttpClient { - install(JsonFeature) { - serializer = KotlinxSerializer(json) + install(ContentNegotiation) { + json(Json { + ignoreUnknownKeys = true + }) } } @@ -78,7 +79,7 @@ class TMDBApiController { } } - response.receive() + response.body() } } diff --git a/build.gradle b/build.gradle index ee589f6..f677692 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = "1.7.10" - ext.ktor_version = "1.6.8" + ext.ktor_version = "2.1.0" ext.exo_version = "2.17.1" repositories { google()