|
|
@ -4,6 +4,7 @@ import android.net.Uri
|
|
|
|
import androidx.core.net.toUri
|
|
|
|
import androidx.core.net.toUri
|
|
|
|
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.POST
|
|
|
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
|
|
|
import eu.kanade.tachiyomi.network.asObservableSuccess
|
|
|
|
import kotlinx.serialization.decodeFromString
|
|
|
|
import kotlinx.serialization.decodeFromString
|
|
|
|
import kotlinx.serialization.json.Json
|
|
|
|
import kotlinx.serialization.json.Json
|
|
|
@ -18,9 +19,8 @@ import kotlinx.serialization.json.jsonPrimitive
|
|
|
|
import kotlinx.serialization.json.long
|
|
|
|
import kotlinx.serialization.json.long
|
|
|
|
import kotlinx.serialization.json.put
|
|
|
|
import kotlinx.serialization.json.put
|
|
|
|
import kotlinx.serialization.json.putJsonObject
|
|
|
|
import kotlinx.serialization.json.putJsonObject
|
|
|
|
import okhttp3.MediaType.Companion.toMediaTypeOrNull
|
|
|
|
import okhttp3.MediaType.Companion.toMediaType
|
|
|
|
import okhttp3.OkHttpClient
|
|
|
|
import okhttp3.OkHttpClient
|
|
|
|
import okhttp3.Request
|
|
|
|
|
|
|
|
import okhttp3.RequestBody.Companion.toRequestBody
|
|
|
|
import okhttp3.RequestBody.Companion.toRequestBody
|
|
|
|
import rx.Observable
|
|
|
|
import rx.Observable
|
|
|
|
import uy.kohesive.injekt.injectLazy
|
|
|
|
import uy.kohesive.injekt.injectLazy
|
|
|
@ -30,7 +30,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
|
|
|
|
|
|
|
|
private val json: Json by injectLazy()
|
|
|
|
private val json: Json by injectLazy()
|
|
|
|
|
|
|
|
|
|
|
|
private val jsonMime = "application/json; charset=utf-8".toMediaTypeOrNull()
|
|
|
|
private val jsonMime = "application/json; charset=utf-8".toMediaType()
|
|
|
|
private val authClient = client.newBuilder().addInterceptor(interceptor).build()
|
|
|
|
private val authClient = client.newBuilder().addInterceptor(interceptor).build()
|
|
|
|
|
|
|
|
|
|
|
|
fun addLibManga(track: Track): Observable<Track> {
|
|
|
|
fun addLibManga(track: Track): Observable<Track> {
|
|
|
@ -51,16 +51,11 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
put("status", track.toAnilistStatus())
|
|
|
|
put("status", track.toAnilistStatus())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val body = payload.toString().toRequestBody(jsonMime)
|
|
|
|
return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime)))
|
|
|
|
val request = Request.Builder()
|
|
|
|
|
|
|
|
.url(apiUrl)
|
|
|
|
|
|
|
|
.post(body)
|
|
|
|
|
|
|
|
.build()
|
|
|
|
|
|
|
|
return authClient.newCall(request)
|
|
|
|
|
|
|
|
.asObservableSuccess()
|
|
|
|
.asObservableSuccess()
|
|
|
|
.map { netResponse ->
|
|
|
|
.map { netResponse ->
|
|
|
|
val responseBody = netResponse.body?.string().orEmpty()
|
|
|
|
netResponse.use {
|
|
|
|
netResponse.close()
|
|
|
|
val responseBody = it.body?.string().orEmpty()
|
|
|
|
if (responseBody.isEmpty()) {
|
|
|
|
if (responseBody.isEmpty()) {
|
|
|
|
throw Exception("Null Response")
|
|
|
|
throw Exception("Null Response")
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -69,6 +64,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
track
|
|
|
|
track
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fun updateLibManga(track: Track): Observable<Track> {
|
|
|
|
fun updateLibManga(track: Track): Observable<Track> {
|
|
|
|
val query =
|
|
|
|
val query =
|
|
|
@ -90,12 +86,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
put("score", track.score.toInt())
|
|
|
|
put("score", track.score.toInt())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val body = payload.toString().toRequestBody(jsonMime)
|
|
|
|
return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime)))
|
|
|
|
val request = Request.Builder()
|
|
|
|
|
|
|
|
.url(apiUrl)
|
|
|
|
|
|
|
|
.post(body)
|
|
|
|
|
|
|
|
.build()
|
|
|
|
|
|
|
|
return authClient.newCall(request)
|
|
|
|
|
|
|
|
.asObservableSuccess()
|
|
|
|
.asObservableSuccess()
|
|
|
|
.map {
|
|
|
|
.map {
|
|
|
|
track
|
|
|
|
track
|
|
|
@ -134,15 +125,11 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
put("query", search)
|
|
|
|
put("query", search)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val body = payload.toString().toRequestBody(jsonMime)
|
|
|
|
return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime)))
|
|
|
|
val request = Request.Builder()
|
|
|
|
|
|
|
|
.url(apiUrl)
|
|
|
|
|
|
|
|
.post(body)
|
|
|
|
|
|
|
|
.build()
|
|
|
|
|
|
|
|
return authClient.newCall(request)
|
|
|
|
|
|
|
|
.asObservableSuccess()
|
|
|
|
.asObservableSuccess()
|
|
|
|
.map { netResponse ->
|
|
|
|
.map { netResponse ->
|
|
|
|
val responseBody = netResponse.body?.string().orEmpty()
|
|
|
|
netResponse.use {
|
|
|
|
|
|
|
|
val responseBody = it.body?.string().orEmpty()
|
|
|
|
if (responseBody.isEmpty()) {
|
|
|
|
if (responseBody.isEmpty()) {
|
|
|
|
throw Exception("Null Response")
|
|
|
|
throw Exception("Null Response")
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -154,6 +141,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
entries.map { it.toTrack() }
|
|
|
|
entries.map { it.toTrack() }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fun findLibManga(track: Track, userid: Int): Observable<Track?> {
|
|
|
|
fun findLibManga(track: Track, userid: Int): Observable<Track?> {
|
|
|
|
val query =
|
|
|
|
val query =
|
|
|
@ -194,15 +182,11 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
put("manga_id", track.media_id)
|
|
|
|
put("manga_id", track.media_id)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val body = payload.toString().toRequestBody(jsonMime)
|
|
|
|
return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime)))
|
|
|
|
val request = Request.Builder()
|
|
|
|
|
|
|
|
.url(apiUrl)
|
|
|
|
|
|
|
|
.post(body)
|
|
|
|
|
|
|
|
.build()
|
|
|
|
|
|
|
|
return authClient.newCall(request)
|
|
|
|
|
|
|
|
.asObservableSuccess()
|
|
|
|
.asObservableSuccess()
|
|
|
|
.map { netResponse ->
|
|
|
|
.map { netResponse ->
|
|
|
|
val responseBody = netResponse.body?.string().orEmpty()
|
|
|
|
netResponse.use {
|
|
|
|
|
|
|
|
val responseBody = it.body?.string().orEmpty()
|
|
|
|
if (responseBody.isEmpty()) {
|
|
|
|
if (responseBody.isEmpty()) {
|
|
|
|
throw Exception("Null Response")
|
|
|
|
throw Exception("Null Response")
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -214,6 +198,7 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
entries.firstOrNull()?.toTrack()
|
|
|
|
entries.firstOrNull()?.toTrack()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
fun getLibManga(track: Track, userid: Int): Observable<Track> {
|
|
|
|
fun getLibManga(track: Track, userid: Int): Observable<Track> {
|
|
|
|
return findLibManga(track, userid)
|
|
|
|
return findLibManga(track, userid)
|
|
|
@ -239,22 +224,22 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
val payload = buildJsonObject {
|
|
|
|
val payload = buildJsonObject {
|
|
|
|
put("query", query)
|
|
|
|
put("query", query)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val body = payload.toString().toRequestBody(jsonMime)
|
|
|
|
return authClient.newCall(POST(apiUrl, body = payload.toString().toRequestBody(jsonMime)))
|
|
|
|
val request = Request.Builder()
|
|
|
|
|
|
|
|
.url(apiUrl)
|
|
|
|
|
|
|
|
.post(body)
|
|
|
|
|
|
|
|
.build()
|
|
|
|
|
|
|
|
return authClient.newCall(request)
|
|
|
|
|
|
|
|
.asObservableSuccess()
|
|
|
|
.asObservableSuccess()
|
|
|
|
.map { netResponse ->
|
|
|
|
.map { netResponse ->
|
|
|
|
val responseBody = netResponse.body?.string().orEmpty()
|
|
|
|
netResponse.use {
|
|
|
|
|
|
|
|
val responseBody = it.body?.string().orEmpty()
|
|
|
|
if (responseBody.isEmpty()) {
|
|
|
|
if (responseBody.isEmpty()) {
|
|
|
|
throw Exception("Null Response")
|
|
|
|
throw Exception("Null Response")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
val response = json.decodeFromString<JsonObject>(responseBody)
|
|
|
|
val response = json.decodeFromString<JsonObject>(responseBody)
|
|
|
|
val data = response["data"]!!.jsonObject
|
|
|
|
val data = response["data"]!!.jsonObject
|
|
|
|
val viewer = data["Viewer"]!!.jsonObject
|
|
|
|
val viewer = data["Viewer"]!!.jsonObject
|
|
|
|
Pair(viewer["id"]!!.jsonPrimitive.int, viewer["mediaListOptions"]!!.jsonObject["scoreFormat"]!!.jsonPrimitive.content)
|
|
|
|
Pair(
|
|
|
|
|
|
|
|
viewer["id"]!!.jsonPrimitive.int,
|
|
|
|
|
|
|
|
viewer["mediaListOptions"]!!.jsonObject["scoreFormat"]!!.jsonPrimitive.content
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -298,7 +283,6 @@ class AnilistApi(val client: OkHttpClient, interceptor: AnilistInterceptor) {
|
|
|
|
|
|
|
|
|
|
|
|
companion object {
|
|
|
|
companion object {
|
|
|
|
private const val clientId = "385"
|
|
|
|
private const val clientId = "385"
|
|
|
|
private const val clientUrl = "tachiyomi://anilist-auth"
|
|
|
|
|
|
|
|
private const val apiUrl = "https://graphql.anilist.co/"
|
|
|
|
private const val apiUrl = "https://graphql.anilist.co/"
|
|
|
|
private const val baseUrl = "https://anilist.co/api/v2/"
|
|
|
|
private const val baseUrl = "https://anilist.co/api/v2/"
|
|
|
|
private const val baseMangaUrl = "https://anilist.co/manga/"
|
|
|
|
private const val baseMangaUrl = "https://anilist.co/manga/"
|
|
|
|