komikku/app/src/main/java/exh/md/service/MangaDexService.kt

167 lines
5.4 KiB
Kotlin
Raw Normal View History

2021-07-06 00:31:30 +02:00
package exh.md.service
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.network.await
import eu.kanade.tachiyomi.network.parseAs
2021-11-14 04:46:03 +01:00
import exh.md.dto.AggregateDto
2021-07-06 00:31:30 +02:00
import exh.md.dto.AtHomeDto
import exh.md.dto.AtHomeImageReportDto
import exh.md.dto.ChapterDto
import exh.md.dto.ChapterListDto
import exh.md.dto.MangaDto
import exh.md.dto.MangaListDto
import exh.md.dto.RelationListDto
2021-07-06 00:31:30 +02:00
import exh.md.dto.ResultDto
import exh.md.utils.MdApi
import exh.md.utils.MdConstants
import exh.md.utils.MdUtil
import okhttp3.CacheControl
import okhttp3.Headers
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.OkHttpClient
class MangaDexService(
private val client: OkHttpClient
) {
suspend fun viewMangas(
ids: List<String>
): MangaListDto {
return client.newCall(
GET(
MdApi.manga.toHttpUrl()
.newBuilder()
.apply {
addQueryParameter("includes[]", MdConstants.Types.coverArt)
addQueryParameter("limit", ids.size.toString())
ids.forEach {
addQueryParameter("ids[]", it)
}
2021-07-06 00:31:30 +02:00
}
.build()
.toString(),
2021-07-06 00:31:30 +02:00
cache = CacheControl.FORCE_NETWORK
)
).await().parseAs(MdUtil.jsonParser)
}
suspend fun viewManga(
id: String
): MangaDto {
return client.newCall(
GET(
MdApi.manga.toHttpUrl()
.newBuilder()
.apply {
addPathSegment(id)
addQueryParameter("includes[]", MdConstants.Types.coverArt)
addQueryParameter("includes[]", MdConstants.Types.author)
addQueryParameter("includes[]", MdConstants.Types.artist)
}
.build()
.toString(),
2021-07-06 00:31:30 +02:00
cache = CacheControl.FORCE_NETWORK
)
).await().parseAs(MdUtil.jsonParser)
}
2021-11-14 04:46:03 +01:00
suspend fun aggregateChapters(
id: String,
translatedLanguage: String
): AggregateDto {
return client.newCall(
GET(
MdApi.manga.toHttpUrl()
.newBuilder()
.apply {
addPathSegment(id)
addPathSegment("aggregate")
addQueryParameter("translatedLanguage[]", translatedLanguage)
}
.build()
.toString(),
cache = CacheControl.FORCE_NETWORK
)
).await().parseAs(MdUtil.jsonParser)
}
2021-07-06 00:31:30 +02:00
suspend fun viewChapters(
id: String,
translatedLanguage: String,
offset: Int,
): ChapterListDto {
val url = MdApi.manga.toHttpUrl()
2021-07-06 00:31:30 +02:00
.newBuilder()
.apply {
addPathSegment(id)
addPathSegment("feed")
addQueryParameter("limit", "500")
addQueryParameter("includes[]", MdConstants.Types.scanlator)
addQueryParameter("order[volume]", "desc")
addQueryParameter("order[chapter]", "desc")
addQueryParameter("contentRating[]", "safe")
addQueryParameter("contentRating[]", "suggestive")
addQueryParameter("contentRating[]", "erotica")
addQueryParameter("contentRating[]", "pornographic")
2021-07-06 00:31:30 +02:00
addQueryParameter("translatedLanguage[]", translatedLanguage)
addQueryParameter("offset", offset.toString())
}
.build()
2021-07-06 00:31:30 +02:00
.toString()
return client.newCall(
GET(
url,
cache = CacheControl.FORCE_NETWORK
)
).await().parseAs(MdUtil.jsonParser)
}
suspend fun viewChapter(id: String): ChapterDto {
return client.newCall(GET("${MdApi.chapter}/$id", cache = CacheControl.FORCE_NETWORK))
.await()
.parseAs(MdUtil.jsonParser)
}
suspend fun randomManga(): MangaDto {
return client.newCall(GET("${MdApi.manga}/random", cache = CacheControl.FORCE_NETWORK))
.await()
.parseAs(MdUtil.jsonParser)
}
suspend fun atHomeImageReport(atHomeImageReportDto: AtHomeImageReportDto): ResultDto {
return client.newCall(
POST(
MdConstants.atHomeReportUrl,
body = MdUtil.encodeToBody(atHomeImageReportDto),
cache = CacheControl.FORCE_NETWORK
)
).await().parseAs(MdUtil.jsonParser)
}
suspend fun getAtHomeServer(
2021-07-06 21:28:32 +02:00
atHomeRequestUrl: String,
headers: Headers
): AtHomeDto {
return client.newCall(GET(atHomeRequestUrl, headers, CacheControl.FORCE_NETWORK))
2021-07-06 00:31:30 +02:00
.await()
.parseAs(MdUtil.jsonParser)
}
suspend fun relatedManga(id: String): RelationListDto {
return client.newCall(
GET(
MdApi.manga.toHttpUrl().newBuilder()
.apply {
addPathSegment(id)
addPathSegment("relation")
}
.build()
.toString(),
cache = CacheControl.FORCE_NETWORK
)
).await().parseAs(MdUtil.jsonParser)
2021-07-06 00:31:30 +02:00
}
}