Fix DesuMe parser

pull/26/head
Koitharu 5 years ago
parent c25ee93ccb
commit 1f2f40f077

@ -27,6 +27,9 @@ class DesuMeRepository(loaderContext: MangaLoaderContext) : RemoteMangaRepositor
sortOrder: SortOrder?, sortOrder: SortOrder?,
tag: MangaTag? tag: MangaTag?
): List<Manga> { ): List<Manga> {
if (query != null && offset != 0) {
return emptyList()
}
val domain = getDomain() val domain = getDomain()
val url = buildString { val url = buildString {
append("https://") append("https://")
@ -76,6 +79,8 @@ class DesuMeRepository(loaderContext: MangaLoaderContext) : RemoteMangaRepositor
val json = loaderContext.httpGet(url).parseJson().getJSONObject("response") val json = loaderContext.httpGet(url).parseJson().getJSONObject("response")
?: throw ParseException("Invalid response") ?: throw ParseException("Invalid response")
val baseChapterUrl = manga.url + "/chapter/" val baseChapterUrl = manga.url + "/chapter/"
val chaptersList = json.getJSONObject("chapters").getJSONArray("list")
val totalChapters = chaptersList.length()
return manga.copy( return manga.copy(
tags = json.getJSONArray("genres").mapToSet { tags = json.getJSONArray("genres").mapToSet {
MangaTag( MangaTag(
@ -85,16 +90,16 @@ class DesuMeRepository(loaderContext: MangaLoaderContext) : RemoteMangaRepositor
) )
}, },
description = json.getString("description"), description = json.getString("description"),
chapters = json.getJSONObject("chapters").getJSONArray("list").mapIndexed { i, it -> chapters = chaptersList.mapIndexed { i, it ->
val chid = it.getLong("id") val chid = it.getLong("id")
MangaChapter( MangaChapter(
id = generateUid(chid), id = generateUid(chid),
source = manga.source, source = manga.source,
url = "$baseChapterUrl$chid", url = "$baseChapterUrl$chid",
name = it.optString("title", "${manga.title} #${it.getDouble("ch")}"), name = it.getStringOrNull("title") ?: "${manga.title} #${it.getDouble("ch")}",
number = i + 1 number = totalChapters - i
) )
} }.reversed()
) )
} }

@ -61,7 +61,7 @@ class MangaIndex(source: String?) {
) )
}.getOrNull() }.getOrNull()
fun getCoverEntry(): String? = json.optString("cover_entry") fun getCoverEntry(): String? = json.getStringOrNull("cover_entry")
fun addChapter(chapter: MangaChapter) { fun addChapter(chapter: MangaChapter) {
val chapters = json.getJSONObject("chapters") val chapters = json.getJSONObject("chapters")

@ -30,7 +30,9 @@ fun <T> JSONArray.mapIndexed(block: (Int, JSONObject) -> T): List<T> {
return result return result
} }
fun JSONObject.getStringOrNull(name: String): String? = opt(name)?.toString() fun JSONObject.getStringOrNull(name: String): String? = opt(name)?.takeUnless {
it === JSONObject.NULL
}?.toString()
operator fun JSONArray.iterator(): Iterator<JSONObject> = JSONIterator(this) operator fun JSONArray.iterator(): Iterator<JSONObject> = JSONIterator(this)

Loading…
Cancel
Save