From 377606d1aa7b84e646c9512ee98b2d55b6c549e3 Mon Sep 17 00:00:00 2001 From: Draken Date: Mon, 3 Mar 2025 16:21:13 +0000 Subject: [PATCH 1/3] [CBHentai + HentaiZ] Fixes --- .github/summary.yaml | 2 +- .../parsers/site/madara/vi/HentaiCube.kt | 50 +++++++++++++++++ .../kotatsu/parsers/site/madara/vi/HentaiZ.kt | 53 ++++++++++++++++++- 3 files changed, 103 insertions(+), 2 deletions(-) diff --git a/.github/summary.yaml b/.github/summary.yaml index 3d183a6f..c1982aff 100644 --- a/.github/summary.yaml +++ b/.github/summary.yaml @@ -1 +1 @@ -total: 1192 +total: 1192 \ No newline at end of file diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt index 1e9ddd3c..df64bf90 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt @@ -1,5 +1,7 @@ package org.koitharu.kotatsu.parsers.site.madara.vi +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.exception.ParseException @@ -11,6 +13,7 @@ import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.util.* import java.util.* @@ -27,6 +30,53 @@ internal class HentaiCube(context: MangaLoaderContext) : availableTags = fetchTags(), ) + override suspend fun getDetails(manga: Manga): Manga = coroutineScope { + val fullUrl = manga.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + + val href = doc.selectFirst("head meta[property='og:url']")?.attr("content")?.toRelativeUrl(domain) ?: manga.url + val testCheckAsync = doc.select(selectTestAsync) + val chaptersDeferred = if (testCheckAsync.isNullOrEmpty()) { + async { loadChapters(href, doc) } + } else { + async { getChapters(manga, doc) } + } + + val desc = doc.select(selectDesc).html() + + val stateDiv = doc.selectFirst(selectState)?.selectLast("div.summary-content") + + val state = stateDiv?.let { + when (it.text().lowercase()) { + in ongoing -> MangaState.ONGOING + in finished -> MangaState.FINISHED + in abandoned -> MangaState.ABANDONED + in paused -> MangaState.PAUSED + else -> null + } + } + + val alt = doc.body().select(selectAlt).firstOrNull()?.tableValue()?.textOrNull() + + manga.copy( + title = doc.selectFirst("h1")?.textOrNull() ?: manga.title, + url = href, + publicUrl = href.toAbsoluteUrl(domain), + tags = doc.body().select(selectGenre).mapToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix("/").substringAfterLast('/'), + title = a.text().toTitleCase(), + source = source, + ) + }, + description = desc, + altTitles = setOfNotNull(alt), + state = state, + chapters = chaptersDeferred.await(), + contentRating = ContentRating.ADULT, + ) + } + override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() 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 f96831ee..7b63960a 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 @@ -1,15 +1,66 @@ package org.koitharu.kotatsu.parsers.site.madara.vi +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.util.* +import java.util.* @MangaSourceParser("HENTAIZ", "HentaiZ", "vi", ContentType.HENTAI) internal class HentaiZ(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.HENTAIZ, "hentaiz.pw", 24) { + MadaraParser(context, MangaParserSource.HENTAIZ, "hentaiz.run", 24) { override val listUrl = "truyen-hentai/" override val tagPrefix = "the-loai/" override val datePattern = "dd/MM/yyyy" + + override suspend fun getDetails(manga: Manga): Manga = coroutineScope { + val fullUrl = manga.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + + val href = doc.selectFirst("head meta[property='og:url']")?.attr("content")?.toRelativeUrl(domain) ?: manga.url + val testCheckAsync = doc.select(selectTestAsync) + val chaptersDeferred = if (testCheckAsync.isNullOrEmpty()) { + async { loadChapters(href, doc) } + } else { + async { getChapters(manga, doc) } + } + + val desc = doc.select(selectDesc).html() + + val stateDiv = doc.selectFirst(selectState)?.selectLast("div.summary-content") + + val state = stateDiv?.let { + when (it.text().lowercase()) { + in ongoing -> MangaState.ONGOING + in finished -> MangaState.FINISHED + in abandoned -> MangaState.ABANDONED + in paused -> MangaState.PAUSED + else -> null + } + } + + val alt = doc.body().select(selectAlt).firstOrNull()?.tableValue()?.textOrNull() + + manga.copy( + url = href, + publicUrl = href.toAbsoluteUrl(domain), + tags = doc.body().select(selectGenre).mapToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix("/").substringAfterLast('/'), + title = a.text().toTitleCase(), + source = source, + ) + }, + description = desc, + altTitles = setOfNotNull(alt), + state = state, + chapters = chaptersDeferred.await(), + contentRating = ContentRating.ADULT, + ) + } } From b2c7d1028cbb2d768b9fe6f77a4ed0036e2cbdf3 Mon Sep 17 00:00:00 2001 From: Draken Date: Mon, 3 Mar 2025 16:29:58 +0000 Subject: [PATCH 2/3] [Madara] Fixes --- .../parsers/site/madara/MadaraParser.kt | 2 +- .../parsers/site/madara/vi/HentaiCube.kt | 52 +------------------ .../parsers/site/madara/vi/HentaiVnPlus.kt | 2 +- 3 files changed, 3 insertions(+), 53 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index c2e04fc0..bd295f62 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -578,7 +578,7 @@ internal abstract class MadaraParser( altTitles = setOfNotNull(alt), state = state, chapters = chaptersDeferred.await(), - contentRating = if (doc.selectFirst(".adult-confirm") != null) { + contentRating = if (doc.selectFirst(".adult-confirm") != null || isNsfwSource) { ContentRating.ADULT } else { ContentRating.SAFE diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt index df64bf90..71e4f656 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt @@ -1,7 +1,5 @@ package org.koitharu.kotatsu.parsers.site.madara.vi -import kotlinx.coroutines.async -import kotlinx.coroutines.coroutineScope import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.exception.ParseException @@ -13,7 +11,6 @@ import org.koitharu.kotatsu.parsers.model.MangaListFilterOptions import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.util.* import java.util.* @@ -21,7 +18,7 @@ import java.util.* internal class HentaiCube(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.HENTAICUBE, "hentaicube.xyz") { - override val configKeyDomain = ConfigKey.Domain("hentaicube.xyz", "hentaicb.love") // hentaicb.love broken + override val configKeyDomain = ConfigKey.Domain("hentaicube.xyz") override val datePattern = "dd/MM/yyyy" override val postReq = true @@ -30,53 +27,6 @@ internal class HentaiCube(context: MangaLoaderContext) : availableTags = fetchTags(), ) - override suspend fun getDetails(manga: Manga): Manga = coroutineScope { - val fullUrl = manga.url.toAbsoluteUrl(domain) - val doc = webClient.httpGet(fullUrl).parseHtml() - - val href = doc.selectFirst("head meta[property='og:url']")?.attr("content")?.toRelativeUrl(domain) ?: manga.url - val testCheckAsync = doc.select(selectTestAsync) - val chaptersDeferred = if (testCheckAsync.isNullOrEmpty()) { - async { loadChapters(href, doc) } - } else { - async { getChapters(manga, doc) } - } - - val desc = doc.select(selectDesc).html() - - val stateDiv = doc.selectFirst(selectState)?.selectLast("div.summary-content") - - val state = stateDiv?.let { - when (it.text().lowercase()) { - in ongoing -> MangaState.ONGOING - in finished -> MangaState.FINISHED - in abandoned -> MangaState.ABANDONED - in paused -> MangaState.PAUSED - else -> null - } - } - - val alt = doc.body().select(selectAlt).firstOrNull()?.tableValue()?.textOrNull() - - manga.copy( - title = doc.selectFirst("h1")?.textOrNull() ?: manga.title, - url = href, - publicUrl = href.toAbsoluteUrl(domain), - tags = doc.body().select(selectGenre).mapToSet { a -> - MangaTag( - key = a.attr("href").removeSuffix("/").substringAfterLast('/'), - title = a.text().toTitleCase(), - source = source, - ) - }, - description = desc, - altTitles = setOfNotNull(alt), - state = state, - chapters = chaptersDeferred.await(), - contentRating = ContentRating.ADULT, - ) - } - override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnPlus.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnPlus.kt index 954202ff..a85ebcfd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnPlus.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiVnPlus.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HENTAIVNPLUS", "HentaiVN.plus", "vi", ContentType.HENTAI) internal class HentaiVnPlus(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.HENTAIVNPLUS, "hentaivn.men", 24) { + MadaraParser(context, MangaParserSource.HENTAIVNPLUS, "hentaivn.art", 24) { override val listUrl = "truyen-hentai/" override val tagPrefix = "the-loai/" override val datePattern = "dd/MM/yyyy" From 59705098868203efa264bbc9b6e3b0c5170a918b Mon Sep 17 00:00:00 2001 From: Draken Date: Mon, 3 Mar 2025 16:41:50 +0000 Subject: [PATCH 3/3] [site/vi] Update sources domain --- .../org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt | 2 +- .../org/koitharu/kotatsu/parsers/site/vi/CMangaParser.kt | 2 +- .../org/koitharu/kotatsu/parsers/site/vi/DuaLeoTruyen.kt | 2 +- .../org/koitharu/kotatsu/parsers/site/vi/Hentai18VN.kt | 2 +- .../org/koitharu/kotatsu/parsers/site/vi/HentaiVnBuzz.kt | 2 +- .../kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt | 2 +- .../org/koitharu/kotatsu/parsers/site/vi/VcomycsParser.kt | 2 +- .../koitharu/kotatsu/parsers/site/wpcomics/vi/HamTruyen.kt | 2 +- .../koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyen.kt | 2 +- .../koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenFE.kt | 2 +- .../koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt | 2 +- .../kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt | 2 +- .../koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenUU.kt | 2 +- .../koitharu/kotatsu/parsers/site/wpcomics/vi/NewTruyen.kt | 2 +- .../koitharu/kotatsu/parsers/site/wpcomics/vi/TopTruyen.kt | 5 ++--- 15 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt index a9cda99f..19fa0ae9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/TruyenVn.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("TRUYENVN", "TruyenVn", "vi", ContentType.HENTAI) internal class TruyenVn(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.TRUYENVN, "truyenvn.tech", 20) { + MadaraParser(context, MangaParserSource.TRUYENVN, "truyenvn.nl", 20) { override val listUrl = "truyen-tranh/" 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 c0b95732..9a35c0ed 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("cmangax.com") + override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("cmangav.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 e6f14591..e5a8693d 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 @@ -15,7 +15,7 @@ internal class DuaLeoTruyen(context: MangaLoaderContext) : LegacyPagedMangaParser(context, MangaParserSource.DUALEOTRUYEN, 60) { override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("dualeotruyenxxy.com") + get() = ConfigKey.Domain("dualeotruyenbot1.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 d1b909dc..86253bc7 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.art") + override val configKeyDomain = ConfigKey.Domain("hentai18vn.online") 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 94c55889..04b0a999 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.buzz") + override val configKeyDomain = ConfigKey.Domain("hentaivn.bar") 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 32e20f06..bf7976e3 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.cloud") + override val configKeyDomain = ConfigKey.Domain("lxmanga.art") override fun onCreateConfig(keys: MutableCollection>) { super.onCreateConfig(keys) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/VcomycsParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/VcomycsParser.kt index 9e2b983a..4d0e405b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/VcomycsParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/VcomycsParser.kt @@ -23,7 +23,7 @@ internal class VcomycsParser(context: MangaLoaderContext) : LegacyPagedMangaParser(context, MangaParserSource.VCOMYCS, 36) { override val configKeyDomain: ConfigKey.Domain - get() = ConfigKey.Domain("vivicomi.org") + get() = ConfigKey.Domain("vivicomi.info") override val availableSortOrders: Set get() = EnumSet.of(SortOrder.UPDATED) 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 71d1b001..b661b149 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.vn", 44) { + WpComicsParser(context, MangaParserSource.HAMTRUYEN, "hamtruyen.net", 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/NetTruyen.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyen.kt index 88e45040..d0164975 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyen.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyen.kt @@ -13,7 +13,7 @@ import java.text.SimpleDateFormat @MangaSourceParser("NETTRUYEN", "NetTruyen", "vi") internal class NetTruyen(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.NETTRUYEN, "nettruyenvng.com", 36) { + WpComicsParser(context, MangaParserSource.NETTRUYEN, "nettruyenrr.com", 36) { override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain( "nettruyenrr.com", diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenFE.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenFE.kt index e69dc0f8..ae111be9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenFE.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenFE.kt @@ -16,7 +16,7 @@ import java.util.EnumSet @MangaSourceParser("NETTRUYENFE", "NetTruyenFE", "vi") internal class NetTruyenFE(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.NETTRUYENFE, "nettruyenedu.com", 20) { + WpComicsParser(context, MangaParserSource.NETTRUYENFE, "nettruyenid.com", 20) { override val listUrl = "/tim-kiem-nang-cao" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt index be077fbe..03889817 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenLL.kt @@ -16,7 +16,7 @@ import java.util.EnumSet @MangaSourceParser("NETTRUYENLL", "NetTruyenLL", "vi") internal class NetTruyenLL(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.NETTRUYENLL, "nettruyenedu.com", 20) { + WpComicsParser(context, MangaParserSource.NETTRUYENLL, "nettruyenid.com", 20) { override val listUrl = "/tim-kiem-nang-cao" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt index 3ac9ab76..916a768c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenSSR.kt @@ -16,7 +16,7 @@ import java.util.EnumSet @MangaSourceParser("NETTRUYENSSR", "NetTruyenSSR", "vi") internal class NetTruyenSSR(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.NETTRUYENSSR, "nettruyenedu.com", 20) { + WpComicsParser(context, MangaParserSource.NETTRUYENSSR, "nettruyenid.com", 20) { override val listUrl = "/tim-kiem-nang-cao" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenUU.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenUU.kt index 1c8c2967..300a4ec9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenUU.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NetTruyenUU.kt @@ -16,7 +16,7 @@ import java.util.* @MangaSourceParser("NETTRUYENUU", "NetTruyenUU", "vi") internal class NetTruyenUU(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.NETTRUYENUU, "nettruyenedu.com", 20) { + WpComicsParser(context, MangaParserSource.NETTRUYENUU, "nettruyenid.com", 20) { override val listUrl = "/tim-kiem-nang-cao" 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 81ba9de7..ac1c97e9 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, "newtruyen2.com", 36) { + WpComicsParser(context, MangaParserSource.NEWTRUYEN, "newtruyen4.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 22f0539a..893e85d3 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,13 +12,12 @@ import java.util.* @MangaSourceParser("TOPTRUYEN", "TopTruyen", "vi") internal class TopTruyen(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.TOPTRUYEN, "www.toptruyen369.net", 36) { + WpComicsParser(context, MangaParserSource.TOPTRUYEN, "www.toptruyentv.pro", 36) { override val configKeyDomain = ConfigKey.Domain( - "www.toptruyen369.net", // Main domain + "www.toptruyentv.pro", // Main domain "www.toptruyen28.net", "www.toptruyento.pro", - "www.toptruyenpro1.com", ) override val datePattern = "dd/MM/yyyy"