diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt index cbd0dd1b26..3f74413185 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/track/anilist/AnilistApi.kt @@ -15,10 +15,9 @@ import com.google.gson.JsonParser import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.network.await -import eu.kanade.tachiyomi.network.jsonType +import eu.kanade.tachiyomi.network.jsonMime import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -import okhttp3.MediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.RequestBody.Companion.toRequestBody @@ -44,7 +43,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { "query" to addToLibraryQuery(), "variables" to variables ) - val body = payload.toString().toRequestBody(MediaType.jsonType()) + val body = payload.toString().toRequestBody(jsonMime) val request = Request.Builder().url(apiUrl).post(body).build() val netResponse = authClient.newCall(request).execute() @@ -74,7 +73,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { "query" to updateInLibraryQuery(), "variables" to variables ) - val body = payload.toString().toRequestBody(MediaType.jsonType()) + val body = payload.toString().toRequestBody(jsonMime) val request = Request.Builder().url(apiUrl).post(body).build() val response = authClient.newCall(request).await() @@ -91,7 +90,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { "query" to searchQuery(), "variables" to variables ) - val body = payload.toString().toRequestBody(MediaType.jsonType()) + val body = payload.toString().toRequestBody(jsonMime) val request = Request.Builder().url(apiUrl).post(body).build() val netResponse = authClient.newCall(request).await() val response = responseToJson(netResponse) @@ -112,7 +111,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { "query" to findLibraryMangaQuery(), "variables" to variables ) - val body = payload.toString().toRequestBody(MediaType.jsonType()) + val body = payload.toString().toRequestBody(jsonMime) val request = Request.Builder().url(apiUrl).post(body).build() val result = authClient.newCall(request).await() @@ -146,7 +145,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { "variables" to variables ) - val body = payload.toString().toRequestBody(MediaType.jsonType()) + val body = payload.toString().toRequestBody(jsonMime) val request = Request.Builder().url(apiUrl).post(body).build() val result = authClient.newCall(request).await() return@withContext true @@ -171,7 +170,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) { val payload = jsonObject( "query" to currentUserQuery() ) - val body = payload.toString().toRequestBody(MediaType.jsonType()) + val body = payload.toString().toRequestBody(jsonMime) val request = Request.Builder().url(apiUrl).post(body).build() val netResponse = authClient.newCall(request).await() diff --git a/app/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt index 5ce6f622a5..411832979e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/OkHttpExtensions.kt @@ -5,7 +5,7 @@ import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json import okhttp3.Call import okhttp3.Callback -import okhttp3.MediaType +import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import okhttp3.Request import okhttp3.Response @@ -14,14 +14,13 @@ import rx.Producer import rx.Subscription import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.api.fullType -import java.io.BufferedReader import java.io.IOException -import java.io.InputStreamReader import java.util.concurrent.atomic.AtomicBoolean -import java.util.zip.GZIPInputStream import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException +val jsonMime = "application/json; charset=utf-8".toMediaType() + fun Call.asObservable(): Observable { return Observable.unsafeCreate { subscriber -> // Since Call is a one-shot type, clone it for each new subscriber. @@ -65,6 +64,11 @@ suspend fun Call.await(): Response { enqueue( object : Callback { override fun onResponse(call: Call, response: Response) { + if (!response.isSuccessful) { + continuation.resumeWithException(Exception("HTTP error ${response.code}")) + return + } + continuation.resume(response) } @@ -117,25 +121,3 @@ inline fun Response.parseAs(): T { return json.decodeFromString(responseBody) } } - -fun MediaType.Companion.jsonType(): MediaType = "application/json; charset=utf-8".toMediaTypeOrNull()!! - -fun Response.consumeBody(): String? { - use { - if (it.code != 200) throw Exception("HTTP error ${it.code}") - return it.body?.string() - } -} - -fun Response.consumeXmlBody(): String? { - use { res -> - if (res.code != 200) throw Exception("Export list error") - BufferedReader(InputStreamReader(GZIPInputStream(res.body?.source()?.inputStream()))).use { reader -> - val sb = StringBuilder() - reader.forEachLine { line -> - sb.append(line) - } - return sb.toString() - } - } -}