Ổ Truyện: Fix no value for _id in getListPage (#2259)
Co-authored-by: Draken <131387159+dragonx943@users.noreply.github.com>
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
package org.koitharu.kotatsu.parsers.site.vi
|
package org.koitharu.kotatsu.parsers.site.vi
|
||||||
|
|
||||||
import org.jsoup.HttpStatusException
|
|
||||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||||
import org.koitharu.kotatsu.parsers.config.ConfigKey
|
import org.koitharu.kotatsu.parsers.config.ConfigKey
|
||||||
@@ -27,7 +26,6 @@ import org.koitharu.kotatsu.parsers.util.oneOrThrowIfMany
|
|||||||
import org.koitharu.kotatsu.parsers.util.parseJson
|
import org.koitharu.kotatsu.parsers.util.parseJson
|
||||||
import org.koitharu.kotatsu.parsers.util.parseSafe
|
import org.koitharu.kotatsu.parsers.util.parseSafe
|
||||||
import org.koitharu.kotatsu.parsers.util.urlEncoded
|
import org.koitharu.kotatsu.parsers.util.urlEncoded
|
||||||
import java.net.HttpURLConnection
|
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.EnumSet
|
import java.util.EnumSet
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
@@ -75,77 +73,74 @@ internal class OTruyenParser(context: MangaLoaderContext) :
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
|
override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List<Manga> {
|
||||||
val url = buildString {
|
val url = buildString {
|
||||||
append("https://")
|
append("https://")
|
||||||
append(domain)
|
append(domain)
|
||||||
when {
|
when {
|
||||||
!filter.query.isNullOrEmpty() -> {
|
!filter.query.isNullOrEmpty() -> {
|
||||||
append("/v1/api/tim-kiem?keyword=")
|
append("/v1/api/tim-kiem?keyword=")
|
||||||
append(filter.query.urlEncoded())
|
append(filter.query.urlEncoded())
|
||||||
append("&page=")
|
append("&page=")
|
||||||
append(page.toString())
|
append(page.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
val tag = filter.tags.oneOrThrowIfMany()
|
if (!filter.tags.isEmpty()) {
|
||||||
if (tag != null) {
|
filter.tags.oneOrThrowIfMany()?.let {
|
||||||
append("/v1/api/the-loai/")
|
append("/v1/api/the-loai/")
|
||||||
append(tag.key)
|
append(it.key)
|
||||||
append("?page=")
|
append("?page=")
|
||||||
append(page)
|
append(page)
|
||||||
} else if (filter.states.isNotEmpty()) {
|
}
|
||||||
filter.states.oneOrThrowIfMany()?.let {
|
} else if (filter.states.isNotEmpty()) {
|
||||||
append(
|
filter.states.oneOrThrowIfMany()?.let {
|
||||||
when (it) {
|
append(
|
||||||
MangaState.ONGOING -> "/v1/api/danh-sach/dang-phat-hanh?page=${page}"
|
when (it) {
|
||||||
MangaState.FINISHED -> "/v1/api/danh-sach/hoan-thanh?page=${page}"
|
MangaState.FINISHED -> "/v1/api/danh-sach/hoan-thanh?page=${page}"
|
||||||
MangaState.UPCOMING -> "/v1/api/danh-sach/sap-ra-mat?page=${page}"
|
MangaState.UPCOMING -> "/v1/api/danh-sach/sap-ra-mat?page=${page}"
|
||||||
else -> "/v1/api/danh-sach/dang-phat-hanh?page=${page}" // default
|
else -> "/v1/api/danh-sach/dang-phat-hanh?page=${page}" // ONGOING
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
append("/v1/api/danh-sach/truyen-moi") // SortOrder.NEWEST
|
append("/v1/api/danh-sach/truyen-moi") // SortOrder.NEWEST
|
||||||
append("?page=${page}")
|
append("?page=${page}")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val json = try {
|
val json = try {
|
||||||
webClient.httpGet(url).parseJson()
|
webClient.httpGet(url).parseJson()
|
||||||
} catch (e: HttpStatusException) {
|
} catch (_: Exception) {
|
||||||
if (e.statusCode == HttpURLConnection.HTTP_INTERNAL_ERROR) {
|
return emptyList()
|
||||||
return emptyList()
|
}
|
||||||
} else {
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val items = json.getJSONObject("data").getJSONArray("items")
|
val items = json.getJSONObject("data").getJSONArray("items")
|
||||||
return items.mapJSON { jo ->
|
return items.mapJSON { jo ->
|
||||||
Manga(
|
val slug = jo.getString("slug")
|
||||||
id = generateUid(jo.getString("_id").hashCode().toLong()),
|
Manga(
|
||||||
url = jo.getString("slug"),
|
id = generateUid(slug.hashCode().toLong()),
|
||||||
publicUrl = "https://otruyen.cc/truyen-tranh/${jo.getString("slug")}",
|
url = slug,
|
||||||
title = jo.getString("name"),
|
publicUrl = "https://otruyen.cc/truyen-tranh/${slug}",
|
||||||
altTitles = emptySet(),
|
title = jo.getString("name"),
|
||||||
coverUrl = "https://img.otruyenapi.com/uploads/comics/${jo.getString("thumb_url")}",
|
altTitles = emptySet(),
|
||||||
authors = emptySet(),
|
coverUrl = "https://img.otruyenapi.com/uploads/comics/${jo.getString("thumb_url")}",
|
||||||
tags = emptySet(),
|
authors = emptySet(),
|
||||||
state = when (jo.getString("status")) {
|
tags = emptySet(),
|
||||||
"ongoing" -> MangaState.ONGOING
|
state = when (jo.getString("status")) {
|
||||||
"coming_soon" -> MangaState.UPCOMING
|
"ongoing" -> MangaState.ONGOING
|
||||||
"completed" -> MangaState.FINISHED
|
"coming_soon" -> MangaState.UPCOMING
|
||||||
else -> null
|
"completed" -> MangaState.FINISHED
|
||||||
},
|
else -> null
|
||||||
contentRating = if (isNsfwSource) ContentRating.ADULT else null,
|
},
|
||||||
source = source,
|
contentRating = if (isNsfwSource) ContentRating.ADULT else null,
|
||||||
rating = RATING_UNKNOWN,
|
source = source,
|
||||||
)
|
rating = RATING_UNKNOWN,
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun getDetails(manga: Manga): Manga {
|
override suspend fun getDetails(manga: Manga): Manga {
|
||||||
val url = "https://$domain/v1/api/truyen-tranh/${manga.url}"
|
val url = "https://$domain/v1/api/truyen-tranh/${manga.url}"
|
||||||
|
|||||||
Reference in New Issue
Block a user