Making OkHttpExtensions in line with upstream

Co-Authored-By: arkon <4098258+arkon@users.noreply.github.com>
This commit is contained in:
Jays2Kings 2021-04-22 20:43:41 -04:00
parent 221bb58c8c
commit 8e7143e8b4
2 changed files with 15 additions and 34 deletions

View File

@ -15,10 +15,9 @@ import com.google.gson.JsonParser
import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.data.track.model.TrackSearch
import eu.kanade.tachiyomi.network.await 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.Dispatchers
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import okhttp3.MediaType
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody import okhttp3.RequestBody.Companion.toRequestBody
@ -44,7 +43,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
"query" to addToLibraryQuery(), "query" to addToLibraryQuery(),
"variables" to variables "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 request = Request.Builder().url(apiUrl).post(body).build()
val netResponse = authClient.newCall(request).execute() val netResponse = authClient.newCall(request).execute()
@ -74,7 +73,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
"query" to updateInLibraryQuery(), "query" to updateInLibraryQuery(),
"variables" to variables "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 request = Request.Builder().url(apiUrl).post(body).build()
val response = authClient.newCall(request).await() val response = authClient.newCall(request).await()
@ -91,7 +90,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
"query" to searchQuery(), "query" to searchQuery(),
"variables" to variables "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 request = Request.Builder().url(apiUrl).post(body).build()
val netResponse = authClient.newCall(request).await() val netResponse = authClient.newCall(request).await()
val response = responseToJson(netResponse) val response = responseToJson(netResponse)
@ -112,7 +111,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
"query" to findLibraryMangaQuery(), "query" to findLibraryMangaQuery(),
"variables" to variables "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 request = Request.Builder().url(apiUrl).post(body).build()
val result = authClient.newCall(request).await() val result = authClient.newCall(request).await()
@ -146,7 +145,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
"variables" to variables "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 request = Request.Builder().url(apiUrl).post(body).build()
val result = authClient.newCall(request).await() val result = authClient.newCall(request).await()
return@withContext true return@withContext true
@ -171,7 +170,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
val payload = jsonObject( val payload = jsonObject(
"query" to currentUserQuery() "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 request = Request.Builder().url(apiUrl).post(body).build()
val netResponse = authClient.newCall(request).await() val netResponse = authClient.newCall(request).await()

View File

@ -5,7 +5,7 @@ import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import okhttp3.Call import okhttp3.Call
import okhttp3.Callback import okhttp3.Callback
import okhttp3.MediaType import okhttp3.MediaType.Companion.toMediaType
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
@ -14,14 +14,13 @@ import rx.Producer
import rx.Subscription import rx.Subscription
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.fullType import uy.kohesive.injekt.api.fullType
import java.io.BufferedReader
import java.io.IOException import java.io.IOException
import java.io.InputStreamReader
import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicBoolean
import java.util.zip.GZIPInputStream
import kotlin.coroutines.resume import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException import kotlin.coroutines.resumeWithException
val jsonMime = "application/json; charset=utf-8".toMediaType()
fun Call.asObservable(): Observable<Response> { fun Call.asObservable(): Observable<Response> {
return Observable.unsafeCreate { subscriber -> return Observable.unsafeCreate { subscriber ->
// Since Call is a one-shot type, clone it for each new subscriber. // Since Call is a one-shot type, clone it for each new subscriber.
@ -65,6 +64,11 @@ suspend fun Call.await(): Response {
enqueue( enqueue(
object : Callback { object : Callback {
override fun onResponse(call: Call, response: Response) { override fun onResponse(call: Call, response: Response) {
if (!response.isSuccessful) {
continuation.resumeWithException(Exception("HTTP error ${response.code}"))
return
}
continuation.resume(response) continuation.resume(response)
} }
@ -117,25 +121,3 @@ inline fun <reified T> Response.parseAs(): T {
return json.decodeFromString(responseBody) 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()
}
}
}