|
|
|
@ -118,10 +118,14 @@ internal class MimiHentai(context: MangaLoaderContext) :
|
|
|
|
|
|
|
|
|
|
|
|
val json = webClient.httpGet(url).parseJson()
|
|
|
|
val json = webClient.httpGet(url).parseJson()
|
|
|
|
val data = json.getJSONArray("data")
|
|
|
|
val data = json.getJSONArray("data")
|
|
|
|
return parseMangaList(data)
|
|
|
|
return if (url.contains("/top-manga")) {
|
|
|
|
|
|
|
|
parseTopMangaList(data)
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
parseMangaList(data)
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private fun parseMangaList(data: JSONArray): List<Manga> {
|
|
|
|
private fun parseTopMangaList(data: JSONArray): List<Manga> {
|
|
|
|
return data.mapJSON { jo ->
|
|
|
|
return data.mapJSON { jo ->
|
|
|
|
val id = jo.getLong("id")
|
|
|
|
val id = jo.getLong("id")
|
|
|
|
val title = jo.getString("title").takeIf { it.isNotEmpty() } ?: "Web chưa đặt tên"
|
|
|
|
val title = jo.getString("title").takeIf { it.isNotEmpty() } ?: "Web chưa đặt tên"
|
|
|
|
@ -137,10 +141,50 @@ internal class MimiHentai(context: MangaLoaderContext) :
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
val state = when (description) {
|
|
|
|
val authors = jo.optJSONArray("authors")?.mapJSON {
|
|
|
|
"Đang Tiến Hành" -> MangaState.ONGOING
|
|
|
|
it.getString("name")
|
|
|
|
"Hoàn Thành" -> MangaState.FINISHED
|
|
|
|
}?.toSet() ?: emptySet()
|
|
|
|
else -> null
|
|
|
|
|
|
|
|
|
|
|
|
val tags = jo.optJSONArray("genres")?.mapJSON { genre ->
|
|
|
|
|
|
|
|
MangaTag(
|
|
|
|
|
|
|
|
key = genre.getLong("id").toString(),
|
|
|
|
|
|
|
|
title = genre.getString("name"),
|
|
|
|
|
|
|
|
source = source
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}?.toSet() ?: emptySet()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Manga(
|
|
|
|
|
|
|
|
id = generateUid(id),
|
|
|
|
|
|
|
|
title = title,
|
|
|
|
|
|
|
|
altTitles = differentNames,
|
|
|
|
|
|
|
|
url = "/$apiSuffix/info/$id",
|
|
|
|
|
|
|
|
publicUrl = "https://$domain/g/$id",
|
|
|
|
|
|
|
|
rating = RATING_UNKNOWN,
|
|
|
|
|
|
|
|
contentRating = ContentRating.ADULT,
|
|
|
|
|
|
|
|
coverUrl = jo.getString("coverUrl"),
|
|
|
|
|
|
|
|
state = null,
|
|
|
|
|
|
|
|
description = description,
|
|
|
|
|
|
|
|
tags = tags,
|
|
|
|
|
|
|
|
authors = authors,
|
|
|
|
|
|
|
|
source = source,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private fun parseMangaList(data: JSONArray): List<Manga> {
|
|
|
|
|
|
|
|
return data.mapJSON { jo ->
|
|
|
|
|
|
|
|
val id = jo.getLong("id")
|
|
|
|
|
|
|
|
val title = jo.getString("title").takeIf { it.isNotEmpty() } ?: "Web chưa đặt tên"
|
|
|
|
|
|
|
|
val description = jo.getStringOrNull("description")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val differentNames = mutableSetOf<String>().apply {
|
|
|
|
|
|
|
|
jo.optJSONArray("differentNames")?.let { namesArray ->
|
|
|
|
|
|
|
|
for (i in 0 until namesArray.length()) {
|
|
|
|
|
|
|
|
namesArray.optString(i)?.takeIf { it.isNotEmpty() }?.let { name ->
|
|
|
|
|
|
|
|
add(name)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
val authors = jo.getJSONArray("authors").mapJSON {
|
|
|
|
val authors = jo.getJSONArray("authors").mapJSON {
|
|
|
|
@ -164,8 +208,9 @@ internal class MimiHentai(context: MangaLoaderContext) :
|
|
|
|
rating = RATING_UNKNOWN,
|
|
|
|
rating = RATING_UNKNOWN,
|
|
|
|
contentRating = ContentRating.ADULT,
|
|
|
|
contentRating = ContentRating.ADULT,
|
|
|
|
coverUrl = jo.getString("coverUrl"),
|
|
|
|
coverUrl = jo.getString("coverUrl"),
|
|
|
|
|
|
|
|
state = null,
|
|
|
|
tags = tags,
|
|
|
|
tags = tags,
|
|
|
|
state = state,
|
|
|
|
description = description,
|
|
|
|
authors = authors,
|
|
|
|
authors = authors,
|
|
|
|
source = source,
|
|
|
|
source = source,
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|