From faf2f2a312e0de60ffb3ddd38bcad3f403be880d Mon Sep 17 00:00:00 2001 From: Draken Date: Wed, 12 Feb 2025 05:24:22 +0000 Subject: [PATCH 1/2] [HentaiVN18] Refactor + Fixes --- .../kotatsu/parsers/site/vi/Hentai18VN.kt | 25 +++++++++---------- .../kotatsu/parsers/site/vi/TruyenHentaiVN.kt | 18 +++++-------- 2 files changed, 18 insertions(+), 25 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt index faac7c26..8a42e82e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt @@ -24,9 +24,10 @@ internal class Hentai18VN(context: MangaLoaderContext) : PagedMangaParser(contex keys.add(userAgentKey) } - override fun getRequestHeaders(): Headers = Headers.Builder() - .add("X-Requested-With", "XMLHttpRequest") - .build() + // Testing... + // override fun getRequestHeaders(): Headers = Headers.Builder() + // .add("X-Requested-With", "XMLHttpRequest") + // .build() override val filterCapabilities: MangaListFilterCapabilities get() = MangaListFilterCapabilities( @@ -49,7 +50,6 @@ internal class Hentai18VN(context: MangaLoaderContext) : PagedMangaParser(contex } val keyword = filter.query - // val body = JSONObject().apply { put("keyword", filter.query) } val url = "http://$domain/search/html/1" val headers = Headers.Builder().add("X-Requested-With", "XMLHttpRequest").build() val response = webClient.httpPost(url.toHttpUrl(), payload = "keyword=$keyword", headers).parseHtml() @@ -120,8 +120,8 @@ internal class Hentai18VN(context: MangaLoaderContext) : PagedMangaParser(contex private fun parseMangaList(doc: Document): List { return doc.select("div.visual").map { div -> - val a = div.selectFirst("div.main_text h3.title a")!! - val img = div.selectFirst("div.hentai-cover img")!! + val a = div.selectFirst("div.main_text h3.title a") + val img = div.selectFirst("div.hentai-cover img") val mangaUrl = a.attr("href") Manga( id = generateUid(mangaUrl), @@ -152,13 +152,12 @@ internal class Hentai18VN(context: MangaLoaderContext) : PagedMangaParser(contex ) }.toSet() - val chapters = doc.select("ul#chapter-list li.citem").map { li -> - val a = li.selectFirst("a")!! - val number = a.text().substringAfter("Chap ").toFloatOrNull() ?: 0f + val chapters = doc.select("ul#chapter-list li.citem").mapChapters(reversed=true) { i, li -> + val a = li.selectFirst("a") MangaChapter( id = generateUid(a.attr("href")), name = a.text(), - number = number, + number = i + 1f, url = a.attr("href").removePrefix("https://$domain"), uploadDate = parseChapterDate(li.selectFirst(".time")?.text()), source = source, @@ -178,7 +177,7 @@ internal class Hentai18VN(context: MangaLoaderContext) : PagedMangaParser(contex return manga.copy( tags = tags, - author = author?.takeUnless { it == "Đang cập nhật" }, + author = author, altTitle = altTitle, state = state, chapters = chapters, @@ -216,8 +215,8 @@ internal class Hentai18VN(context: MangaLoaderContext) : PagedMangaParser(contex doc.select("ul.list-tags li").mapNotNull { li -> val a = li.selectFirst("a") ?: return@mapNotNull null val title = a.selectFirst("h3.tag-name")?.text()?.trim() ?: return@mapNotNull null - val url = a.attr("href") - MangaTag( title = title, key = url.substringAfterLast("/"), source = source ) + val key = a.attr("href").substringAfterLast("/") + MangaTag( title = title, key = key, source = source ) } }.toSet() } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyenHentaiVN.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyenHentaiVN.kt index 0e457d2b..a39056a9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyenHentaiVN.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyenHentaiVN.kt @@ -38,7 +38,7 @@ internal class TruyenHentaiVN(context: MangaLoaderContext) : PagedMangaParser(co when { !filter.tags.isNullOrEmpty() -> { val tag = filter.tags.first() - append(tag.key) + append(tag.key) // Testing... if (page > 1) { append("?page=") append(page) @@ -158,16 +158,10 @@ internal class TruyenHentaiVN(context: MangaLoaderContext) : PagedMangaParser(co private suspend fun getAvailableTags(): Set { val doc = webClient.httpGet("https://$domain").parseHtml() - return doc.select("a.py-2[href^=/the-loai-]").mapNotNull { element -> - val key = element.attr("href") - val title = element.text() - if (key.isNotEmpty() && title.isNotEmpty()) { - MangaTag( - key = key, - title = title, - source = source - ) - } else null + return doc.select("a.py-2[href^=/the-loai-]").mapNotNull { a -> + val key = a.attr("href") + val title = a.text() + MangaTag( key = key, title = title, source = source ) }.toSet() } -} +} \ No newline at end of file From 9853638c6bd65cddb73aef5cdbaeac100955cf67 Mon Sep 17 00:00:00 2001 From: Draken Date: Wed, 12 Feb 2025 05:49:08 +0000 Subject: [PATCH 2/2] [Hentai18VN] Refactor --- .../org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt index 8a42e82e..71ad6ec7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt @@ -24,11 +24,6 @@ internal class Hentai18VN(context: MangaLoaderContext) : PagedMangaParser(contex keys.add(userAgentKey) } - // Testing... - // override fun getRequestHeaders(): Headers = Headers.Builder() - // .add("X-Requested-With", "XMLHttpRequest") - // .build() - override val filterCapabilities: MangaListFilterCapabilities get() = MangaListFilterCapabilities( isSearchSupported = true,