From 8bb0c4f4f19f82efffd78c9867cd325445f00ee5 Mon Sep 17 00:00:00 2001 From: Draken <131387159+dragonx943@users.noreply.github.com> Date: Sun, 30 Mar 2025 00:27:50 +0700 Subject: [PATCH] [site/vi] Update sources domain --- .../kotatsu/parsers/site/madara/vi/HentaiZ.kt | 2 +- .../kotatsu/parsers/site/vi/CMangaParser.kt | 2 +- .../kotatsu/parsers/site/vi/DuaLeoTruyen.kt | 2 +- .../kotatsu/parsers/site/vi/Hentai18VN.kt | 2 +- .../kotatsu/parsers/site/vi/HentaiVnBuzz.kt | 2 +- .../kotatsu/parsers/site/vi/LxManga.kt | 2 +- .../kotatsu/parsers/site/vi/NhentaiWorld.kt | 29 ++++++++++++------- .../parsers/site/wpcomics/WpComicsParser.kt | 2 +- .../parsers/site/wpcomics/vi/DocTruyen3Q.kt | 11 +++---- .../parsers/site/wpcomics/vi/HamTruyen.kt | 2 +- .../parsers/site/wpcomics/vi/NewTruyen.kt | 2 +- .../parsers/site/wpcomics/vi/TopTruyen.kt | 10 +++++-- 12 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiZ.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiZ.kt index 435534be..13ed8882 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiZ.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiZ.kt @@ -13,7 +13,7 @@ import java.util.* @MangaSourceParser("HENTAIZ", "HentaiZ", "vi", ContentType.HENTAI) internal class HentaiZ(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.HENTAIZ, "hentaiz.news", 24) { + MadaraParser(context, MangaParserSource.HENTAIZ, "hentaiz.help", 24) { override val listUrl = "truyen-hentai/" override val tagPrefix = "the-loai/" override val datePattern = "dd/MM/yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/CMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/CMangaParser.kt index b92a33c2..903b353f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/CMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/CMangaParser.kt @@ -22,7 +22,7 @@ private const val PAGE_SIZE = 20 internal class CMangaParser(context: MangaLoaderContext) : LegacyPagedMangaParser(context, MangaParserSource.CMANGA, PAGE_SIZE), MangaParserAuthProvider { - override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("cmangaob.com") + override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("cmangaax.com") override val availableSortOrders: Set get() = EnumSet.of( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/DuaLeoTruyen.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/DuaLeoTruyen.kt index 9b0077d2..9413e847 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/DuaLeoTruyen.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/DuaLeoTruyen.kt @@ -16,7 +16,7 @@ internal class DuaLeoTruyen(context: MangaLoaderContext) : LegacyPagedMangaParser(context, MangaParserSource.DUALEOTRUYEN, 60) { override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("dualeotruyenbotz.com") + get() = ConfigKey.Domain("dualeotruyenbotx.com") override val userAgentKey = ConfigKey.UserAgent(UserAgents.CHROME_DESKTOP) 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 86253bc7..0e2051c5 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 @@ -16,7 +16,7 @@ import java.util.* internal class Hentai18VN(context: MangaLoaderContext) : LegacyPagedMangaParser(context, MangaParserSource.HENTAI18VN, 30) { - override val configKeyDomain = ConfigKey.Domain("hentai18vn.online") + override val configKeyDomain = ConfigKey.Domain("hentai18vn.pics") override fun onCreateConfig(keys: MutableCollection>) { super.onCreateConfig(keys) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/HentaiVnBuzz.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/HentaiVnBuzz.kt index 04b0a999..833d0aeb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/HentaiVnBuzz.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/HentaiVnBuzz.kt @@ -14,7 +14,7 @@ import java.util.* internal class HentaiVnBuzz(context: MangaLoaderContext) : LegacyPagedMangaParser(context, MangaParserSource.HENTAIVNBUZZ, 24) { - override val configKeyDomain = ConfigKey.Domain("hentaivn.bar") + override val configKeyDomain = ConfigKey.Domain("hentaivn.guru") override fun onCreateConfig(keys: MutableCollection>) { super.onCreateConfig(keys) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt index f4c6af5e..06de8656 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt @@ -11,7 +11,7 @@ import java.util.* @MangaSourceParser("LXMANGA", "LXManga", "vi", type = ContentType.HENTAI) internal class LxManga(context: MangaLoaderContext) : LegacyPagedMangaParser(context, MangaParserSource.LXMANGA, 60) { - override val configKeyDomain = ConfigKey.Domain("lxmanga.wiki") + override val configKeyDomain = ConfigKey.Domain("lxmanga.sbs") override fun onCreateConfig(keys: MutableCollection>) { super.onCreateConfig(keys) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/NhentaiWorld.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/NhentaiWorld.kt index 7a2b0ef0..6aa226fd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/NhentaiWorld.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/NhentaiWorld.kt @@ -7,6 +7,7 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.core.LegacyPagedMangaParser +import org.koitharu.kotatsu.parsers.exception.ParseException import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.json.getStringOrNull @@ -243,17 +244,23 @@ internal class NhentaiWorld(context: MangaLoaderContext) : } override suspend fun getPages(chapter: MangaChapter): List { - val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml() - return doc.select("img.m-auto.read-image.w-auto.h-auto.md\\:min-h-\\[800px\\].min-h-\\[300px\\]") - .map { img -> - val url = img.requireSrc() - MangaPage( - id = generateUid(url), - url = url, - preview = null, - source = source, - ) - } + val url = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(url).parseHtml() + val root = doc.select("img.m-auto.read-image.w-auto.h-auto.md\\:min-h-\\[800px\\].min-h-\\[300px\\]") + + if (root.isEmpty()) { // for Debug #1604 + throw ParseException("Root not found!", url) + } + + return root.map { img -> + val imgUrl = img.requireSrc() + MangaPage( + id = generateUid(imgUrl), + url = imgUrl, + preview = null, + source = source, + ) + } } private suspend fun fetchTags(): Set { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt index 874b81b4..5ef51b12 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/WpComicsParser.kt @@ -27,7 +27,7 @@ internal abstract class WpComicsParser( ) : LegacyPagedMangaParser(context, source, pageSize) { companion object { - const val netDomain = "nettruyenmoe.com" + const val netDomain = "nettruyenfpt.com" } override val configKeyDomain = ConfigKey.Domain(domain) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/DocTruyen3Q.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/DocTruyen3Q.kt index 4d4d06d6..04b643a1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/DocTruyen3Q.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/DocTruyen3Q.kt @@ -12,11 +12,11 @@ import java.util.* @MangaSourceParser("DOCTRUYEN3Q", "DocTruyen3Q", "vi") internal class DocTruyen3Q(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.DOCTRUYEN3Q, "truyen3qvip.com", 36) { + WpComicsParser(context, MangaParserSource.DOCTRUYEN3Q, "doctruyen3qui5.pro", 36) { override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain( - "truyen3qvip.com", - "doctruyen3qui3.pro", // Main domain + "doctruyen3qui5.pro", + "truyen3qvip.com" ) override val datePattern = "dd/MM/yyyy" @@ -230,9 +230,10 @@ internal class DocTruyen3Q(context: MangaLoaderContext) : "sp1.jpg") || url.contains("3q_fake") || url.contains("sp2.jpg") || - url.contains("3qui3.jpg") || + url.contains("3qui5.jpg") || url.contains("3q_top") || - url.contains("3q282.jpg") + url.contains("3q282.jpg") || + url.contains("3qui5_banner.jpg") ) { return@mapNotNull null } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/HamTruyen.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/HamTruyen.kt index 60148584..3eea5576 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/HamTruyen.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/HamTruyen.kt @@ -16,7 +16,7 @@ import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl @MangaSourceParser("HAMTRUYEN", "Ham Truyện", "vi") internal class HamTruyen(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.HAMTRUYEN, "hamtruyen.cc", 44) { + WpComicsParser(context, MangaParserSource.HAMTRUYEN, "hamtruyen1.com", 44) { override suspend fun getDetails(manga: Manga): Manga = coroutineScope { val fullUrl = manga.url.toAbsoluteUrl(domain) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NewTruyen.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NewTruyen.kt index 1989bd77..cdf25077 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NewTruyen.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NewTruyen.kt @@ -14,7 +14,7 @@ import java.util.* @MangaSourceParser("NEWTRUYEN", "NewTruyen", "vi") internal class NewTruyen(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.NEWTRUYEN, "newtruyen5.com", 36) { + WpComicsParser(context, MangaParserSource.NEWTRUYEN, "newtruyen6.com", 36) { override suspend fun getFilterOptions() = MangaListFilterOptions( availableTags = getAvailableTags(), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/TopTruyen.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/TopTruyen.kt index 63d2d223..2b1f2806 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/TopTruyen.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/TopTruyen.kt @@ -12,9 +12,9 @@ import java.util.* @MangaSourceParser("TOPTRUYEN", "TopTruyen", "vi") internal class TopTruyen(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.TOPTRUYEN, "www.toptruyentv2.pro", 36) { + WpComicsParser(context, MangaParserSource.TOPTRUYEN, "www.toptruyentv3.pro", 36) { - override val configKeyDomain = ConfigKey.Domain("www.toptruyentv2.pro") + override val configKeyDomain = ConfigKey.Domain("www.toptruyentv3.pro") override val datePattern = "dd/MM/yyyy" @@ -223,7 +223,11 @@ internal class TopTruyen(context: MangaLoaderContext) : ?: img.attrAsRelativeUrlOrNull("data-original") ?: return@mapNotNull null - if (url.contains("toptruyentv.jpg") || url.contains("follow.png") || url.contains("image_default.png")) { // Remove ads images + if (url.contains("toptruyentv.jpg") || + url.contains("follow.png") || + url.contains("image_default.png") || + url.contains("toptruyentv3.jpg") || + url.contains("img_001_1743221470.png")) { // Remove ads images return@mapNotNull null }