From a01493e07151aeebe9a7c55b0d87fca0f28ebdee Mon Sep 17 00:00:00 2001 From: devi Date: Thu, 31 Oct 2024 21:41:11 +0100 Subject: [PATCH] [EpsilonScan] fix close #1038 [Keyoapp] fix pages close #1192 [Yaoiflix] Fix close #1201 [Teamxnovel] fix Searching close #1176 close #1185 [ManhwaLatino] close #1181 [MiHentai] fix close #1180 [GenzToon] close #1169 [MangaGalaxy] close #1168 ( redirect to VortexScans ) [CatharsisFantasy] close #1158 [CatharsisWorld] close #1157 Update soures --- .github/summary.yaml | 2 +- .../parsers/site/all/HitomiLaParser.kt | 88 +++++------ .../kotatsu/parsers/site/ar/TeamXNovel.kt | 89 ++++++----- .../kotatsu/parsers/site/en/Pururin.kt | 2 + .../parsers/site/fuzzydoodle/en/ResetScans.kt | 23 +++ .../parsers/site/heancms/en/TempleScan.kt | 2 +- .../parsers/site/heancms/es/YugenMangasEs.kt | 2 +- .../kotatsu/parsers/site/iken/IkenParser.kt | 11 +- .../parsers/site/iken/en/MangaGalaxyParser.kt | 6 +- .../parsers/site/iken/en/VortexScans.kt | 2 +- .../parsers/site/keyoapp/KeyoappParser.kt | 47 ++++-- .../{mangareader => keyoapp}/en/ArvenScans.kt | 8 +- .../parsers/site/keyoapp/en/LaidBackScans.kt | 2 + .../{mangareader => keyoapp}/en/RaiScans.kt | 8 +- .../parsers/site/keyoapp/en/SuryaScans.kt | 10 ++ .../parsers/site/keyoapp/fr/Astrames.kt | 2 + .../{madara => keyoapp}/fr/ReaperScansFr.kt | 8 +- .../parsers/site/madara/all/EroManhwa.kt | 2 + .../parsers/site/madara/ar/MangaPeak.kt | 2 + .../parsers/site/madara/ar/MangaTime.kt | 2 + .../parsers/site/madara/en/EliteManga.kt | 2 + .../parsers/site/madara/en/FirstKissManhua.kt | 12 ++ .../parsers/site/madara/en/HiperDex.kt | 6 +- .../parsers/site/madara/en/HunLight.kt | 42 +---- .../parsers/site/madara/en/HuntersScanEn.kt | 2 + .../parsers/site/madara/en/InfamousScans.kt | 2 + .../parsers/site/madara/en/LeviatanScans.kt | 2 + .../parsers/site/madara/en/MangaHall.kt | 2 + .../parsers/site/madara/en/MangaTxTo.kt | 2 + .../parsers/site/madara/en/ManyToon.kt | 2 +- .../parsers/site/madara/en/MsyPublisher.kt | 2 + .../parsers/site/madara/en/NightComic.kt | 2 + .../parsers/site/madara/en/PonyManga.kt | 2 + .../parsers/site/madara/en/ResetScans.kt | 54 ------- .../parsers/site/madara/en/ToonChill.kt | 2 + .../en/{RackusReads.kt => VyvyManga.kt} | 8 +- .../parsers/site/madara/en/ZinChanManga.kt | 4 +- .../parsers/site/madara/en/ZinchanMangaNet.kt | 2 +- .../parsers/site/madara/es/Darknebulus.kt | 10 ++ .../parsers/site/madara/es/EmperorScan.kt | 2 +- .../parsers/site/madara/es/HouseOfOtakus.kt | 10 ++ .../kotatsu/parsers/site/madara/es/Jobsibe.kt | 2 + .../parsers/site/madara/es/Lectorunm.kt | 2 + .../site/madara/es/LegendScanlations.kt | 12 ++ .../parsers/site/madara/es/MangaCrab.kt | 2 +- .../parsers/site/madara/es/MangaMundoDrama.kt | 5 +- .../parsers/site/madara/es/ManhwaLatino.kt | 35 ++++- .../parsers/site/madara/es/MantrazScan.kt | 2 +- .../kotatsu/parsers/site/madara/es/MhScans.kt | 2 +- .../parsers/site/madara/es/Mi2MangaEs.kt | 2 +- .../parsers/site/madara/es/Panconcola.kt | 2 +- .../parsers/site/madara/es/SamuraiScan.kt | 2 +- .../site/madara/es/Scambertraslator.kt | 2 + .../parsers/site/madara/es/TopComicPorno.kt | 2 +- .../site/madara/es/TraduccionesAmistosas.kt | 12 ++ .../parsers/site/madara/es/YaoiManga.kt | 10 ++ .../parsers/site/madara/fr/EpsilonSoft.kt | 1 + .../site/madara/fr/EpsilonscanParser.kt | 1 + .../parsers/site/madara/fr/InovaScanManga.kt | 12 ++ .../parsers/site/madara/id/LumosKomik.kt | 2 +- .../parsers/site/madara/id/Shinigami.kt | 2 +- .../parsers/site/madara/id/YuraManga.kt | 13 -- .../parsers/site/madara/pt/ArcticScan.kt | 12 ++ .../parsers/site/madara/pt/BrMangasTop.kt | 12 ++ .../parsers/site/madara/pt/DreamScan.kt | 2 +- .../{mangareader => madara}/pt/HikariScan.kt | 6 +- .../parsers/site/madara/pt/NirvanaScan.kt | 10 ++ .../parsers/site/madara/pt/PlumaComics.kt | 12 ++ .../site/madara/pt/RainbowFairyScan.kt | 2 + .../parsers/site/madara/tr/Atikrost.kt | 2 + .../parsers/site/madara/tr/DeccalScans.kt | 4 +- .../parsers/site/madara/tr/GloryManga.kt | 5 +- .../parsers/site/madara/tr/Grimelek.kt | 2 +- .../parsers/site/madara/tr/Jiangzaitoon.kt | 2 +- .../parsers/site/madara/tr/LichSubs.kt | 12 ++ .../parsers/site/madara/tr/MajorScans.kt | 2 +- .../parsers/site/madara/tr/MangaGezgini.kt | 12 ++ .../parsers/site/madara/tr/MangaRuhu.kt | 10 ++ .../kotatsu/parsers/site/madara/tr/MangaTr.kt | 2 +- .../parsers/site/madara/tr/MugiManga.kt | 13 ++ .../parsers/site/madara/tr/YaoiFlix.kt | 11 ++ .../kotatsu/parsers/site/madara/tr/YaoiTr.kt | 2 + .../parsers/site/madara/tr/ZamanManga.kt | 2 + .../parsers/site/madara/vi/HentaiVnPlus.kt | 2 +- .../parsers/site/madara/vi/Quaanhdaocuteo.kt | 2 + .../site/mangareader/ar/ArAreaScans.kt | 2 +- .../parsers/site/mangareader/ar/AreaScans.kt | 2 +- .../parsers/site/mangareader/ar/MangaNoon.kt | 17 ++ .../parsers/site/mangareader/ar/Manjanoon.kt | 2 +- .../parsers/site/mangareader/ar/Normoyun.kt | 2 +- .../site/mangareader/ar/ThunderScans.kt | 2 +- .../parsers/site/mangareader/ar/UmiManga.kt | 2 + .../parsers/site/mangareader/ar/VexManga.kt | 2 +- .../parsers/site/mangareader/en/AgsComics.kt | 2 +- .../site/mangareader/en/CypherScans.kt | 2 +- .../parsers/site/mangareader/en/ErosScans.kt | 2 +- .../site/mangareader/en/FlameComics.kt | 2 +- .../parsers/site/mangareader/en/KaiScans.kt | 2 +- .../site/mangareader/en/KomikLabParser.kt | 2 + .../site/mangareader/en/LuaComicCom.kt | 2 +- .../site/mangareader/en/LuminousScans.kt | 2 + .../en/{SuryaScans.kt => ManhwaFreake.kt} | 10 +- .../site/mangareader/en/RackusReads.kt | 17 ++ .../parsers/site/mangareader/en/SkyManga.kt | 2 +- .../parsers/site/mangareader/en/TecnoScans.kt | 2 +- .../parsers/site/mangareader/en/VarnaScan.kt | 2 +- .../parsers/site/mangareader/en/VoidScans.kt | 2 +- .../parsers/site/mangareader/en/WitchScans.kt | 17 ++ .../parsers/site/mangareader/es/AsiaLotuss.kt | 10 ++ .../site/mangareader/es/CatharsisFantasy.kt | 81 ++++++++++ .../site/mangareader/es/CatharsisWorld.kt | 18 +++ .../parsers/site/mangareader/es/Doujins.kt | 2 + .../parsers/site/mangareader/es/InariManga.kt | 2 +- .../parsers/site/mangareader/es/InariPikav.kt | 2 +- .../parsers/site/mangareader/es/MiauScan.kt | 2 +- .../parsers/site/mangareader/id/AlceaScan.kt | 2 + .../parsers/site/mangareader/id/Ikiru.kt | 2 +- .../parsers/site/mangareader/id/KofiScans.kt | 14 ++ .../parsers/site/mangareader/id/KomikMama.kt | 12 ++ .../site/mangareader/id/MangaSusuku.kt | 2 +- .../site/mangareader/id/MangaTaleParser.kt | 4 +- .../site/mangareader/id/ManhwaIndoIcu.kt | 2 +- .../site/mangareader/id/ManhwadesuParser.kt | 2 +- .../site/mangareader/id/MasterKomik.kt | 2 +- .../parsers/site/mangareader/id/MiHentai.kt | 1 + .../site/mangareader/id/Tukangkomik.kt | 2 +- .../parsers/site/mangareader/pt/DiskusScan.kt | 2 +- .../site/mangareader/pt/SssScanlator.kt | 2 +- .../tr/{MangaGezgini.kt => HyperionScans.kt} | 12 +- .../mangareader/tr/TempestfansubParser.kt | 2 +- .../kotatsu/parsers/site/ru/MangaWtfParser.kt | 22 +-- .../parsers/site/scan/it/MangaItalia.kt | 2 +- .../kotatsu/parsers/site/tr/YaoiFlix.kt | 147 ------------------ .../parsers/site/vi/BlogTruyenParser.kt | 6 +- .../parsers/site/vi/CuuTruyenParser.kt | 2 +- .../parsers/site/wpcomics/ja/MangaRaw.kt | 2 +- .../parsers/site/wpcomics/vi/DocTruyen3Q.kt | 85 +++++----- .../parsers/site/wpcomics/vi/NhatTruyenVN.kt | 6 + .../parsers/site/wpcomics/vi/TopTruyen.kt | 81 +++++----- .../parsers/site/zeistmanga/es/NekoScans.kt | 2 +- .../parsers/site/zeistmanga/id/KomikGes.kt | 2 + .../parsers/site/zeistmanga/pt/MaxgsScan.kt | 2 + .../site/zeistmanga/tr/HyperionScans.kt | 30 ---- .../parsers/site/zmanga/id/KomikIndoInfo.kt | 4 +- .../parsers/site/zmanga/id/YuraManga.kt | 13 ++ 145 files changed, 859 insertions(+), 582 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/fuzzydoodle/en/ResetScans.kt rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/{mangareader => keyoapp}/en/ArvenScans.kt (50%) rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/{mangareader => keyoapp}/en/RaiScans.kt (50%) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/SuryaScans.kt rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/{madara => keyoapp}/fr/ReaperScansFr.kt (55%) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FirstKissManhua.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ResetScans.kt rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/{RackusReads.kt => VyvyManga.kt} (54%) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Darknebulus.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HouseOfOtakus.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/LegendScanlations.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TraduccionesAmistosas.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/YaoiManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/InovaScanManga.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/YuraManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArcticScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BrMangasTop.kt rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/{mangareader => madara}/pt/HikariScan.kt (53%) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/NirvanaScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PlumaComics.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/LichSubs.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaGezgini.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaRuhu.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MugiManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiFlix.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaNoon.kt rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/{SuryaScans.kt => ManhwaFreake.kt} (65%) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RackusReads.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/WitchScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/AsiaLotuss.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CatharsisFantasy.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CatharsisWorld.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KofiScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMama.kt rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/{MangaGezgini.kt => HyperionScans.kt} (67%) delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/YaoiFlix.kt delete mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/tr/HyperionScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/YuraManga.kt diff --git a/.github/summary.yaml b/.github/summary.yaml index 68ef3d24..c1462782 100644 --- a/.github/summary.yaml +++ b/.github/summary.yaml @@ -1 +1 @@ -total: 1128 \ No newline at end of file +total: 1151 \ No newline at end of file diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/HitomiLaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/HitomiLaParser.kt index 64285374..2141d892 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/HitomiLaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/HitomiLaParser.kt @@ -480,14 +480,14 @@ internal class HitomiLaParser(context: MangaLoaderContext) : MangaParser(context title = doc.selectFirstOrThrow("h1").text(), url = id.toString(), coverUrl = - "https:" + - doc.selectFirstOrThrow("picture > source") - .attr("data-srcset") - .substringBefore(" "), + "https:" + + doc.selectFirstOrThrow("picture > source") + .attr("data-srcset") + .substringBefore(" "), publicUrl = - doc.selectFirstOrThrow("h1 > a") - .attrAsRelativeUrl("href") - .toAbsoluteUrl(domain), + doc.selectFirstOrThrow("h1 > a") + .attrAsRelativeUrl("href") + .toAbsoluteUrl(domain), author = null, tags = emptySet(), isNsfw = true, @@ -510,37 +510,37 @@ internal class HitomiLaParser(context: MangaLoaderContext) : MangaParser(context return manga.copy( title = json.getString("title"), largeCoverUrl = - json.getJSONArray("files").getJSONObject(0).let { - val hash = it.getString("hash") - val commonId = commonImageId() - val imageId = imageIdFromHash(hash) - val subDomain = 'a' + subdomainOffset(imageId) - - "https://${getDomain("${subDomain}a")}/webp/$commonId$imageId/$hash.webp" - }, + json.getJSONArray("files").getJSONObject(0).let { + val hash = it.getString("hash") + val commonId = commonImageId() + val imageId = imageIdFromHash(hash) + val subDomain = 'a' + subdomainOffset(imageId) + + "https://${getDomain("${subDomain}a")}/webp/$commonId$imageId/$hash.webp" + }, author = - json.optJSONArray("artists") - ?.mapJSON { it.getString("artist").toCamelCase() } - ?.joinToString(), + json.optJSONArray("artists") + ?.mapJSON { it.getString("artist").toCamelCase() } + ?.joinToString(), publicUrl = json.getString("galleryurl").toAbsoluteUrl(domain), tags = - buildSet { - json.optJSONArray("characters") - ?.mapToTags("character") - ?.let(::addAll) - json.optJSONArray("tags") - ?.mapToTags("tag") - ?.let(::addAll) - json.optJSONArray("artists") - ?.mapToTags("artist") - ?.let(::addAll) - json.optJSONArray("parodys") - ?.mapToTags("parody") - ?.let(::addAll) - json.optJSONArray("groups") - ?.mapToTags("group") - ?.let(::addAll) - }, + buildSet { + json.optJSONArray("characters") + ?.mapToTags("character") + ?.let(::addAll) + json.optJSONArray("tags") + ?.mapToTags("tag") + ?.let(::addAll) + json.optJSONArray("artists") + ?.mapToTags("artist") + ?.let(::addAll) + json.optJSONArray("parodys") + ?.mapToTags("parody") + ?.let(::addAll) + json.optJSONArray("groups") + ?.mapToTags("group") + ?.let(::addAll) + }, chapters = listOf( MangaChapter( id = generateUid(manga.url), @@ -564,15 +564,15 @@ internal class HitomiLaParser(context: MangaLoaderContext) : MangaParser(context mapJSON { MangaTag( title = - it.getString(key).toCamelCase().let { title -> - if (it.getStringOrNull("female")?.toIntOrNull() == 1) { - "$title ♀" - } else if (it.getStringOrNull("male")?.toIntOrNull() == 1) { - "$title ♂" - } else { - title - } - }, + it.getString(key).toCamelCase().let { title -> + if (it.getStringOrNull("female")?.toIntOrNull() == 1) { + "$title ♀" + } else if (it.getStringOrNull("male")?.toIntOrNull() == 1) { + "$title ♂" + } else { + title + } + }, key = it.getString("url").tagUrlToTag(), source = source, ).let(tags::add) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/TeamXNovel.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/TeamXNovel.kt index c237ceb9..3f55e746 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/TeamXNovel.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/TeamXNovel.kt @@ -18,7 +18,7 @@ internal class TeamXNovel(context: MangaLoaderContext) : PagedMangaParser(contex override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY) - override val configKeyDomain = ConfigKey.Domain("teamoney.site") + override val configKeyDomain = ConfigKey.Domain("olympustaff.com") override fun onCreateConfig(keys: MutableCollection>) { super.onCreateConfig(keys) @@ -28,7 +28,6 @@ internal class TeamXNovel(context: MangaLoaderContext) : PagedMangaParser(contex override val filterCapabilities: MangaListFilterCapabilities get() = MangaListFilterCapabilities( isSearchSupported = true, - isSearchWithFiltersSupported = true, ) override suspend fun getFilterOptions() = MangaListFilterOptions( @@ -45,49 +44,55 @@ internal class TeamXNovel(context: MangaLoaderContext) : PagedMangaParser(contex val url = buildString { append("https://") append(domain) - - if (order == SortOrder.UPDATED) { - if (filter.tags.isNotEmpty() || filter.demographics.isNotEmpty()) { - throw IllegalArgumentException("Updated sorting does not support other sorting filters") - } - append("/?page=") - append(page.toString()) - } else { - append("/series?page=") - append(page.toString()) - - filter.query?.let { - append("&search=") + when { + !filter.query.isNullOrEmpty() -> { + append("/?search=") append(filter.query.urlEncoded()) + append("&page=") + append(page) } - filter.tags.oneOrThrowIfMany()?.let { - append("&genre=") - append(it.key) - } - - filter.types.forEach { - append("&type=") - append( - when (it) { - ContentType.MANGA -> "مانجا ياباني" - ContentType.MANHWA -> "مانهوا كورية" - ContentType.MANHUA -> "مانها صيني" - else -> "" - }, - ) - } - - filter.states.oneOrThrowIfMany()?.let { - append("status=") - append( - when (it) { - MangaState.ONGOING -> "مستمرة" - MangaState.FINISHED -> "مكتمل" - MangaState.ABANDONED -> "متوقف" - else -> "مستمرة" - }, - ) + else -> { + + if (order == SortOrder.UPDATED) { + if (filter.tags.isNotEmpty() || filter.demographics.isNotEmpty()) { + throw IllegalArgumentException("Updated sorting does not support other sorting filters") + } + append("/?page=") + append(page.toString()) + } else { + append("/series?page=") + append(page.toString()) + + filter.tags.oneOrThrowIfMany()?.let { + append("&genre=") + append(it.key) + } + + filter.types.forEach { + append("&type=") + append( + when (it) { + ContentType.MANGA -> "مانجا ياباني" + ContentType.MANHWA -> "مانهوا كورية" + ContentType.MANHUA -> "مانها صيني" + else -> "" + }, + ) + } + + filter.states.oneOrThrowIfMany()?.let { + append("status=") + append( + when (it) { + MangaState.ONGOING -> "مستمرة" + MangaState.FINISHED -> "مكتمل" + MangaState.ABANDONED -> "متوقف" + else -> "مستمرة" + }, + ) + } + } } } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/Pururin.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/Pururin.kt index 657c19a3..e8b2b7c0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/Pururin.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/Pururin.kt @@ -5,6 +5,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.coroutineScope import org.jsoup.nodes.Element +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser @@ -13,6 +14,7 @@ import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.util.* import java.util.* +@Broken @MangaSourceParser("PURURIN", "Pururin", "en", ContentType.HENTAI) internal class Pururin(context: MangaLoaderContext) : PagedMangaParser(context, MangaParserSource.PURURIN, pageSize = 20) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fuzzydoodle/en/ResetScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fuzzydoodle/en/ResetScans.kt new file mode 100644 index 00000000..b7cce3c4 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fuzzydoodle/en/ResetScans.kt @@ -0,0 +1,23 @@ +package org.koitharu.kotatsu.parsers.site.fuzzydoodle.en + +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.MangaListFilterOptions +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.fuzzydoodle.FuzzyDoodleParser +import java.util.EnumSet + +@MangaSourceParser("RESETSCANS", "ResetScans", "en") +internal class ResetScans(context: MangaLoaderContext) : + FuzzyDoodleParser(context, MangaParserSource.RESETSCANS, "reset-scans.xyz") { + + override suspend fun getFilterOptions() = MangaListFilterOptions( + availableContentTypes = EnumSet.of( + ContentType.MANGA, + ContentType.MANHWA, + ContentType.MANHUA, + ), + ) +} + diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/en/TempleScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/en/TempleScan.kt index 2046249c..c271e7c3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/en/TempleScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/en/TempleScan.kt @@ -10,7 +10,7 @@ import org.koitharu.kotatsu.parsers.util.domain @Broken // Not dead, changed template @MangaSourceParser("TEMPLESCAN", "TempleScan", "en") internal class TempleScan(context: MangaLoaderContext) : - HeanCms(context, MangaParserSource.TEMPLESCAN, "templescan.net") { + HeanCms(context, MangaParserSource.TEMPLESCAN, "templetoons.com") { override val pathManga = "comic" override val apiPath: String diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/es/YugenMangasEs.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/es/YugenMangasEs.kt index de01288a..f90873cc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/es/YugenMangasEs.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/es/YugenMangasEs.kt @@ -9,4 +9,4 @@ import org.koitharu.kotatsu.parsers.site.heancms.HeanCms @Broken // Not dead but changed template @MangaSourceParser("YUGEN_MANGAS_ES", "YugenMangas.lat", "es", ContentType.HENTAI) internal class YugenMangasEs(context: MangaLoaderContext) : - HeanCms(context, MangaParserSource.YUGEN_MANGAS_ES, "lectorikigai.efope.com") + HeanCms(context, MangaParserSource.YUGEN_MANGAS_ES, "lectorikigai.acamu.net") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/IkenParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/IkenParser.kt index 113f04af..2d073a26 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/IkenParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/IkenParser.kt @@ -8,6 +8,7 @@ import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.json.asTypedList import org.koitharu.kotatsu.parsers.util.json.getBooleanOrDefault +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull import org.koitharu.kotatsu.parsers.util.json.mapJSON import java.text.SimpleDateFormat import java.util.* @@ -131,13 +132,17 @@ internal abstract class IkenParser( val seriesId = manga.id val url = "https://$domain/api/chapters?postId=$seriesId&skip=0&take=1000&order=desc&userid=" val json = webClient.httpGet(url).parseJson().getJSONObject("post") - val slug = json.getString("slug") + val slug = json.getStringOrNull("slug") val data = json.getJSONArray("chapters").asTypedList() val dateFormat = SimpleDateFormat(datePattern, Locale.ENGLISH) return manga.copy( chapters = data.mapChapters(reversed = true) { i, it -> - val chapterUrl = - "/series/$slug/${it.getString("slug")}" + val slugName = if (slug.isNullOrEmpty()) { + it.getJSONObject("mangaPost").getString("slug") + } else { + slug + } + val chapterUrl = "/series/$slugName/${it.getString("slug")}" MangaChapter( id = it.getLong("id"), name = "Chapter : ${it.getInt("number")}", diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/en/MangaGalaxyParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/en/MangaGalaxyParser.kt index d76c7bb6..dad22aa7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/en/MangaGalaxyParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/en/MangaGalaxyParser.kt @@ -1,10 +1,14 @@ package org.koitharu.kotatsu.parsers.site.iken.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.iken.IkenParser +@Broken // Redirect to @VORTEXSCANS @MangaSourceParser("MANGAGALAXY", "MangaGalaxy", "en") internal class MangaGalaxyParser(context: MangaLoaderContext) : - IkenParser(context, MangaParserSource.MANGAGALAXY, "mangagalaxy.net") + IkenParser(context, MangaParserSource.MANGAGALAXY, "vortexscans.org") { + override val selectPages = "main section img" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/en/VortexScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/en/VortexScans.kt index a3d59956..4ef992e9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/en/VortexScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/iken/en/VortexScans.kt @@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.iken.IkenParser @MangaSourceParser("VORTEXSCANS", "VortexScans", "en") internal class VortexScans(context: MangaLoaderContext) : - IkenParser(context, MangaParserSource.VORTEXSCANS, "vortextoon.com") { + IkenParser(context, MangaParserSource.VORTEXSCANS, "vortexscans.org") { override val selectPages = "main section img" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/KeyoappParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/KeyoappParser.kt index 77cb40b3..ccb7190b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/KeyoappParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/KeyoappParser.kt @@ -228,23 +228,14 @@ internal abstract class KeyoappParser( override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() - val cdnUrl = doc.selectFirstOrThrow("script:containsData(primaryUrl)").data().substringAfter("https://cdn.") - .substringBefore("\${uid}") - if (cdnUrl.isNotEmpty()) { - return doc.select(selectPage).map { img -> - val uid = img.attr("uid") ?: img.parseFailed("Image src not found") - val url = "https://cdn.$cdnUrl$uid" - MangaPage( - id = generateUid(url), - url = url, - preview = null, - source = source, - ) - } - } else { - return doc.select(selectPage).map { img -> - val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") + val cdnUrl = getCdnUrl(doc) + doc.select(selectPage) + .map { it.attr("uid") } + .filter { it.isNotEmpty() } + .also { cdnUrl ?: throw Exception("Image url not found") } + .map { img -> + val url = "$cdnUrl/$img" MangaPage( id = generateUid(url), url = url, @@ -252,10 +243,34 @@ internal abstract class KeyoappParser( source = source, ) } + .takeIf { it.isNotEmpty() } + ?.also { return it } + + return doc.select(selectPage).map { img -> + val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) } } + protected open val cdnRegex = """realUrl\s*=\s*`[^`]+//(?[^/]+)""".toRegex() + + protected open fun getCdnUrl(document: Document): String? { + return document.select("script") + .firstOrNull { cdnRegex.containsMatchIn(it.html()) } + ?.let { + val cdnHost = cdnRegex.find(it.html()) + ?.groups?.get("host")?.value + ?.replace(cdnRegex, "") + "https://$cdnHost/uploads" + } + } + protected fun parseChapterDate(dateFormat: DateFormat, date: String?): Long { val d = date?.lowercase() ?: return 0 return when { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ArvenScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/ArvenScans.kt similarity index 50% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ArvenScans.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/ArvenScans.kt index cf511e41..8c685793 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ArvenScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/ArvenScans.kt @@ -1,12 +1,10 @@ -package org.koitharu.kotatsu.parsers.site.mangareader.en +package org.koitharu.kotatsu.parsers.site.keyoapp.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser @MangaSourceParser("ARVENSCANS", "ArvenComics", "en") internal class ArvenScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.ARVENSCANS, "arvencomics.com", pageSize = 20, searchPageSize = 10) { - override val listUrl = "/series" -} + KeyoappParser(context, MangaParserSource.ARVENSCANS, "arvencomics.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LaidBackScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LaidBackScans.kt index d924bb23..5e1bea33 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LaidBackScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/LaidBackScans.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.keyoapp.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser +@Broken @MangaSourceParser("LAIDBACKSCANS", "LaidBackScans", "en") internal class LaidBackScans(context: MangaLoaderContext) : KeyoappParser(context, MangaParserSource.LAIDBACKSCANS, "laidbackscans.org") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RaiScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/RaiScans.kt similarity index 50% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RaiScans.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/RaiScans.kt index 8359ce55..2eeb1d88 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RaiScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/RaiScans.kt @@ -1,12 +1,10 @@ -package org.koitharu.kotatsu.parsers.site.mangareader.en +package org.koitharu.kotatsu.parsers.site.keyoapp.en import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser @MangaSourceParser("RAISCANS", "KenScans", "en") internal class RaiScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.RAISCANS, "kenscans.com", pageSize = 20, searchPageSize = 10) { - override val listUrl = "/series" -} + KeyoappParser(context, MangaParserSource.RAISCANS, "kenscans.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/SuryaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/SuryaScans.kt new file mode 100644 index 00000000..7899e4e7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/en/SuryaScans.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.keyoapp.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser + +@MangaSourceParser("SURYASCANS", "GenzToon", "en") +internal class SuryaScans(context: MangaLoaderContext) : + KeyoappParser(context, MangaParserSource.SURYASCANS, "genzupdates.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/Astrames.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/Astrames.kt index 32e97180..b6b94002 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/Astrames.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/Astrames.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.keyoapp.fr +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser +@Broken @MangaSourceParser("ASTRAMES", "Astrames", "fr") internal class Astrames(context: MangaLoaderContext) : KeyoappParser(context, MangaParserSource.ASTRAMES, "astrames.fr") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ReaperScansFr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/ReaperScansFr.kt similarity index 55% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ReaperScansFr.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/ReaperScansFr.kt index 77c6b0da..3bb4bd9b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ReaperScansFr.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/keyoapp/fr/ReaperScansFr.kt @@ -1,12 +1,10 @@ -package org.koitharu.kotatsu.parsers.site.madara.fr +package org.koitharu.kotatsu.parsers.site.keyoapp.fr import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.site.keyoapp.KeyoappParser @MangaSourceParser("REAPERSCANS_FR", "ReaperScans.fr", "fr") internal class ReaperScansFr(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.REAPERSCANS_FR, "reaperscans.fr") { - override val datePattern = "MM/dd/yyyy" -} + KeyoappParser(context, MangaParserSource.REAPERSCANS_FR, "reaper-scans.fr") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/EroManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/EroManhwa.kt index 8d37c58c..4e1586a2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/EroManhwa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/all/EroManhwa.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.madara.all +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType @@ -7,6 +8,7 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import java.util.* +@Broken @MangaSourceParser("EROMANHWA", "EroManhwa", "", ContentType.HENTAI) internal class EroManhwa(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.EROMANHWA, "eromanhwa.org") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaPeak.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaPeak.kt index 3511435b..72ed0fc9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaPeak.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaPeak.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.ar +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("MANGAPEAK", "MangaPeak", "ar") internal class MangaPeak(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGAPEAK, "mangapeak.org") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaTime.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaTime.kt index 82849864..58121331 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaTime.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaTime.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.ar +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("MANGATIME", "MangaTime", "ar") internal class MangaTime(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGATIME, "mangatime.us") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/EliteManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/EliteManga.kt index 1b8c5af9..b319a48c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/EliteManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/EliteManga.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("ELITEMANGA", "EliteManga", "en") internal class EliteManga(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.ELITEMANGA, "www.beinmanga.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FirstKissManhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FirstKissManhua.kt new file mode 100644 index 00000000..e538ec22 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FirstKissManhua.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("FIRSTKISSMANHUA", "FirstKissManhua", "en") +internal class FirstKissManhua(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.FIRSTKISSMANHUA, "1stkissmanhua.net", 20) { + override val listUrl = "manhua/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HiperDex.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HiperDex.kt index 8f310435..5edbb49c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HiperDex.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HiperDex.kt @@ -1,13 +1,11 @@ package org.koitharu.kotatsu.parsers.site.madara.en -import org.koitharu.kotatsu.parsers.Broken 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 -@Broken -@MangaSourceParser("HIPERDEX", "HiperDex", "en", ContentType.HENTAI) +@MangaSourceParser("HIPERDEX", "HiperToon", "en", ContentType.HENTAI) internal class HiperDex(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.HIPERDEX, "hiperdex.com", 36) + MadaraParser(context, MangaParserSource.HIPERDEX, "hipertoon.com", 36) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HunLight.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HunLight.kt index 94bbb695..24442fcf 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HunLight.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HunLight.kt @@ -1,48 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en -import org.jsoup.nodes.Document +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull -import org.koitharu.kotatsu.parsers.util.domain -import org.koitharu.kotatsu.parsers.util.generateUid -import org.koitharu.kotatsu.parsers.util.mapChapters -import org.koitharu.kotatsu.parsers.util.parseFailed -import org.koitharu.kotatsu.parsers.util.parseHtml -import org.koitharu.kotatsu.parsers.util.removeSuffix -import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl -import java.text.SimpleDateFormat +@Broken @MangaSourceParser("HUNLIGHT", "HunLight", "en") internal class HunLight(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.HUNLIGHT, "hunlight.com") { - override suspend fun loadChapters(mangaUrl: String, document: Document): List { - val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" - val doc = webClient.httpPost(url, emptyMap()).parseHtml() - val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - return doc.select(selectChapter).mapChapters { i, li -> - val a = li.selectFirst("a") - val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - val link = href + stylePage - val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectDate)?.text() - val name = a.selectFirst("p")?.text() ?: a.ownText() - MangaChapter( - id = generateUid(href), - url = link, - name = name, - number = i + 1f, - volume = 0, - branch = null, - uploadDate = parseChapterDate( - dateFormat, - dateText, - ), - scanlator = null, - source = source, - ) - } - } -} + MadaraParser(context, MangaParserSource.HUNLIGHT, "hunlight.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HuntersScanEn.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HuntersScanEn.kt index f44c8047..553bebed 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HuntersScanEn.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HuntersScanEn.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("HUNTERSSCANEN", "EnHuntersScan", "en") internal class HuntersScanEn(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.HUNTERSSCANEN, "en.huntersscan.xyz") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/InfamousScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/InfamousScans.kt index 77581628..a0f35f54 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/InfamousScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/InfamousScans.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("INFAMOUSSCANS", "InfamousScans", "en") internal class InfamousScans(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.INFAMOUSSCANS, "infamous-scans.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LeviatanScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LeviatanScans.kt index f6ab03ff..1f62f075 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LeviatanScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/LeviatanScans.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("LEVIATANSCANS", "LsComic", "en") internal class LeviatanScans(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.LEVIATANSCANS, "lscomic.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHall.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHall.kt index 0da11801..96f28390 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHall.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaHall.kt @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken 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 +@Broken @MangaSourceParser("MANGAHALL", "MangaHolic", "en", ContentType.HENTAI) internal class MangaHall(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGAHALL, "mangaholic.org", 24) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxTo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxTo.kt index 6fe79976..7e1e6a6a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxTo.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaTxTo.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("MANGATX_TO", "MangaTx.to", "en") internal class MangaTxTo(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MANGATX_TO, "mangatx.to", 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt index d9e06c0a..bc69bcb5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManyToon.kt @@ -15,7 +15,7 @@ import java.text.SimpleDateFormat @MangaSourceParser("MANYTOON", "ManyToon", "en", ContentType.HENTAI) internal class ManyToon(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.MANYTOON, "manytoon.com", 20) { + MadaraParser(context, MangaParserSource.MANYTOON, "manytoon.org", 20) { override val listUrl = "comic/" override val postReq = true override val withoutAjax = true diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MsyPublisher.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MsyPublisher.kt index bedd4cad..12ebcc4a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MsyPublisher.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MsyPublisher.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("MSYPUBLISHER", "MsyPublisher", "en") internal class MsyPublisher(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.MSYPUBLISHER, "msypublisher.com", 20) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt index 1b736cd0..1d32157e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NightComic.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("NIGHTCOMIC", "Night Comic", "en") internal class NightComic(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.NIGHTCOMIC, "www.nightcomic.com") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PonyManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PonyManga.kt index de5b689c..38c08fa1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PonyManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/PonyManga.kt @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken 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 +@Broken @MangaSourceParser("PONYMANGA", "PonyManga", "en", ContentType.HENTAI) internal class PonyManga(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.PONYMANGA, "ponymanga.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ResetScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ResetScans.kt deleted file mode 100644 index 023b3cd5..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ResetScans.kt +++ /dev/null @@ -1,54 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.en - -import org.jsoup.nodes.Document -import org.jsoup.select.Elements -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.MangaChapter -import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import org.koitharu.kotatsu.parsers.util.* -import java.text.SimpleDateFormat -import java.util.Collections.emptyMap - -@MangaSourceParser("RESETSCANS", "ResetScans", "en") -internal class ResetScans(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.RESETSCANS, "rspro.xyz", 18) { - override val datePattern = "MMM dd" - - override suspend fun loadChapters(mangaUrl: String, document: Document): List { - val doc = if (postReq) { - val mangaId = document.select("div#manga-chapters-holder").attr("data-id") - val url = "https://$domain/wp-admin/admin-ajax.php" - val postData = "action=manga_get_chapters&manga=$mangaId" - webClient.httpPost(url, postData).parseHtml() - } else { - val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" - webClient.httpPost(url, emptyMap()).parseHtml() - } - val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - return doc.select(selectChapter).mapChapters(reversed = true) { _, li -> - val a = li.getElementsByTag("a").findWithText() - val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") - val link = href + stylePage - val dateText = li.selectFirst("a.c-new-tag")?.attr("title") ?: li.selectFirst(selectDate)?.text() - val name = a.text() - MangaChapter( - id = generateUid(href), - url = link, - name = name, - number = 0f, - volume = 0, - branch = null, - uploadDate = parseChapterDate( - dateFormat, - dateText, - ), - scanlator = null, - source = source, - ) - } - } - - private fun Elements.findWithText() = firstOrNull { it.hasText() } ?: first() -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonChill.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonChill.kt index 3e0645fb..0d445831 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonChill.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ToonChill.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("TOONCHILL", "ToonChill", "en") internal class ToonChill(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.TOONCHILL, "toonchill.com", 32) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/RackusReads.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/VyvyManga.kt similarity index 54% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/RackusReads.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/VyvyManga.kt index fc72435b..0824008b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/RackusReads.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/VyvyManga.kt @@ -5,8 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -@MangaSourceParser("RACKUSREADS", "RackusReads", "en") -internal class RackusReads(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.RACKUSREADS, "rackusreads.com", 20) { - override val datePattern = "MM/dd/yyyy" -} +@MangaSourceParser("VYVYMANGA", "VyvyManga", "en") +internal class VyvyManga(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.VYVYMANGA, "vyvymanga.org") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt index 7a5c4978..32e4c321 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinChanManga.kt @@ -6,6 +6,6 @@ import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -@MangaSourceParser("ZINCHANMANGA", "ZinChanManga.com", "en", ContentType.HENTAI) +@MangaSourceParser("ZINCHANMANGA", "ZinChanManga.Com", "en", ContentType.HENTAI) internal class ZinChanManga(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.ZINCHANMANGA, "zinchanmanga.com", 10) + MadaraParser(context, MangaParserSource.ZINCHANMANGA, "zinchangmanga.com", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinchanMangaNet.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinchanMangaNet.kt index 207f16fa..a3d37604 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinchanMangaNet.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ZinchanMangaNet.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("ZINCHANMANGA_NET", "ZinchanManga.net", "en") internal class ZinchanMangaNet(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.ZINCHANMANGA_NET, "zinchanmanga.net", 10) + MadaraParser(context, MangaParserSource.ZINCHANMANGA_NET, "zinchangmanga.net", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Darknebulus.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Darknebulus.kt new file mode 100644 index 00000000..80789428 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Darknebulus.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("DARKNEBULUS", "Darknebulus", "es") +internal class Darknebulus(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.DARKNEBULUS, "www.darknebulus.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt index 7371c6e7..d9f06f13 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("EMPERORSCAN", "EmperorScan", "es") internal class EmperorScan(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.EMPERORSCAN, "seriesemperor.com") + MadaraParser(context, MangaParserSource.EMPERORSCAN, "zonaemperor.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HouseOfOtakus.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HouseOfOtakus.kt new file mode 100644 index 00000000..767332fd --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HouseOfOtakus.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("HOUSEOFOTAKUS", "HouseOfOtakus", "es") +internal class HouseOfOtakus(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.HOUSEOFOTAKUS, "houseofotakus.xyz") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Jobsibe.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Jobsibe.kt index b7cdb2c8..65d80c37 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Jobsibe.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Jobsibe.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.es +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("JOBSIBE", "Jobsibe", "es") internal class Jobsibe(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.JOBSIBE, "jobsibe.com") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Lectorunm.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Lectorunm.kt index 1954bb45..d9d404ab 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Lectorunm.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Lectorunm.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.es +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("LECTORUNM", "Lectorunm.life", "es") internal class Lectorunm(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.LECTORUNM, "lectorunm.life") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/LegendScanlations.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/LegendScanlations.kt new file mode 100644 index 00000000..69a99c39 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/LegendScanlations.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("LEGENDSCANLATIONS", "LegendScanlations", "es") +internal class LegendScanlations(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.LEGENDSCANLATIONS, "legendscanlations.com", 10) { + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaCrab.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaCrab.kt index 5104b89f..9e6387b6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaCrab.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaCrab.kt @@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGA_CRAB", "MangaCrab", "es") internal class MangaCrab(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.MANGA_CRAB, "wikicrab.xyz") { + MadaraParser(context, MangaParserSource.MANGA_CRAB, "toonscrab.com") { override val datePattern = "dd/MM/yyyy" override val tagPrefix = "manga-genero/" override val listUrl = "series/" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaMundoDrama.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaMundoDrama.kt index 7f38beb3..2bf7dbf1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaMundoDrama.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaMundoDrama.kt @@ -5,9 +5,8 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -@MangaSourceParser("MANGAMUNDODRAMA", "MangaMundoDrama", "es") +@MangaSourceParser("MANGAMUNDODRAMA", "InmortalScan", "es") internal class MangaMundoDrama(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.MANGAMUNDODRAMA, "manga.mundodrama.site") { - + MadaraParser(context, MangaParserSource.MANGAMUNDODRAMA, "scaninmortal.com") { override val listUrl = "mg/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt index aa7b6590..7627f844 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ManhwaLatino.kt @@ -1,6 +1,10 @@ package org.koitharu.kotatsu.parsers.site.madara.es +import kotlinx.coroutines.async +import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.coroutineScope import org.jsoup.nodes.Document +import org.jsoup.nodes.Element import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType @@ -10,6 +14,7 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.* import java.text.SimpleDateFormat +import java.util.ArrayList @MangaSourceParser("MANHWALATINO", "ManhwaLatino", "es", ContentType.HENTAI) internal class ManhwaLatino(context: MangaLoaderContext) : @@ -17,9 +22,35 @@ internal class ManhwaLatino(context: MangaLoaderContext) : override val datePattern = "MM/dd" override val selectPage = "div.page-break img.wp-manga-chapter-img" override suspend fun getChapters(manga: Manga, doc: Document): List { - val root2 = doc.body().selectFirstOrThrow("div.content-area") + val maxPageChapter = doc.selectLast("div.pagination .page")?.text()?.toInt() ?: 1 + val url = manga.url.toAbsoluteUrl(domain) + return run { + if (maxPageChapter == 1) { + parseChapters(doc) + } else { + coroutineScope { + val result = ArrayList(parseChapters(doc)) + result.ensureCapacity(result.size * maxPageChapter) + (2..maxPageChapter).map { i -> + async { + loadChapters(url, i) + } + }.awaitAll() + .flattenTo(result) + result + } + } + } + } + + private suspend fun loadChapters(url: String, page: Int): List { + return parseChapters(webClient.httpGet("$url/?t=$page").parseHtml().body()) + } + + private fun parseChapters(doc: Element): List { + val root2 = doc.selectFirstOrThrow("div.content-area") val dateFormat = SimpleDateFormat(datePattern, sourceLocale) - return root2.select(selectChapter).mapChapters(reversed = true) { i, li -> + return root2.select(selectChapter).mapChapters { i, li -> val a = li.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") val link = href + stylePage diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MantrazScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MantrazScan.kt index 0c45aeaa..adca1326 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MantrazScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MantrazScan.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser // redirect to @PANCONCOLA @MangaSourceParser("MANTRAZSCAN", "MantrazScan", "es") internal class MantrazScan(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.MANTRAZSCAN, "panconcola.com") { + MadaraParser(context, MangaParserSource.MANTRAZSCAN, "artessupremas.com") { override val datePattern = "dd/MM/yyyy" override val tagPrefix = "generos-de-manga/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MhScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MhScans.kt index 62fecba6..e8337004 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MhScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MhScans.kt @@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MHSCANS", "MhScans", "es") internal class MhScans(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.MHSCANS, "mh.cookni.net") { + MadaraParser(context, MangaParserSource.MHSCANS, "twobluescans.com") { override val datePattern = "d 'de' MMMMM 'de' yyyy" override val listUrl = "series/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Mi2MangaEs.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Mi2MangaEs.kt index d47789f1..e85b7409 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Mi2MangaEs.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Mi2MangaEs.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MI2MANGAES", "Mi2MangaEs", "es") internal class Mi2MangaEs(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.MI2MANGAES, "es.mi2manga.com", 10) + MadaraParser(context, MangaParserSource.MI2MANGAES, "mi2manga.lat", 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Panconcola.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Panconcola.kt index 4ce4b204..74801cc8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Panconcola.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Panconcola.kt @@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("PANCONCOLA", "Panconcola", "es") internal class Panconcola(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.PANCONCOLA, "panconcola.com") { + MadaraParser(context, MangaParserSource.PANCONCOLA, "artessupremas.com") { override val datePattern = "dd/MM/yyyy" override val tagPrefix = "generos-de-manga/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/SamuraiScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/SamuraiScan.kt index 326e67ef..ad68f7ee 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/SamuraiScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/SamuraiScan.kt @@ -8,5 +8,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("SAMURAISCAN", "SamuraiScan", "es") internal class SamuraiScan(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.SAMURAISCAN, "latan.visorsmr.com", 10) { - override val listUrl = "leer/" + override val listUrl = "read/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Scambertraslator.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Scambertraslator.kt index 57495982..5361ad41 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Scambertraslator.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Scambertraslator.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.es +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("SCAMBERTRASLATOR", "ScamberTraslator", "es") internal class Scambertraslator(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.SCAMBERTRASLATOR, "scambertraslator.com") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TopComicPorno.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TopComicPorno.kt index 7512d7a7..25df2fbb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TopComicPorno.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TopComicPorno.kt @@ -8,6 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("TOPCOMICPORNO", "TopComicPorno", "es", ContentType.HENTAI) internal class TopComicPorno(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.TOPCOMICPORNO, "topcomicporno.com", 18) { + MadaraParser(context, MangaParserSource.TOPCOMICPORNO, "topcomicporno.net", 18) { override val datePattern = "MMM dd, yy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TraduccionesAmistosas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TraduccionesAmistosas.kt new file mode 100644 index 00000000..9e65294a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/TraduccionesAmistosas.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("TRADUCCIONESAMISTOSAS", "TraduccionesAmistosas", "es") +internal class TraduccionesAmistosas(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.TRADUCCIONESAMISTOSAS, "traduccionesamistosas.eyudud.net", 10) { + override val datePattern = "d 'de' MMMMM 'de' yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/YaoiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/YaoiManga.kt new file mode 100644 index 00000000..c3ad6238 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/YaoiManga.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("YAOIMANGA", "YaoiManga", "es") +internal class YaoiManga(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.YAOIMANGA, "yaoimanga.es", 42) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/EpsilonSoft.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/EpsilonSoft.kt index cc7a365e..64b3b4c9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/EpsilonSoft.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/EpsilonSoft.kt @@ -9,4 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class EpsilonSoft(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.EPSILONSOFT, "epsilonsoft.to") { override val datePattern = "dd/MM/yy" + override val withoutAjax = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/EpsilonscanParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/EpsilonscanParser.kt index 1c666dd5..c524488b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/EpsilonscanParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/EpsilonscanParser.kt @@ -10,4 +10,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class EpsilonscanParser(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.EPSILONSCAN, "epsilonscan.to") { override val datePattern = "dd/MM/yy" + override val withoutAjax = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/InovaScanManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/InovaScanManga.kt new file mode 100644 index 00000000..976adf3d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/InovaScanManga.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.fr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("INOVASCANMANGA", "InovaScanManga", "fr") +internal class InovaScanManga(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.INOVASCANMANGA, "inovascanmanga.com") { + override val datePattern = "d MMMM yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/LumosKomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/LumosKomik.kt index 0e5b16b3..8dcdc678 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/LumosKomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/LumosKomik.kt @@ -8,7 +8,7 @@ import java.util.* @MangaSourceParser("LUMOSKOMIK", "LumosKomik", "id") internal class LumosKomik(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.LUMOSKOMIK, "lumoskomik.com") { + MadaraParser(context, MangaParserSource.LUMOSKOMIK, "lumos01.com") { override val tagPrefix = "genre/" override val listUrl = "komik/" override val datePattern = "dd MMMM yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt index 4314b8ff..769ac990 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt @@ -8,7 +8,7 @@ import java.util.* @MangaSourceParser("SHINIGAMI", "Shinigami", "id") internal class Shinigami(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.SHINIGAMI, "shinigami05.com", 10) { + MadaraParser(context, MangaParserSource.SHINIGAMI, "shinigami06.com", 10) { override val tagPrefix = "genre/" override val listUrl = "series/" override val sourceLocale: Locale = Locale.ENGLISH diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/YuraManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/YuraManga.kt deleted file mode 100644 index cee2681d..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/YuraManga.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.madara.id - -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import java.util.Locale - -@MangaSourceParser("YURAMANGA", "YuraManga", "id") -internal class YuraManga(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.YURAMANGA, "yuramanga.my.id") { - override val sourceLocale: Locale = Locale.ENGLISH -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArcticScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArcticScan.kt new file mode 100644 index 00000000..ce71a1ac --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArcticScan.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ARCTICSCAN", "ArcticScan", "pt") +internal class ArcticScan(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.ARCTICSCAN, "alonescanlator.com.br") { + override val datePattern: String = "yyyy-MM-dd" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BrMangasTop.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BrMangasTop.kt new file mode 100644 index 00000000..c54ccf5f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/BrMangasTop.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("BRMANGASTOP", "BrMangasTop", "pt") +internal class BrMangasTop(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.BRMANGASTOP, "brmangas.top", 10) { + override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/DreamScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/DreamScan.kt index 6d85679d..e5f8553c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/DreamScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/DreamScan.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("DREAMSCAN", "DreamScan", "pt") internal class DreamScan(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.DREAMSCAN, "dreamscan.com.br") + MadaraParser(context, MangaParserSource.DREAMSCAN, "fairydream.com.br") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/HikariScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HikariScan.kt similarity index 53% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/HikariScan.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HikariScan.kt index ce840f0b..ea22409b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/HikariScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HikariScan.kt @@ -1,10 +1,10 @@ -package org.koitharu.kotatsu.parsers.site.mangareader.pt +package org.koitharu.kotatsu.parsers.site.madara.pt import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HIKARISCAN", "HikariScan", "pt") internal class HikariScan(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.HIKARISCAN, "hikariscan.org", pageSize = 20, searchPageSize = 10) + MadaraParser(context, MangaParserSource.HIKARISCAN, "hikariscan.org") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/NirvanaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/NirvanaScan.kt new file mode 100644 index 00000000..f30cb7ff --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/NirvanaScan.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("NIRVANASCAN", "NirvanaScan", "pt") +internal class NirvanaScan(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.NIRVANASCAN, "nirvanascan.com") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PlumaComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PlumaComics.kt new file mode 100644 index 00000000..84cd8768 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PlumaComics.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("PLUMACOMICS", "PlumaComics", "pt") +internal class PlumaComics(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.PLUMACOMICS, "plumacomics.cloud") { + override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/RainbowFairyScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/RainbowFairyScan.kt index d49ce43d..11d4142d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/RainbowFairyScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/RainbowFairyScan.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.pt +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("RAINBOWFAIRYSCAN", "RainbowFairyScan", "pt") internal class RainbowFairyScan(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.RAINBOWFAIRYSCAN, "rainbowfairyscan.com", 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Atikrost.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Atikrost.kt index 30c9618a..9538b9b9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Atikrost.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Atikrost.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.tr +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("ATIKROST", "Atikrost", "tr") internal class Atikrost(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.ATIKROST, "www.mangaoku.org", 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DeccalScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DeccalScans.kt index 9d7a418f..af30e5c6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DeccalScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DeccalScans.kt @@ -1,13 +1,15 @@ package org.koitharu.kotatsu.parsers.site.madara.tr +import org.koitharu.kotatsu.parsers.Broken 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 +@Broken @MangaSourceParser("DECCALSCANS", "DeccalScans", "tr", ContentType.HENTAI) internal class DeccalScans(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.DECCALSCANS, "deccalscans.net") { + MadaraParser(context, MangaParserSource.DECCALSCANS, "fuchscans.com") { override val tagPrefix = "turler/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GloryManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GloryManga.kt index 436e4367..48ddb592 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GloryManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GloryManga.kt @@ -1,13 +1,14 @@ package org.koitharu.kotatsu.parsers.site.madara.tr +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -//This source requires an account. +@Broken // Redirect to @MANGAGEZGINI @MangaSourceParser("GLORYMANGA", "GloryManga", "tr") internal class GloryManga(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.GLORYMANGA, "glorymanga.com", 18) { + MadaraParser(context, MangaParserSource.GLORYMANGA, "mangagezgini.dev", 18) { override val datePattern = "dd/MM/yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Grimelek.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Grimelek.kt index 1972cdd4..0eff6080 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Grimelek.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Grimelek.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser //This source requires an account. @MangaSourceParser("GRIMELEK", "Grimelek", "tr") internal class Grimelek(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.GRIMELEK, "grimelek.pro", 20) { + MadaraParser(context, MangaParserSource.GRIMELEK, "grimelek.dev", 20) { override val datePattern = "d MMMM yyyy" override val listUrl = "seri/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jiangzaitoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jiangzaitoon.kt index b384e4c2..8170e5fc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jiangzaitoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Jiangzaitoon.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("JIANGZAITOON", "JiangzaiToon", "tr", ContentType.HENTAI) internal class Jiangzaitoon(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.JIANGZAITOON, "jiangzaitoon.pro") { + MadaraParser(context, MangaParserSource.JIANGZAITOON, "jiangzaitoon.gay") { override val datePattern = "d MMMM yyyy" override val postReq = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/LichSubs.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/LichSubs.kt new file mode 100644 index 00000000..f15c7d7c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/LichSubs.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("LICHSUBS", "LichSubs", "tr") +internal class LichSubs(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.LICHSUBS, "www.kuroimanga.com") { + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MajorScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MajorScans.kt index 0c924346..62d5753c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MajorScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MajorScans.kt @@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MAJORSCANS", "MajorScans", "tr") internal class MajorScans(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.MAJORSCANS, "www.mangatilkisi.com", pageSize = 18) { + MadaraParser(context, MangaParserSource.MAJORSCANS, "www.manga-tilkisi.com", pageSize = 18) { override val datePattern = "dd/MM/yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaGezgini.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaGezgini.kt new file mode 100644 index 00000000..156c6538 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaGezgini.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGAGEZGINI", "MangaGezgini", "tr") +internal class MangaGezgini(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.MANGAGEZGINI, "mangagezgini.dev", pageSize = 20) { + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaRuhu.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaRuhu.kt new file mode 100644 index 00000000..97e5c2c0 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaRuhu.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("MANGARUHU", "MangaRuhu", "tr") +internal class MangaRuhu(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.MANGARUHU, "mangaruhu.com", 16) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaTr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaTr.kt index efdeaf16..4fac1146 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaTr.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MangaTr.kt @@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGATR", "MangaTr", "tr") internal class MangaTr(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.MANGATR, "mangatr.net") { + MadaraParser(context, MangaParserSource.MANGATR, "mangatr.me") { override val tagPrefix = "tur/" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MugiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MugiManga.kt new file mode 100644 index 00000000..90d358dc --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/MugiManga.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + + +@MangaSourceParser("MUGIMANGA", "MugiManga", "tr") +internal class MugiManga(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.MUGIMANGA, "mugimanga.com", 20) { + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiFlix.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiFlix.kt new file mode 100644 index 00000000..a50cecfa --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiFlix.kt @@ -0,0 +1,11 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +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 + +@MangaSourceParser("YAOIFLIX", "YaoiFlix", "tr", ContentType.HENTAI) +internal class YaoiFlix(context: MangaLoaderContext) : + MadaraParser(context, MangaParserSource.YAOIFLIX, "yaoiflix.gay", 16) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiTr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiTr.kt index 45cd820b..5e0b7b67 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiTr.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/YaoiTr.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.tr +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("YAOITR", "YaoiTr", "tr") internal class YaoiTr(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.YAOITR, "yaoitr.fun", 16) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ZamanManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ZamanManga.kt index 78bd3f23..472a6194 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ZamanManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ZamanManga.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.madara.tr +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +@Broken @MangaSourceParser("ZAMANMANGA", "ZamanManga", "tr") internal class ZamanManga(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.ZAMANMANGA, "zamanmanga.com") { 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 34199efc..0a0fd3d0 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", "HentaiVnPlus", "vi", ContentType.HENTAI) internal class HentaiVnPlus(context: MangaLoaderContext) : - MadaraParser(context, MangaParserSource.HENTAIVNPLUS, "hentaivn.nl", 24) { + MadaraParser(context, MangaParserSource.HENTAIVNPLUS, "hentaivn.mom", 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/madara/vi/Quaanhdaocuteo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Quaanhdaocuteo.kt index 6787e9ab..b0a155e0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Quaanhdaocuteo.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Quaanhdaocuteo.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.madara.vi +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType @@ -9,6 +10,7 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.* +@Broken @MangaSourceParser("QUAANHDAOCUTEO", "Quaanhdaocuteo", "vi", ContentType.HENTAI) internal class Quaanhdaocuteo(context: MangaLoaderContext) : MadaraParser(context, MangaParserSource.QUAANHDAOCUTEO, "qadc.top") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ArAreaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ArAreaScans.kt index 77cd2e32..d00c7366 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ArAreaScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ArAreaScans.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("ARAREASCANS", "ArAreaScans", "ar") internal class ArAreaScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.ARAREASCANS, "ar.areascans.org", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.ARAREASCANS, "ar.kenmanga.com", pageSize = 20, searchPageSize = 10) { override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/AreaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/AreaScans.kt index 7d07f277..ed2acd31 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/AreaScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/AreaScans.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("AREASCANS", "AreaScans", "ar") internal class AreaScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.AREASCANS, "www.areascans.net", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.AREASCANS, "ar.kenmanga.com", pageSize = 20, searchPageSize = 10) { override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaNoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaNoon.kt new file mode 100644 index 00000000..d2f52c59 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/MangaNoon.kt @@ -0,0 +1,17 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.ar + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("MANGANOON", "MangaNoon", "ar") +internal class MangaNoon(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.MANGANOON, "vrnoin.site", pageSize = 24, searchPageSize = 10) { + + override val filterCapabilities: MangaListFilterCapabilities + get() = super.filterCapabilities.copy( + isTagsExclusionSupported = false, + ) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Manjanoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Manjanoon.kt index 1fbd9b63..f31ad566 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Manjanoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Manjanoon.kt @@ -10,7 +10,7 @@ import org.koitharu.kotatsu.parsers.util.* @MangaSourceParser("MANJANOON", "Manjanoon", "ar") internal class Manjanoon(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MANJANOON, "manjanoon.com", pageSize = 21, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.MANJANOON, "vrnoin.site", pageSize = 21, searchPageSize = 10) { override suspend fun getDetails(manga: Manga): Manga { val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Normoyun.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Normoyun.kt index 835b9bd2..8cd94dce 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Normoyun.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Normoyun.kt @@ -10,7 +10,7 @@ import java.text.SimpleDateFormat @MangaSourceParser("NORMOYUN", "MaxLevelTeam", "ar") internal class Normoyun(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.NORMOYUN, "healteer.com", pageSize = 42, searchPageSize = 39) { + MangaReaderParser(context, MangaParserSource.NORMOYUN, "swatscans.com", pageSize = 42, searchPageSize = 39) { override val datePattern = "MMMM dd, yyyy" override val selectMangaList = ".listupd .bs .bsx" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ThunderScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ThunderScans.kt index 7ebca1cc..5033406c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ThunderScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/ThunderScans.kt @@ -11,7 +11,7 @@ internal class ThunderScans(context: MangaLoaderContext) : MangaReaderParser( context, MangaParserSource.THUNDERSCANS, - "ar-thunderepic.com", + "lavascans.com", pageSize = 32, searchPageSize = 10, ) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/UmiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/UmiManga.kt index 2873f0ed..f5e780eb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/UmiManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/UmiManga.kt @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.mangareader.ar +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +@Broken @MangaSourceParser("UMIMANGA", "UmiManga", "ar") internal class UmiManga(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.UMIMANGA, "www.umimanga.com", pageSize = 20, searchPageSize = 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/VexManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/VexManga.kt index d3ac80c5..7af53bf7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/VexManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/VexManga.kt @@ -10,7 +10,7 @@ import java.text.DateFormat import java.text.SimpleDateFormat import java.util.* -@Broken // Not dead but changed template +@Broken // Redirect to @VORTEXSCANS @MangaSourceParser("VEXMANGA", "VexManga", "ar") internal class VexManga(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.VEXMANGA, "vortexscans.org", pageSize = 10, searchPageSize = 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AgsComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AgsComics.kt index ba0d9be6..0fa78497 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AgsComics.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/AgsComics.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("AGSCOMICS", "AgsComics", "en") internal class AgsComics(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.AGSCOMICS, "agscomics.com", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.AGSCOMICS, "agrcomics.com", pageSize = 20, searchPageSize = 10) { override val listUrl = "/series" override val filterCapabilities: MangaListFilterCapabilities diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/CypherScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/CypherScans.kt index dadf6b07..b4af12ca 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/CypherScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/CypherScans.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("CYPHERSCANS", "CypherScans", "en") internal class CypherScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.CYPHERSCANS, "cypherscans.xyz", pageSize = 20, searchPageSize = 10) + MangaReaderParser(context, MangaParserSource.CYPHERSCANS, "cyphscans.xyz", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt index 74f35bbd..f4bcf335 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ErosScans.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("EROSSCANS", "ErosScans", "en") internal class ErosScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.EROSSCANS, "eros-scans.xyz", pageSize = 20, searchPageSize = 10) + MangaReaderParser(context, MangaParserSource.EROSSCANS, "tercoscans.xyz", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt index b926e299..c121469a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/FlameComics.kt @@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("FLAMECOMICS", "FlameComics", "en") internal class FlameComics(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.FLAMECOMICS, "flamecomics.me", pageSize = 24, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.FLAMECOMICS, "flamecomics.xyz", pageSize = 24, searchPageSize = 10) { override val listUrl = "/series" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KaiScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KaiScans.kt index a11ec390..aae3625a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KaiScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KaiScans.kt @@ -9,7 +9,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser // Redirect to @LUACOMIC_COM @MangaSourceParser("KAISCANS", "KaiScans", "en") internal class KaiScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.KAISCANS, "ponvi.online", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.KAISCANS, "luascans.com", pageSize = 20, searchPageSize = 10) { override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( isTagsExclusionSupported = false, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KomikLabParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KomikLabParser.kt index ff0ffd89..fc742f68 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KomikLabParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/KomikLabParser.kt @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.mangareader.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +@Broken @MangaSourceParser("KOMIKLAB", "KomikLab", "en") internal class KomikLabParser(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.KOMIKLAB, "komiklab.com", pageSize = 20, searchPageSize = 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuaComicCom.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuaComicCom.kt index 29ffbdcf..ca322511 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuaComicCom.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuaComicCom.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("LUACOMIC_COM", "luaComic.com", "en") internal class LuaComicCom(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.LUACOMIC_COM, "ponvi.online", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.LUACOMIC_COM, "luascans.com", pageSize = 20, searchPageSize = 10) { override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( isTagsExclusionSupported = false, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuminousScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuminousScans.kt index 5aa9a634..a4bdd0f8 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuminousScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LuminousScans.kt @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.mangareader.en +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +@Broken @MangaSourceParser("LUMINOUSSCANS", "RadiantScans", "en") internal class LuminousScans(context: MangaLoaderContext) : MangaReaderParser( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SuryaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ManhwaFreake.kt similarity index 65% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SuryaScans.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ManhwaFreake.kt index 89348ad8..f6013641 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SuryaScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/ManhwaFreake.kt @@ -1,16 +1,16 @@ package org.koitharu.kotatsu.parsers.site.mangareader.en -import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -@Broken -@MangaSourceParser("SURYASCANS", "SuryaScans", "en") -internal class SuryaScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.SURYASCANS, "suryacomics.com", pageSize = 5, searchPageSize = 10) { +@MangaSourceParser("MANHWAFREAKE", "ManhwaFreake", "en") +internal class ManhwaFreake(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.MANHWAFREAKE, "manhwafreake.com", pageSize = 20, searchPageSize = 10) { + override val listUrl = "/series" + override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( isTagsExclusionSupported = false, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RackusReads.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RackusReads.kt new file mode 100644 index 00000000..7e178aea --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RackusReads.kt @@ -0,0 +1,17 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("RACKUSREADS", "RackusReads", "en") +internal class RackusReads(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.RACKUSREADS, "rackusreads.com", pageSize = 30, searchPageSize = 10) { + + override val filterCapabilities: MangaListFilterCapabilities + get() = super.filterCapabilities.copy( + isTagsExclusionSupported = false, + ) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SkyManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SkyManga.kt index 698eace8..23097e61 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SkyManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/SkyManga.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser internal class SkyManga(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.SKY_MANGA, "skymanga.work", pageSize = 20, searchPageSize = 20) { override val listUrl = "/manga-list" - override val datePattern = "DD-MM-yyy" + override val datePattern = "dd-MM-yyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/TecnoScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/TecnoScans.kt index f0d70ef8..f438b396 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/TecnoScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/TecnoScans.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("TECNOSCANS", "TecnoScans", "en") internal class TecnoScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.TECNOSCANS, "oliosscans.xyz", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.TECNOSCANS, "olyteconscans.xyz", pageSize = 20, searchPageSize = 10) { override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( isTagsExclusionSupported = false, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VarnaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VarnaScan.kt index 624ff672..40d7ceda 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VarnaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VarnaScan.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("VARNASCAN", "VarnaScan", "en") internal class VarnaScan(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.VARNASCAN, "varnascan.net", pageSize = 20, searchPageSize = 10) + MangaReaderParser(context, MangaParserSource.VARNASCAN, "varnascan.xyz", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VoidScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VoidScans.kt index f72907e1..bd9054f1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VoidScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/VoidScans.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("VOIDSCANS", "HiveToon", "en") internal class VoidScans(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.VOIDSCANS, "hivetoon.net", pageSize = 15, searchPageSize = 10) + MangaReaderParser(context, MangaParserSource.VOIDSCANS, "hivetoon.com", pageSize = 15, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/WitchScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/WitchScans.kt new file mode 100644 index 00000000..be8106dc --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/WitchScans.kt @@ -0,0 +1,17 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.en + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("WITCHSCANS", "WitchScans", "en") +internal class WitchScans(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.WITCHSCANS, "altayscans.com", pageSize = 20, searchPageSize = 10) { + + override val filterCapabilities: MangaListFilterCapabilities + get() = super.filterCapabilities.copy( + isTagsExclusionSupported = false, + ) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/AsiaLotuss.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/AsiaLotuss.kt new file mode 100644 index 00000000..cb210113 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/AsiaLotuss.kt @@ -0,0 +1,10 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("ASIALOTUSS", "AsiaLotuss", "es") +internal class AsiaLotuss(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.ASIALOTUSS, "asialotuss.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CatharsisFantasy.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CatharsisFantasy.kt new file mode 100644 index 00000000..3e16a84c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CatharsisFantasy.kt @@ -0,0 +1,81 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.json.JSONObject +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.* +import java.util.ArrayList +import java.util.Base64 + +@MangaSourceParser("CATHARSISFANTASY", "CatharsisFantasy", "es") +internal class CatharsisFantasy(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.CATHARSISFANTASY, + "catharsisfantasy.com", + pageSize = 30, + searchPageSize = 10, + ) { + + override suspend fun getPages(chapter: MangaChapter): List { + val chapterUrl = chapter.url.toAbsoluteUrl(domain) + val firstDocs = webClient.httpGet(chapterUrl).parseHtml() + val url = firstDocs.selectFirst("iframe")?.src() ?: chapterUrl + val docs = webClient.httpGet(url).parseHtml() + + val test = docs.select(selectTestScript) + if (test.isNullOrEmpty() and !encodedSrc) { + return docs.select(selectPage).map { img -> + val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } else { + val images = if (encodedSrc) { + val script = docs.select(selectScript) + var decode = "" + for (i in script) { + if (i.attr("src").startsWith("data:text/javascript;base64,")) { + decode = Base64.getDecoder().decode(i.attr("src").replace("data:text/javascript;base64,", "")) + .decodeToString() + if (decode.startsWith("ts_reader.run")) { + break + } + } + } + JSONObject(decode.substringAfter('(').substringBeforeLast(')')) + .getJSONArray("sources") + .getJSONObject(0) + .getJSONArray("images") + + } else { + val script = docs.selectFirstOrThrow(selectTestScript) + JSONObject(script.data().substringAfter('(').substringBeforeLast(')')) + .getJSONArray("sources") + .getJSONObject(0) + .getJSONArray("images") + } + + val pages = ArrayList(images.length()) + for (i in 0 until images.length()) { + pages.add( + MangaPage( + id = generateUid(images.getString(i)), + url = images.getString(i), + preview = null, + source = source, + ), + ) + } + return pages + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CatharsisWorld.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CatharsisWorld.kt new file mode 100644 index 00000000..4b061a94 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CatharsisWorld.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.es + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.util.Locale + +@MangaSourceParser("CATHARSISWORLD", "CatharsisWorld", "es") +internal class CatharsisWorld(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.CATHARSISWORLD, "altayscans.com", pageSize = 30, searchPageSize = 10) { + override val sourceLocale: Locale = Locale.ENGLISH + override val filterCapabilities: MangaListFilterCapabilities + get() = super.filterCapabilities.copy( + isTagsExclusionSupported = false, + ) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Doujins.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Doujins.kt index dae2e143..a3505f89 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Doujins.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Doujins.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.mangareader.es +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.ContentType @@ -7,6 +8,7 @@ import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +@Broken @MangaSourceParser("DOUJINS", "Doujins.lat", "es", ContentType.HENTAI) internal class Doujins(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.DOUJINS, "doujins.lat", pageSize = 20, searchPageSize = 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariManga.kt index d1b622c9..6d7177b1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariManga.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("INARIMANGA", "InariManga", "es") internal class InariManga(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.INARIMANGA, "nakamatoon.com", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.INARIMANGA, "vrinari.org", pageSize = 20, searchPageSize = 10) { override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( isTagsExclusionSupported = false, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariPikav.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariPikav.kt index 527c755d..1dd37cfc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariPikav.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/InariPikav.kt @@ -11,7 +11,7 @@ internal class InariPikav(context: MangaLoaderContext) : MangaReaderParser( context, MangaParserSource.INARIPIKAV, - "inarimanga.cooksu.net", + "vrinari.org", pageSize = 10, searchPageSize = 10, ) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt index 503f9c7a..5ec4b564 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("MIAUSCAN", "LectorMiau", "es") internal class MiauScan(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MIAUSCAN, "lectormiau.com", pageSize = 20, searchPageSize = 10) + MangaReaderParser(context, MangaParserSource.MIAUSCAN, "zonamiau.com", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/AlceaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/AlceaScan.kt index 30ae8294..bc760ac7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/AlceaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/AlceaScan.kt @@ -1,11 +1,13 @@ package org.koitharu.kotatsu.parsers.site.mangareader.id +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.util.* +@Broken @MangaSourceParser("ALCEASCAN", "AlceaScan", "id") internal class AlceaScan(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.ALCEASCAN, "alceacomic.my.id", pageSize = 20, searchPageSize = 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Ikiru.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Ikiru.kt index 5392cbf2..dd763ef0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Ikiru.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Ikiru.kt @@ -8,6 +8,6 @@ import java.util.Locale @MangaSourceParser("IKIRU", "Ikiru", "id") internal class Ikiru(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.IKIRU, "ikiru.me", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.IKIRU, "ikiru.one", pageSize = 20, searchPageSize = 10) { override val sourceLocale: Locale = Locale.ENGLISH } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KofiScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KofiScans.kt new file mode 100644 index 00000000..797dbb37 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KofiScans.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.id + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import java.util.* + +@MangaSourceParser("KOFISCANS", "KofiScans", "id") +internal class KofiScans(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.KOFISCANS, "manhwalist.org", pageSize = 20, searchPageSize = 10) { + override val sourceLocale: Locale = Locale.ENGLISH + override val listUrl = "/manhwa" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMama.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMama.kt new file mode 100644 index 00000000..827385e7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikMama.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.id + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("KOMIKMAMA", "KomikMama", "id") +internal class KomikMama(context: MangaLoaderContext) : + MangaReaderParser(context, MangaParserSource.KOMIKMAMA, "komikmama.org", pageSize = 30, searchPageSize = 10) { + override val listUrl = "/komik" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaSusuku.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaSusuku.kt index 05f61f85..ba4976ed 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaSusuku.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaSusuku.kt @@ -9,7 +9,7 @@ import java.util.* @MangaSourceParser("MANGASUSUKU", "MangaSusuku", "id", ContentType.HENTAI) internal class MangaSusuku(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MANGASUSUKU, "mangasusuku.xyz", pageSize = 20, searchPageSize = 20) { + MangaReaderParser(context, MangaParserSource.MANGASUSUKU, "mangasusuku.com", pageSize = 20, searchPageSize = 20) { override val listUrl = "/komik" override val datePattern = "MMM d, yyyy" override val sourceLocale: Locale = Locale.ENGLISH diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt index 6397a2e1..a33b9c08 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.mangareader.id +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities @@ -7,9 +8,10 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import java.util.* +@Broken // Redirect to @IKIRU @MangaSourceParser("MANGATALE", "MangaTale", "id") internal class MangaTaleParser(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MANGATALE, "mangatale.id", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.MANGATALE, "ikiru.one", pageSize = 20, searchPageSize = 10) { override val sourceLocale: Locale = Locale.ENGLISH override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoIcu.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoIcu.kt index 66db6bc9..4b7831f4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoIcu.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoIcu.kt @@ -9,7 +9,7 @@ import java.util.* @MangaSourceParser("MANHWAINDOICU", "KomikCinta", "id", ContentType.HENTAI) internal class ManhwaIndoIcu(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MANHWAINDOICU, "komikcinta.icu", pageSize = 30, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.MANHWAINDOICU, "komikdewasa.art", pageSize = 30, searchPageSize = 10) { override val sourceLocale: Locale = Locale.ENGLISH override val listUrl = "/komik" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwadesuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwadesuParser.kt index a95afc2a..5c60eb2e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwadesuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwadesuParser.kt @@ -9,7 +9,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("MANHWADESU", "ManhwaDesu", "id", ContentType.HENTAI) internal class ManhwadesuParser(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MANHWADESU, "manhwadesu.cc", pageSize = 20, searchPageSize = 10) { + MangaReaderParser(context, MangaParserSource.MANHWADESU, "manhwadesu.my", pageSize = 20, searchPageSize = 10) { override val listUrl = "/komik" override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MasterKomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MasterKomik.kt index 5bc230f3..fc167003 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MasterKomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MasterKomik.kt @@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("MASTERKOMIK", "Tenshi", "id") internal class MasterKomik(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MASTERKOMIK, "tenshi.pw", pageSize = 20, searchPageSize = 20) { + MangaReaderParser(context, MangaParserSource.MASTERKOMIK, "tenshi01.id", pageSize = 20, searchPageSize = 20) { override val datePattern = "MMM d, yyyy" override val listUrl = "/komik" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt index 10e17af4..c6fd5ac0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt @@ -11,6 +11,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser internal class MiHentai(context: MangaLoaderContext) : MangaReaderParser(context, MangaParserSource.MIHENTAI, "mihentai.com", pageSize = 30, searchPageSize = 10) { override val datePattern = "MMM d, yyyy" + override val selectMangaList = ".listupd .bs .bsx" override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( isTagsExclusionSupported = false, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Tukangkomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Tukangkomik.kt index 3117f39b..f60cd0f4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Tukangkomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Tukangkomik.kt @@ -9,7 +9,7 @@ import java.util.* @MangaSourceParser("TUKANGKOMIK", "Tukang Komik", "id") internal class Tukangkomik(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.TUKANGKOMIK, "tukangkomik.id", pageSize = 20, searchPageSize = 20) { + MangaReaderParser(context, MangaParserSource.TUKANGKOMIK, "tukangkomik.co", pageSize = 20, searchPageSize = 20) { override val datePattern = "MMM d, yyyy" override val sourceLocale: Locale = Locale.ENGLISH override val filterCapabilities: MangaListFilterCapabilities diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/DiskusScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/DiskusScan.kt index ee05ebb5..2efd1eef 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/DiskusScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/DiskusScan.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser @MangaSourceParser("DISKUSSCAN", "DiskusScan", "pt") internal class DiskusScan(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.DISKUSSCAN, "diskusscan.com", pageSize = 20, searchPageSize = 10) + MangaReaderParser(context, MangaParserSource.DISKUSSCAN, "diskusscan.online", pageSize = 20, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/SssScanlator.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/SssScanlator.kt index 3aa7c01a..6b63dbe1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/SssScanlator.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/SssScanlator.kt @@ -11,7 +11,7 @@ internal class SssScanlator(context: MangaLoaderContext) : MangaReaderParser( context, MangaParserSource.SSSSCANLATOR, - "sssscanlator.com.br", + "ssstoons.com", pageSize = 20, searchPageSize = 10, ) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaGezgini.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/HyperionScans.kt similarity index 67% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaGezgini.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/HyperionScans.kt index b7e26484..5c8bed28 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/MangaGezgini.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/HyperionScans.kt @@ -6,9 +6,15 @@ import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser -@MangaSourceParser("MANGAGEZGINI", "MangaGezgini", "tr") -internal class MangaGezgini(context: MangaLoaderContext) : - MangaReaderParser(context, MangaParserSource.MANGAGEZGINI, "mangagezgini.net", pageSize = 20, searchPageSize = 10) { +@MangaSourceParser("HYPERIONSCANS", "SeraphManga", "tr") +internal class HyperionScans(context: MangaLoaderContext) : + MangaReaderParser( + context, + MangaParserSource.HYPERIONSCANS, + "www.seraphmanga.com", + pageSize = 20, + searchPageSize = 10, + ) { override val filterCapabilities: MangaListFilterCapabilities get() = super.filterCapabilities.copy( isTagsExclusionSupported = false, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt index 27fb2258..6e0e9287 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt @@ -11,7 +11,7 @@ internal class TempestfansubParser(context: MangaLoaderContext) : MangaReaderParser( context, MangaParserSource.TEMPESTFANSUB, - "tempestfansub.com", + "tempestscans.net", pageSize = 25, searchPageSize = 40, ) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/MangaWtfParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/MangaWtfParser.kt index 0ea0762b..4181644f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/MangaWtfParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/MangaWtfParser.kt @@ -137,13 +137,13 @@ internal class MangaWtfParser( tags = jo.getJSONArray("labels").mapJSONToSet { it.toMangaTag() }, state = jo.getStringOrNull("status")?.toMangaState(), author = - jo.getJSONArray("relations").asTypedList().firstNotNullOfOrNull { - if (it.getStringOrNull("type") == "AUTHOR") { - it.getJSONObject("publisher").getStringOrNull("name") - } else { - null - } - }, + jo.getJSONArray("relations").asTypedList().firstNotNullOfOrNull { + if (it.getStringOrNull("type") == "AUTHOR") { + it.getJSONObject("publisher").getStringOrNull("name") + } else { + null + } + }, source = source, largeCoverUrl = null, description = jo.getString("description").nl2br(), @@ -209,10 +209,10 @@ internal class MangaWtfParser( MangaChapter( id = generateUid(jo.getString("id")), name = - jo.getStringOrNull("name") ?: buildString { - if (volume > 0) append("Том ").append(volume).append(' ') - if (number > 0) append("Глава ").append(number) else append("Без имени") - }, + jo.getStringOrNull("name") ?: buildString { + if (volume > 0) append("Том ").append(volume).append(' ') + if (number > 0) append("Глава ").append(number) else append("Без имени") + }, number = number, volume = volume, url = jo.getString("id"), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/it/MangaItalia.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/it/MangaItalia.kt index 8e1a1d5c..92d19a8b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/it/MangaItalia.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/scan/it/MangaItalia.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.scan.ScanParser @MangaSourceParser("MANGAITALIA", "MangaItalia", "pt") internal class MangaItalia(context: MangaLoaderContext) : - ScanParser(context, MangaParserSource.MANGAITALIA, "manga-italia.com") + ScanParser(context, MangaParserSource.MANGAITALIA, "mangaita.io") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/YaoiFlix.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/YaoiFlix.kt deleted file mode 100644 index 98634c0a..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/YaoiFlix.kt +++ /dev/null @@ -1,147 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.tr - -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.PagedMangaParser -import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import java.text.SimpleDateFormat -import java.util.* - -@MangaSourceParser("YAOIFLIX", "YaoiFlix", "tr", ContentType.HENTAI) -internal class YaoiFlix(context: MangaLoaderContext) : PagedMangaParser(context, MangaParserSource.YAOIFLIX, 8) { - - override val configKeyDomain = ConfigKey.Domain("www.yaoiflix.dev") - - override fun onCreateConfig(keys: MutableCollection>) { - super.onCreateConfig(keys) - keys.add(userAgentKey) - } - - override val availableSortOrders: Set = EnumSet.of(SortOrder.UPDATED) - - override val filterCapabilities: MangaListFilterCapabilities - get() = MangaListFilterCapabilities( - isSearchSupported = true, - ) - - override suspend fun getFilterOptions() = MangaListFilterOptions( - availableTags = fetchAvailableTags(), - ) - - override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List { - val url = buildString { - append("https://") - append(domain) - when { - !filter.query.isNullOrEmpty() -> { - if (page > 1) { - append("/page/") - append(page.toString()) - } - append("/?s=") - append(filter.query.urlEncoded()) - } - - else -> { - if (filter.tags.isNotEmpty()) { - filter.tags.oneOrThrowIfMany()?.let { - append("/dizi-kategori/") - append(it.key) - append("/") - if (page > 1) { - append("page/") - append(page.toString()) - append('/') - } - } - } else { - append("/tum-seriler/") - if (page > 1) { - append("page/") - append(page.toString()) - append('/') - } - } - } - } - } - val doc = webClient.httpGet(url).parseHtml() - return doc.select(".list_items .series-box").map { div -> - val a = div.selectFirstOrThrow("a") - val href = a.attrAsRelativeUrl("href") - Manga( - id = generateUid(href), - url = href, - publicUrl = a.attrAsAbsoluteUrl("href"), - title = div.selectLast(".name")?.text().orEmpty(), - coverUrl = div.selectFirst("img")?.src().orEmpty(), - altTitle = null, - rating = RATING_UNKNOWN, - tags = emptySet(), - description = null, - state = null, - author = null, - isNsfw = isNsfwSource, - source = source, - ) - } - } - - private suspend fun fetchAvailableTags(): Set { - val doc = webClient.httpGet("https://$domain").parseHtml() - return doc.select(".tags .cat-item a").mapNotNullToSet { a -> - MangaTag( - key = a.attr("href").removeSuffix('/').substringAfterLast('/'), - title = a.text(), - source = source, - ) - } - } - - override suspend fun getDetails(manga: Manga): Manga { - val doc = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() - val dateFormat = SimpleDateFormat("dd MMM", sourceLocale) - return manga.copy( - description = doc.selectFirst(".description")?.html()?.substringAfterLast("
"), - tags = doc.select(".category a").mapNotNullToSet { a -> - MangaTag( - key = a.attr("href").removeSuffix('/').substringAfterLast('/'), - title = a.text(), - source = source, - ) - }, - chapters = doc.select(".serie-content .ep-box") - .mapChapters { i, div -> - val a = div.selectFirstOrThrow("a") - val href = a.attrAsRelativeUrl("href") - MangaChapter( - id = generateUid(href), - name = div.selectFirst(".name")?.text() ?: "Chapter : ${i + 1f}", - number = i + 1f, - volume = 0, - url = href, - scanlator = null, - uploadDate = dateFormat.tryParse(div.selectFirstOrThrow(".date").text()), - branch = null, - source = source, - ) - }, - ) - } - - override suspend fun getPages(chapter: MangaChapter): List { - val fullUrl = chapter.url.toAbsoluteUrl(domain) - val doc = webClient.httpGet(fullUrl).parseHtml() - return doc.select(".video-content img").map { img -> - val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") - MangaPage( - id = generateUid(url), - url = url, - preview = null, - source = source, - ) - } - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/BlogTruyenParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/BlogTruyenParser.kt index c6bd3f4d..a806b177 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/BlogTruyenParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/BlogTruyenParser.kt @@ -47,7 +47,7 @@ internal class BlogTruyenParser(context: MangaLoaderContext) : val searchUrl = "https://${domain}/timkiem/nangcao/1/0/-1/-1?txt=${filter.query.urlEncoded()}&p=$page" val searchContent = webClient.httpGet(searchUrl).parseHtml() .selectFirst("section.list-manga-bycate > div.list") - parseMangaList(searchContent) ?: emptyList() + parseMangaList(searchContent) } filter.tags.isNotEmpty() -> { @@ -55,14 +55,14 @@ internal class BlogTruyenParser(context: MangaLoaderContext) : val categoryAjax = "https://${domain}/ajax/Category/AjaxLoadMangaByCategory?id=${tag.key}&orderBy=5&p=$page" val listContent = webClient.httpGet(categoryAjax).parseHtml().selectFirst("div.list") - parseMangaList(listContent) ?: emptyList() + parseMangaList(listContent) } ?: emptyList() } else -> { val url = "https://${domain}/ajax/Category/AjaxLoadMangaByCategory?id=0&orderBy=5&p=$page" val listContent = webClient.httpGet(url).parseHtml().selectFirst("div.list") - parseMangaList(listContent) ?: emptyList() + parseMangaList(listContent) } } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/CuuTruyenParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/CuuTruyenParser.kt index e0f45467..130e32bb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/CuuTruyenParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/CuuTruyenParser.kt @@ -32,7 +32,7 @@ internal class CuuTruyenParser(context: MangaLoaderContext) : "cuutruyen.net", "nettrom.com", "hetcuutruyen.net", - "cuutruyenpip7z.site" + "cuutruyenpip7z.site", ) override fun onCreateConfig(keys: MutableCollection>) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/ja/MangaRaw.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/ja/MangaRaw.kt index 25ccbb29..30320350 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/ja/MangaRaw.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/ja/MangaRaw.kt @@ -11,7 +11,7 @@ import org.koitharu.kotatsu.parsers.util.* @MangaSourceParser("MANGARAW", "MangaRaw", "ja") internal class MangaRaw(context: MangaLoaderContext) : - WpComicsParser(context, MangaParserSource.MANGARAW, "mangaraw.xyz") { + WpComicsParser(context, MangaParserSource.MANGARAW, "mangaraw.best") { override val listUrl = "/search/manga" override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List { 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 3438c7dc..9ac1698e 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 @@ -13,51 +13,51 @@ import java.util.* @MangaSourceParser("DOCTRUYEN3Q", "DocTruyen3Q", "vi") internal class DocTruyen3Q(context: MangaLoaderContext) : WpComicsParser(context, MangaParserSource.DOCTRUYEN3Q, "doctruyen3qw.pro", 36) { - + override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain( "doctruyen3qw.pro", "doctruyen3qvip.com", "doctruyen3q.link", ) override val datePattern = "dd/MM/yyyy" - override val availableSortOrders: Set = EnumSet.of( - SortOrder.UPDATED, - SortOrder.POPULARITY, - ) - - override val filterCapabilities: MangaListFilterCapabilities - get() = MangaListFilterCapabilities( - isSearchSupported = true, - isTagsExclusionSupported = true, - isMultipleTagsSupported = false, - ) - - override suspend fun getFilterOptions(): MangaListFilterOptions { - return MangaListFilterOptions( - availableTags = availableTags(), - availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED) - ) - } + override val availableSortOrders: Set = EnumSet.of( + SortOrder.UPDATED, + SortOrder.POPULARITY, + ) + + override val filterCapabilities: MangaListFilterCapabilities + get() = MangaListFilterCapabilities( + isSearchSupported = true, + isTagsExclusionSupported = true, + isMultipleTagsSupported = false, + ) + + override suspend fun getFilterOptions(): MangaListFilterOptions { + return MangaListFilterOptions( + availableTags = availableTags(), + availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED), + ) + } override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List { val url = buildString { append("https://") append(domain) append("/tim-truyen") - + if (filter.tags.isNotEmpty()) { append("/") append(filter.tags.first().key) } - + val params = mutableListOf() - + when (order) { SortOrder.UPDATED -> params.add("sort=1") SortOrder.POPULARITY -> params.add("sort=2") - else -> {} + else -> {} } - + filter.states.oneOrThrowIfMany()?.let { state -> when (state) { MangaState.ONGOING -> params.add("status=0") @@ -65,21 +65,21 @@ internal class DocTruyen3Q(context: MangaLoaderContext) : else -> params.add("status=2") } } - + if (filter.query?.isNotEmpty() == true) { params.add("keyword=${filter.query.urlEncoded()}") } - + if (page > 1) { params.add("page=$page") } - + if (params.isNotEmpty()) { append("?") append(params.joinToString("&")) } } - + val doc = webClient.httpGet(url).parseHtml() return parseMangaList(doc) } @@ -93,7 +93,7 @@ internal class DocTruyen3Q(context: MangaLoaderContext) : val key = a.attr("href").substringAfterLast('/') tags.find { it.key == key } } - + Manga( id = generateUid(href), url = href, @@ -114,44 +114,44 @@ internal class DocTruyen3Q(context: MangaLoaderContext) : override suspend fun getDetails(manga: Manga): Manga { val fullUrl = manga.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() - + val availableTags = availableTags() val tagElements = doc.select("li.category.row p.detail-info a[href*=tim-truyen]") val tags = tagElements.mapNotNullToSet { a -> val key = a.attr("href").substringAfterLast('/') - availableTags.find { it.key == key } + availableTags.find { it.key == key } } - + val description = doc.selectFirst("div.summary-content p.detail-summary")?.html() val authorText = doc.selectFirst("li.author.row p.detail-info")?.text().orEmpty() - + val author = if (authorText.isNotEmpty() && authorText != "Đang cập nhật") { authorText } else { null } - + val altTitleText = doc.selectFirst("li.name-other.row p.detail-info")?.text() val altTitle = if (!altTitleText.isNullOrEmpty() && altTitleText != "Đang cập nhật") { altTitleText } else { null - } - + } + val stateText = doc.selectFirst("li.status.row p.detail-info span.label")?.text() val state = when (stateText) { "Đang cập nhật" -> MangaState.ONGOING "Đã hoàn thành" -> MangaState.FINISHED else -> null } - + return manga.copy( author = author, description = description, state = state, tags = tags, chapters = getChapters(doc), - altTitle = altTitle + altTitle = altTitle, ) } @@ -172,7 +172,7 @@ internal class DocTruyen3Q(context: MangaLoaderContext) : source = source, scanlator = null, branch = null, - volume = 0 + volume = 0, ) } } @@ -189,21 +189,25 @@ internal class DocTruyen3Q(context: MangaLoaderContext) : val minutes = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - minutes * 60 * 1000 } + dateText.contains("giờ trước") -> { val match = relativeTimePattern.find(dateText) val hours = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - hours * 3600 * 1000 } + dateText.contains("ngày trước") -> { val match = relativeTimePattern.find(dateText) val days = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - days * 86400 * 1000 } + dateText.contains("tuần trước") -> { val match = relativeTimePattern.find(dateText) val weeks = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - weeks * 7 * 86400 * 1000 } + absoluteTimePattern.matches(dateText) -> { val formatter = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()) try { @@ -213,6 +217,7 @@ internal class DocTruyen3Q(context: MangaLoaderContext) : 0L } } + else -> 0L } } @@ -233,7 +238,7 @@ internal class DocTruyen3Q(context: MangaLoaderContext) : private fun availableTags(): Set = setOf( MangaTag("Action", "action", source), - MangaTag("Adult", "truong-thanh", source), + MangaTag("Adult", "truong-thanh", source), MangaTag("Adventure", "phieu-luu", source), MangaTag("Anime", "anime", source), MangaTag("Chuyển Sinh", "chuyen-sinh", source), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NhatTruyenVN.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NhatTruyenVN.kt index 73259c0e..671406f1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NhatTruyenVN.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/wpcomics/vi/NhatTruyenVN.kt @@ -82,26 +82,31 @@ internal class NhatTruyenVN(context: MangaLoaderContext) : val minutes = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - minutes * 60 * 1000 } + dateText.contains("giờ trước") -> { val match = relativeTimePattern.find(dateText) val hours = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - hours * 3600 * 1000 } + dateText.contains("ngày trước") -> { val match = relativeTimePattern.find(dateText) val days = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - days * 86400 * 1000 } + dateText.contains("tháng trước") -> { val match = relativeTimePattern.find(dateText) val months = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - months * 30 * 86400 * 1000 } + dateText.contains("năm trước") -> { val match = relativeTimePattern.find(dateText) val years = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - years * 365 * 86400 * 1000 } + absoluteTimePattern.matches(dateText) -> { val formatter = SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()) try { @@ -111,6 +116,7 @@ internal class NhatTruyenVN(context: MangaLoaderContext) : 0L } } + else -> 0L } } 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 21b8ecba..2a410257 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 @@ -16,44 +16,44 @@ internal class TopTruyen(context: MangaLoaderContext) : override val datePattern = "dd/MM/yyyy" - override val availableSortOrders: Set = EnumSet.of( - SortOrder.UPDATED, - SortOrder.POPULARITY, - ) - - override val filterCapabilities: MangaListFilterCapabilities - get() = MangaListFilterCapabilities( - isSearchSupported = true, - isTagsExclusionSupported = true, - isMultipleTagsSupported = false, - ) - - override suspend fun getFilterOptions(): MangaListFilterOptions { - return MangaListFilterOptions( - availableTags = availableTags(), - availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED) - ) - } + override val availableSortOrders: Set = EnumSet.of( + SortOrder.UPDATED, + SortOrder.POPULARITY, + ) + + override val filterCapabilities: MangaListFilterCapabilities + get() = MangaListFilterCapabilities( + isSearchSupported = true, + isTagsExclusionSupported = true, + isMultipleTagsSupported = false, + ) + + override suspend fun getFilterOptions(): MangaListFilterOptions { + return MangaListFilterOptions( + availableTags = availableTags(), + availableStates = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED), + ) + } override suspend fun getListPage(page: Int, order: SortOrder, filter: MangaListFilter): List { val url = buildString { append("https://") append(domain) append("/tim-truyen") - + if (filter.tags.isNotEmpty()) { append("/") append(filter.tags.first().key) } - + val params = mutableListOf() - + when (order) { SortOrder.UPDATED -> params.add("sort=1") SortOrder.POPULARITY -> params.add("sort=2") - else -> {} + else -> {} } - + filter.states.oneOrThrowIfMany()?.let { state -> when (state) { MangaState.ONGOING -> params.add("status=0") @@ -61,21 +61,21 @@ internal class TopTruyen(context: MangaLoaderContext) : else -> params.add("status=2") } } - + if (filter.query?.isNotEmpty() == true) { params.add("keyword=${filter.query.urlEncoded()}") } - + if (page > 1) { params.add("page=$page") } - + if (params.isNotEmpty()) { append("?") params.joinTo(this, "&") } } - + val doc = webClient.httpGet(url).parseHtml() return parseMangaList(doc) } @@ -89,7 +89,7 @@ internal class TopTruyen(context: MangaLoaderContext) : val key = a.attr("href").substringAfterLast('/') tags.find { it.key == key } } - + Manga( id = generateUid(href), url = href, @@ -110,44 +110,44 @@ internal class TopTruyen(context: MangaLoaderContext) : override suspend fun getDetails(manga: Manga): Manga { val fullUrl = manga.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() - + val availableTags = availableTags() val tagElements = doc.select("li.category.row p.detail-info a[href*=tim-truyen]") val tags = tagElements.mapNotNullToSet { a -> val key = a.attr("href").substringAfterLast('/') - availableTags.find { it.key == key } + availableTags.find { it.key == key } } - + val description = doc.selectFirst("div.summary-content p.detail-summary")?.html() val authorText = doc.selectFirst("li.author.row p.detail-info")?.text().orEmpty() - + val author = if (authorText.isNotEmpty() && authorText != "Đang cập nhật") { authorText } else { null } - + val altTitleText = doc.selectFirst("li.name-other.row p.detail-info")?.text() val altTitle = if (!altTitleText.isNullOrEmpty() && altTitleText != "Đang cập nhật") { altTitleText } else { null } - + val stateText = doc.selectFirst("li.status.row p.detail-info span.label")?.text() val state = when (stateText) { "Đang cập nhật" -> MangaState.ONGOING "Đã hoàn thành" -> MangaState.FINISHED else -> null } - + return manga.copy( author = author, description = description, state = state, tags = tags, chapters = getChapters(doc), - altTitle = altTitle + altTitle = altTitle, ) } @@ -168,7 +168,7 @@ internal class TopTruyen(context: MangaLoaderContext) : source = source, scanlator = null, branch = null, - volume = 0 + volume = 0, ) } } @@ -185,21 +185,25 @@ internal class TopTruyen(context: MangaLoaderContext) : val minutes = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - minutes * 60 * 1000 } + dateText.contains("giờ trước") -> { val match = relativeTimePattern.find(dateText) val hours = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - hours * 3600 * 1000 } + dateText.contains("ngày trước") -> { val match = relativeTimePattern.find(dateText) val days = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - days * 86400 * 1000 } + dateText.contains("tuần trước") -> { val match = relativeTimePattern.find(dateText) val weeks = match?.groups?.get(1)?.value?.toIntOrNull() ?: 0 System.currentTimeMillis() - weeks * 7 * 86400 * 1000 } + absoluteTimePattern.matches(dateText) -> { val formatter = SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()) try { @@ -209,6 +213,7 @@ internal class TopTruyen(context: MangaLoaderContext) : 0L } } + else -> 0L } } @@ -229,7 +234,7 @@ internal class TopTruyen(context: MangaLoaderContext) : private fun availableTags(): Set = setOf( MangaTag("Action", "action", source), - MangaTag("Adult", "truong-thanh", source), + MangaTag("Adult", "truong-thanh", source), MangaTag("Adventure", "phieu-luu", source), MangaTag("Anime", "anime", source), MangaTag("Chuyển Sinh", "chuyen-sinh", source), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/NekoScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/NekoScans.kt index 21981007..bd5cc507 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/NekoScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/es/NekoScans.kt @@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser @MangaSourceParser("NEKOSCANS", "NekoScans", "es") internal class NekoScans(context: MangaLoaderContext) : - ZeistMangaParser(context, MangaParserSource.NEKOSCANS, "nekoscanlationlector.blogspot.com") + ZeistMangaParser(context, MangaParserSource.NEKOSCANS, "www.nekoscans.org") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/KomikGes.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/KomikGes.kt index e7fe306b..bf88bbc6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/KomikGes.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/id/KomikGes.kt @@ -2,6 +2,7 @@ package org.koitharu.kotatsu.parsers.site.zeistmanga.id import org.json.JSONObject import org.jsoup.nodes.Document +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaChapter @@ -12,6 +13,7 @@ import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.json.asTypedList import java.text.SimpleDateFormat +@Broken @MangaSourceParser("KOMIKGES", "KomikGes", "id") internal class KomikGes(context: MangaLoaderContext) : ZeistMangaParser(context, MangaParserSource.KOMIKGES, "www.komikges.my.id") { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/MaxgsScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/MaxgsScan.kt index f645d665..ecf2c77d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/MaxgsScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/pt/MaxgsScan.kt @@ -1,10 +1,12 @@ package org.koitharu.kotatsu.parsers.site.zeistmanga.pt +import org.koitharu.kotatsu.parsers.Broken import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser +@Broken @MangaSourceParser("MAXGSSCAN", "MaxgsScan", "pt") internal class MaxgsScan(context: MangaLoaderContext) : ZeistMangaParser(context, MangaParserSource.MAXGSSCAN, "www.maxgsscan.online") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/tr/HyperionScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/tr/HyperionScans.kt deleted file mode 100644 index 72471c5f..00000000 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zeistmanga/tr/HyperionScans.kt +++ /dev/null @@ -1,30 +0,0 @@ -package org.koitharu.kotatsu.parsers.site.zeistmanga.tr - -import org.koitharu.kotatsu.parsers.MangaLoaderContext -import org.koitharu.kotatsu.parsers.MangaSourceParser -import org.koitharu.kotatsu.parsers.model.MangaParserSource -import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser -import org.koitharu.kotatsu.parsers.util.domain -import org.koitharu.kotatsu.parsers.util.mapNotNullToSet -import org.koitharu.kotatsu.parsers.util.parseHtml -import org.koitharu.kotatsu.parsers.util.requireElementById - -@MangaSourceParser("HYPERIONSCANS", "HyperionScans", "tr") -internal class HyperionScans(context: MangaLoaderContext) : - ZeistMangaParser(context, MangaParserSource.HYPERIONSCANS, "www.hyperionscans.site") { - override val sateOngoing: String = "Devam Ediyor" - override val sateFinished: String = "Tamamlandı" - override val sateAbandoned: String = "Güncel" - - override suspend fun fetchAvailableTags(): Set { - val doc = webClient.httpGet("https://$domain").parseHtml() - return doc.requireElementById("LinkList1").select("ul li a").mapNotNullToSet { - MangaTag( - key = it.attr("href").substringBefore("?").substringAfterLast('/'), - title = it.text(), - source = source, - ) - } - } -} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/KomikIndoInfo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/KomikIndoInfo.kt index 7a71f296..4c1a0a51 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/KomikIndoInfo.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/KomikIndoInfo.kt @@ -1,13 +1,15 @@ package org.koitharu.kotatsu.parsers.site.zmanga.id +import org.koitharu.kotatsu.parsers.Broken 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.zmanga.ZMangaParser +@Broken // redirect to @MANGASUSUKU @MangaSourceParser("KOMIKINDO_INFO", "KomikIndo.info", "id", ContentType.HENTAI) internal class KomikIndoInfo(context: MangaLoaderContext) : - ZMangaParser(context, MangaParserSource.KOMIKINDO_INFO, "komikindo.info") { + ZMangaParser(context, MangaParserSource.KOMIKINDO_INFO, "mangasusuku.com") { override val datePattern = "dd MMM yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/YuraManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/YuraManga.kt new file mode 100644 index 00000000..31463925 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/id/YuraManga.kt @@ -0,0 +1,13 @@ +package org.koitharu.kotatsu.parsers.site.zmanga.id + +import org.koitharu.kotatsu.parsers.Broken +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaParserSource +import org.koitharu.kotatsu.parsers.site.zmanga.ZMangaParser + +@Broken // need login for access to advanced-search/ +@MangaSourceParser("YURAMANGA", "YuraManga", "id") +internal class YuraManga(context: MangaLoaderContext) : + ZMangaParser(context, MangaParserSource.YURAMANGA, "www.yuramanga.my.id") +