@ -13,7 +13,7 @@ import java.util.*
@MangaSourceParser("HENTAIZ", "HentaiZ", "vi", ContentType.HENTAI)
internal class HentaiZ(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.HENTAIZ, "hentaiz.run", 24) {
MadaraParser(context, MangaParserSource.HENTAIZ, "hentaiz.art", 24) {
override val listUrl = "truyen-hentai/"
override val tagPrefix = "the-loai/"
override val datePattern = "dd/MM/yyyy"
@ -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("cmangav.com")
override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("cmangaob.com")
override val availableSortOrders: Set<SortOrder>
get() = EnumSet.of(
@ -15,7 +15,7 @@ internal class DuaLeoTruyen(context: MangaLoaderContext) :
LegacyPagedMangaParser(context, MangaParserSource.DUALEOTRUYEN, 60) {
override val configKeyDomain: ConfigKey.Domain
get() = ConfigKey.Domain("dualeotruyenbot1.com")
get() = ConfigKey.Domain("dualeotruyenbotz.com")
override val userAgentKey = ConfigKey.UserAgent(UserAgents.CHROME_DESKTOP)
@ -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.art")
override val configKeyDomain = ConfigKey.Domain("lxmanga.wiki")
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
super.onCreateConfig(keys)
@ -23,7 +23,7 @@ internal class VcomycsParser(context: MangaLoaderContext) :
LegacyPagedMangaParser(context, MangaParserSource.VCOMYCS, 36) {
get() = ConfigKey.Domain("vivicomi.org")
get() = ConfigKey.Domain("vivicomi.one")
get() = EnumSet.of(SortOrder.UPDATED)
@ -26,6 +26,10 @@ internal abstract class WpComicsParser(
pageSize: Int = 48,
) : LegacyPagedMangaParser(context, source, pageSize) {
companion object {
const val netDomain = "nettruyenmoe.com"
}
override val configKeyDomain = ConfigKey.Domain(domain)
@ -16,7 +16,7 @@ internal class DocTruyen3Q(context: MangaLoaderContext) :
override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain(
"truyen3qvip.com",
"doctruyen3qui.pro", // Main domain
"doctruyen3qui3.pro", // Main domain
)
@ -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.net", 44) {
WpComicsParser(context, MangaParserSource.HAMTRUYEN, "hamtruyen.cc", 44) {
override suspend fun getDetails(manga: Manga): Manga = coroutineScope {
val fullUrl = manga.url.toAbsoluteUrl(domain)
@ -16,7 +16,7 @@ import java.util.EnumSet
@MangaSourceParser("NETTRUYENFE", "NetTruyenFE", "vi")
internal class NetTruyenFE(context: MangaLoaderContext) :
WpComicsParser(context, MangaParserSource.NETTRUYENFE, "nettruyenid.com", 20) {
WpComicsParser(context, MangaParserSource.NETTRUYENFE, WpComicsParser.netDomain, 20) {
override val listUrl = "/tim-kiem-nang-cao"
@MangaSourceParser("NETTRUYENLL", "NetTruyenLL", "vi")
internal class NetTruyenLL(context: MangaLoaderContext) :
WpComicsParser(context, MangaParserSource.NETTRUYENLL, "nettruyenid.com", 20) {
WpComicsParser(context, MangaParserSource.NETTRUYENLL, WpComicsParser.netDomain, 20) {
@MangaSourceParser("NETTRUYENSSR", "NetTruyenSSR", "vi")
internal class NetTruyenSSR(context: MangaLoaderContext) :
WpComicsParser(context, MangaParserSource.NETTRUYENSSR, "nettruyenid.com", 20) {
WpComicsParser(context, MangaParserSource.NETTRUYENSSR, WpComicsParser.netDomain, 20) {
@ -16,7 +16,7 @@ import java.util.*
@MangaSourceParser("NETTRUYENUU", "NetTruyenUU", "vi")
internal class NetTruyenUU(context: MangaLoaderContext) :
WpComicsParser(context, MangaParserSource.NETTRUYENUU, "nettruyenid.com", 20) {
WpComicsParser(context, MangaParserSource.NETTRUYENUU, WpComicsParser.netDomain, 20) {
@ -14,7 +14,7 @@ import java.util.*
@MangaSourceParser("NEWTRUYEN", "NewTruyen", "vi")
internal class NewTruyen(context: MangaLoaderContext) :
WpComicsParser(context, MangaParserSource.NEWTRUYEN, "newtruyen4.com", 36) {
WpComicsParser(context, MangaParserSource.NEWTRUYEN, "newtruyen5.com", 36) {
override suspend fun getFilterOptions() = MangaListFilterOptions(
availableTags = getAvailableTags(),
@ -14,7 +14,10 @@ import java.util.*
internal class TopTruyen(context: MangaLoaderContext) :
WpComicsParser(context, MangaParserSource.TOPTRUYEN, "www.toptruyentv.pro", 36) {
override val configKeyDomain = ConfigKey.Domain("www.toptruyentv.pro")
override val configKeyDomain = ConfigKey.Domain(
"www.toptruyentv.pro",
"www.toptruyentv2.pro"