Update sources

Close #1105
Close #1104
master
devi 2 years ago
parent 7a571e596d
commit 7d71421c30

@ -1 +1 @@
total: 1111 total: 1118

@ -123,7 +123,7 @@ internal class ExHentaiParser(
url.addEncodedQueryParameter("next", next.toString()) url.addEncodedQueryParameter("next", next.toString())
url.addQueryParameter("f_search", filter.toSearchQuery()) url.addQueryParameter("f_search", filter.toSearchQuery())
var fCats = filter.types.toFCats() val fCats = filter.types.toFCats()
if (fCats != 0) { if (fCats != 0) {
url.addEncodedQueryParameter("f_cats", (1023 - fCats).toString()) url.addEncodedQueryParameter("f_cats", (1023 - fCats).toString())
} }

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.cupfox.vi package org.koitharu.kotatsu.parsers.site.cupfox.vi
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.cupfox.CupFoxParser import org.koitharu.kotatsu.parsers.site.cupfox.CupFoxParser
@Broken
@MangaSourceParser("OIOIVN", "OioiVn", "vi") @MangaSourceParser("OIOIVN", "OioiVn", "vi")
internal class OioiVn(context: MangaLoaderContext) : internal class OioiVn(context: MangaLoaderContext) :
CupFoxParser(context, MangaParserSource.OIOIVN, "oioivn.com") CupFoxParser(context, MangaParserSource.OIOIVN, "oioivn.com")

@ -20,7 +20,7 @@ internal class TuMangaOnlineParser(context: MangaLoaderContext) : PagedMangaPars
pageSize = 24, pageSize = 24,
) { ) {
override val configKeyDomain = ConfigKey.Domain("visortmo.com") override val configKeyDomain = ConfigKey.Domain("zonatmo.com")
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) { override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
super.onCreateConfig(keys) super.onCreateConfig(keys)

@ -180,7 +180,7 @@ internal class MangaMana(context: MangaLoaderContext) : PagedMangaParser(context
altTitle = doc.selectFirst(".mangalist_item_othernames")?.text().orEmpty(), altTitle = doc.selectFirst(".mangalist_item_othernames")?.text().orEmpty(),
url = href, url = href,
publicUrl = href.toAbsoluteUrl(domain), publicUrl = href.toAbsoluteUrl(domain),
rating = div.getElementById("avgrating")?.ownText()?.toFloat()?.div(5f) ?: RATING_UNKNOWN, rating = div.getElementById("avgrating")?.ownText()?.toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN,
isNsfw = isNsfw, isNsfw = isNsfw,
coverUrl = img.orEmpty(), coverUrl = img.orEmpty(),
description = div.selectFirst(".mangalist_item_description")?.text().orEmpty(), description = div.selectFirst(".mangalist_item_description")?.text().orEmpty(),
@ -243,7 +243,7 @@ internal class MangaMana(context: MangaLoaderContext) : PagedMangaParser(context
}, },
author = doc.selectFirst("div.show_details span[itemprop=author]")?.text().orEmpty(), author = doc.selectFirst("div.show_details span[itemprop=author]")?.text().orEmpty(),
description = doc.selectFirst("dd[itemprop=description]")?.text(), description = doc.selectFirst("dd[itemprop=description]")?.text(),
rating = doc.getElementById("avgrating")?.ownText()?.toFloat()?.div(5f) ?: RATING_UNKNOWN, rating = doc.getElementById("avgrating")?.ownText()?.toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN,
tags = doc.select("ul.list-unstyled li a.category").mapNotNullToSet { tags = doc.select("ul.list-unstyled li a.category").mapNotNullToSet {
val key = it.attr("href").substringAfterLast('=') val key = it.attr("href").substringAfterLast('=')
MangaTag( MangaTag(

@ -9,4 +9,4 @@ import org.koitharu.kotatsu.parsers.site.heancms.HeanCms
@Broken // Not dead but changed template @Broken // Not dead but changed template
@MangaSourceParser("YUGEN_MANGAS_ES", "YugenMangas.lat", "es", ContentType.HENTAI) @MangaSourceParser("YUGEN_MANGAS_ES", "YugenMangas.lat", "es", ContentType.HENTAI)
internal class YugenMangasEs(context: MangaLoaderContext) : internal class YugenMangasEs(context: MangaLoaderContext) :
HeanCms(context, MangaParserSource.YUGEN_MANGAS_ES, "lectorikigai.erigu.com") HeanCms(context, MangaParserSource.YUGEN_MANGAS_ES, "lectorikigai.efope.com")

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.heancms.fr package org.koitharu.kotatsu.parsers.site.heancms.fr
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.* import org.koitharu.kotatsu.parsers.model.*
import org.koitharu.kotatsu.parsers.site.heancms.HeanCms import org.koitharu.kotatsu.parsers.site.heancms.HeanCms
@Broken
@MangaSourceParser("PERF_SCAN", "PerfScan", "fr") @MangaSourceParser("PERF_SCAN", "PerfScan", "fr")
internal class PerfScan(context: MangaLoaderContext) : internal class PerfScan(context: MangaLoaderContext) :
HeanCms(context, MangaParserSource.PERF_SCAN, "perf-scan.fr") HeanCms(context, MangaParserSource.PERF_SCAN, "perf-scan.fr")

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.heancmsalt.es package org.koitharu.kotatsu.parsers.site.heancmsalt.es
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.heancmsalt.HeanCmsAlt import org.koitharu.kotatsu.parsers.site.heancmsalt.HeanCmsAlt
@Broken
@MangaSourceParser("MANGAESP", "MangaEsp", "es") @MangaSourceParser("MANGAESP", "MangaEsp", "es")
internal class MangaEsp(context: MangaLoaderContext) : internal class MangaEsp(context: MangaLoaderContext) :
HeanCmsAlt(context, MangaParserSource.MANGAESP, "mangaesp.net", 15) { HeanCmsAlt(context, MangaParserSource.MANGAESP, "mangaesp.net", 15) {

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.hotcomics.de package org.koitharu.kotatsu.parsers.site.hotcomics.de
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.hotcomics.HotComicsParser import org.koitharu.kotatsu.parsers.site.hotcomics.HotComicsParser
import java.util.Locale import java.util.Locale
@Broken
@MangaSourceParser("TOOMICS", "Toomics", "de") @MangaSourceParser("TOOMICS", "Toomics", "de")
internal class Toomics(context: MangaLoaderContext) : internal class Toomics(context: MangaLoaderContext) :
HotComicsParser(context, MangaParserSource.TOOMICS, "toomics.top/de") { HotComicsParser(context, MangaParserSource.TOOMICS, "toomics.top/de") {

@ -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("REZOSCANS", "RezoScans", "en")
internal class RezoScans(context: MangaLoaderContext) :
KeyoappParser(context, MangaParserSource.REZOSCANS, "rezoscans.com")

@ -1,12 +1,10 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("ANISASCANS", "AnisaScans", "en") @MangaSourceParser("ANISASCANS", "AnisaScans", "en")
internal class AnisaScans(context: MangaLoaderContext) : internal class AnisaScans(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.ANISASCANS, "anisascans.in", 36) { MadaraParser(context, MangaParserSource.ANISASCANS, "anisascans.in", 36) {

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("BESTMANHUACOM", "BestManhua.com", "en") @MangaSourceParser("BESTMANHUACOM", "BestManhua.com", "en")
internal class BestManhuaCom(context: MangaLoaderContext) : internal class BestManhuaCom(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.BESTMANHUACOM, "bestmanhua.com", 10) { MadaraParser(context, MangaParserSource.BESTMANHUACOM, "bestmanhua.com", 10) {

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("COCOMIC", "CoComic", "en", ContentType.HENTAI) @MangaSourceParser("COCOMIC", "CoComic", "en", ContentType.HENTAI)
internal class CoComic(context: MangaLoaderContext) : internal class CoComic(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.COCOMIC, "cocomic.co") MadaraParser(context, MangaParserSource.COCOMIC, "cocomic.co")

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("DARKSCAN", "Dark-Scan", "en") @MangaSourceParser("DARKSCAN", "Dark-Scan", "en")
internal class DarkScan(context: MangaLoaderContext) : internal class DarkScan(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.DARKSCAN, "dark-scan.com") MadaraParser(context, MangaParserSource.DARKSCAN, "dark-scan.com")

@ -1,13 +1,90 @@
package org.koitharu.kotatsu.parsers.site.madara.en package org.koitharu.kotatsu.parsers.site.madara.en
import org.json.JSONObject
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.exception.AuthRequiredException
import org.koitharu.kotatsu.parsers.exception.ParseException
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.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.CryptoAES
import org.koitharu.kotatsu.parsers.util.domain
import org.koitharu.kotatsu.parsers.util.generateUid
import org.koitharu.kotatsu.parsers.util.parseFailed
import org.koitharu.kotatsu.parsers.util.parseHtml
import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow
import org.koitharu.kotatsu.parsers.util.src
import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl
import org.koitharu.kotatsu.parsers.util.toRelativeUrl
import java.util.Base64
@MangaSourceParser("DARK_SCANS", "DarkScans", "en") @MangaSourceParser("DARK_SCANS", "DarkScans", "en")
internal class DarkScans(context: MangaLoaderContext) : internal class DarkScans(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.DARK_SCANS, "darkscans.net", 18) { MadaraParser(context, MangaParserSource.DARK_SCANS, "darkscans.net", 18) {
override val listUrl = "mangas/" override val listUrl = "mangas/"
override val tagPrefix = "mangas-genre/" override val tagPrefix = "mangas-genre/"
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
val fullUrl = chapter.url.toAbsoluteUrl(domain)
val doc = webClient.httpGet(fullUrl).parseHtml()
val chapterProtector = doc.getElementById("chapter-protector-data")
if (chapterProtector == null) {
throw if (doc.selectFirst(selectRequiredLogin) != null) {
AuthRequiredException(source)
} else {
val root = doc.body().selectFirst(selectBodyPage) ?: throw ParseException(
"No image found, try to log in",
fullUrl,
)
return root.select(selectPage).map { div ->
val img = div.selectFirstOrThrow("img")
val url = img.src()?.toRelativeUrl(domain) ?: div.parseFailed("Image src not found")
MangaPage(
id = generateUid(url),
url = url.replace("http:", "https:"),
preview = null,
source = source,
)
}
}
} else {
val chapterProtectorHtml = chapterProtector.attr("src")
.takeIf { it.startsWith("data:text/javascript;base64,") }
?.substringAfter("data:text/javascript;base64,")
?.let {
Base64.getDecoder().decode(it).decodeToString()
}
?: chapterProtector.html()
val password = chapterProtectorHtml.substringAfter("wpmangaprotectornonce='").substringBefore("';")
val chapterData = JSONObject(
chapterProtectorHtml.substringAfter("chapter_data='").substringBefore("';").replace("\\/", "/"),
)
val unsaltedCiphertext = context.decodeBase64(chapterData.getString("ct"))
val salt = chapterData.getString("s").toString().decodeHex()
val ciphertext = "Salted__".toByteArray(Charsets.UTF_8) + salt + unsaltedCiphertext
val rawImgArray = CryptoAES(context).decrypt(context.encodeBase64(ciphertext), password)
val imgArrayString = rawImgArray.filterNot { c -> c == '[' || c == ']' || c == '\\' || c == '"' }
return imgArrayString.split(",").map { url ->
MangaPage(
id = generateUid(url),
url = url.replace("http:", "https:"),
preview = null,
source = source,
)
}
}
}
private fun String.decodeHex(): ByteArray {
check(length % 2 == 0) { "Must have an even length" }
return chunked(2).map { it.toInt(16).toByte() }.toByteArray()
}
} }

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("ELITEMANGA", "EliteManga", "en") @MangaSourceParser("ELITEMANGA", "EliteManga", "en")
internal class EliteManga(context: MangaLoaderContext) : internal class EliteManga(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.ELITEMANGA, "www.redmanga.org") MadaraParser(context, MangaParserSource.ELITEMANGA, "www.beinmanga.com")

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("GOODGIRLS", "GoodGirls", "en") @MangaSourceParser("GOODGIRLS", "GoodGirls", "en")
internal class GoodGirls(context: MangaLoaderContext) : internal class GoodGirls(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.GOODGIRLS, "goodgirls.moe", 10) { MadaraParser(context, MangaParserSource.GOODGIRLS, "goodgirls.moe", 10) {

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("LUXMANGA", "LuxManga", "en") @MangaSourceParser("LUXMANGA", "LuxManga", "en")
internal class LuxManga(context: MangaLoaderContext) : internal class LuxManga(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.LUXMANGA, "luxmanga.net") MadaraParser(context, MangaParserSource.LUXMANGA, "luxmanga.net")

@ -6,10 +6,10 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken @Broken // Redirect to @MANGAREAD
@MangaSourceParser("MANGAEFFECT", "MangaEffect", "en") @MangaSourceParser("MANGAEFFECT", "MangaEffect", "en")
internal class MangaEffect(context: MangaLoaderContext) : internal class MangaEffect(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.MANGAEFFECT, "mangaeffect.com") { MadaraParser(context, MangaParserSource.MANGAEFFECT, "www.mangaread.org") {
override val datePattern = "dd.MM.yyyy" override val datePattern = "dd.MM.yyyy"
override val withoutAjax = true override val withoutAjax = true
} }

@ -6,6 +6,6 @@ import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGAHALL", "MangaHall", "en", ContentType.HENTAI) @MangaSourceParser("MANGAHALL", "MangaHolic", "en", ContentType.HENTAI)
internal class MangaHall(context: MangaLoaderContext) : internal class MangaHall(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.MANGAHALL, "mangageek.org", 24) MadaraParser(context, MangaParserSource.MANGAHALL, "mangaholic.org", 24)

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("MANGA_QUEEN", "MangaQueen", "en") @MangaSourceParser("MANGA_QUEEN", "MangaQueen", "en")
internal class MangaQueen(context: MangaLoaderContext) : internal class MangaQueen(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.MANGA_QUEEN, "mangaqueen.com", 16) MadaraParser(context, MangaParserSource.MANGA_QUEEN, "mangaqueen.com", 16)

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("MANHWANEW", "ManhwaNew", "en") @MangaSourceParser("MANHWANEW", "ManhwaNew", "en")
internal class ManhwaNew(context: MangaLoaderContext) : internal class ManhwaNew(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.MANHWANEW, "manhwanew.com") { MadaraParser(context, MangaParserSource.MANHWANEW, "manhwanew.com") {

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("MORTALSGROOVE", "MortalsGroove", "en") @MangaSourceParser("MORTALSGROOVE", "MortalsGroove", "en")
internal class MortalsGroove(context: MangaLoaderContext) : internal class MortalsGroove(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.MORTALSGROOVE, "mortalsgroove.com") { MadaraParser(context, MangaParserSource.MORTALSGROOVE, "mortalsgroove.com") {

@ -0,0 +1,13 @@
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("MSYPUBLISHER", "MsyPublisher", "en")
internal class MsyPublisher(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.MSYPUBLISHER, "msypublisher.com", 20) {
override val listUrl = "manhua/"
override val selectGenre = "manhua-genre/"
}

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("NEWMANHUA", "NewManhua", "en") @MangaSourceParser("NEWMANHUA", "NewManhua", "en")
internal class NewManhua(context: MangaLoaderContext) : internal class NewManhua(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.NEWMANHUA, "newmanhua.com", pageSize = 16) MadaraParser(context, MangaParserSource.NEWMANHUA, "newmanhua.com", pageSize = 16)

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("NVMANGA", "NvManga", "en") @MangaSourceParser("NVMANGA", "NvManga", "en")
internal class NvManga(context: MangaLoaderContext) : internal class NvManga(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.NVMANGA, "1manhwa.com") { MadaraParser(context, MangaParserSource.NVMANGA, "1manhwa.com") {

@ -13,7 +13,7 @@ import java.util.Collections.emptyMap
@MangaSourceParser("RESETSCANS", "ResetScans", "en") @MangaSourceParser("RESETSCANS", "ResetScans", "en")
internal class ResetScans(context: MangaLoaderContext) : internal class ResetScans(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.RESETSCANS, "reset-scans.co", 18) { MadaraParser(context, MangaParserSource.RESETSCANS, "rspro.xyz", 18) {
override val datePattern = "MMM dd" override val datePattern = "MMM dd"
override suspend fun loadChapters(mangaUrl: String, document: Document): List<MangaChapter> { override suspend fun loadChapters(mangaUrl: String, document: Document): List<MangaChapter> {

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("EMPERORSCAN", "EmperorScan", "es") @MangaSourceParser("EMPERORSCAN", "EmperorScan", "es")
internal class EmperorScan(context: MangaLoaderContext) : internal class EmperorScan(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.EMPERORSCAN, "emperormanga.net") MadaraParser(context, MangaParserSource.EMPERORSCAN, "seriesemperor.com")

@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("KNIGHTNOSCANLATION", "TwoBlueScans", "es") @MangaSourceParser("KNIGHTNOSCANLATION", "TwoBlueScans", "es")
internal class KnightnoScanlation(context: MangaLoaderContext) : internal class KnightnoScanlation(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.KNIGHTNOSCANLATION, "lectorkns.com") { MadaraParser(context, MangaParserSource.KNIGHTNOSCANLATION, "lectorkns.eyudud.net") {
override val listUrl = "sr/" override val listUrl = "sr/"
override val tagPrefix = "generos/" override val tagPrefix = "generos/"
} }

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.es 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken // Not dead but changed template
@MangaSourceParser("KOINOBORISCAN", "KoinoboriScan", "es") @MangaSourceParser("KOINOBORISCAN", "KoinoboriScan", "es")
internal class KoinoboriScan(context: MangaLoaderContext) : internal class KoinoboriScan(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.KOINOBORISCAN, "koinoboriscan.com") { MadaraParser(context, MangaParserSource.KOINOBORISCAN, "koinoboriscan.com") {

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.es 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("RIGHTDARKSCAN", "RightDarkScan", "es") @MangaSourceParser("RIGHTDARKSCAN", "RightDarkScan", "es")
internal class RightdarkScan(context: MangaLoaderContext) : internal class RightdarkScan(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.RIGHTDARKSCAN, "rsdleft.com", 10) MadaraParser(context, MangaParserSource.RIGHTDARKSCAN, "rsdleft.com", 10)

@ -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("TECNOPROJECTS", "TecnoProjects", "es")
internal class TecnoProjects(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.TECNOPROJECTS, "tecnoprojects.com") {
override val datePattern = "dd 'de' MMMM 'de' yyyy"
}

@ -1,5 +1,6 @@
package org.koitharu.kotatsu.parsers.site.madara.fr package org.koitharu.kotatsu.parsers.site.madara.fr
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaChapter
@ -8,6 +9,7 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
import org.koitharu.kotatsu.parsers.util.* import org.koitharu.kotatsu.parsers.util.*
@Broken
@MangaSourceParser("FRSCAN", "Fr-Scan", "fr") @MangaSourceParser("FRSCAN", "Fr-Scan", "fr")
internal class FrScan(context: MangaLoaderContext) : internal class FrScan(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.FRSCAN, "fr-scan.com") { MadaraParser(context, MangaParserSource.FRSCAN, "fr-scan.com") {

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.fr package org.koitharu.kotatsu.parsers.site.madara.fr
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("READERGEN", "ReaderGen", "fr") @MangaSourceParser("READERGEN", "ReaderGen", "fr")
internal class Readergen(context: MangaLoaderContext) : internal class Readergen(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.READERGEN, "fr.readergen.fr", 18) MadaraParser(context, MangaParserSource.READERGEN, "fr.readergen.fr", 18)

@ -8,7 +8,7 @@ import java.util.*
@MangaSourceParser("SHINIGAMI", "Shinigami", "id") @MangaSourceParser("SHINIGAMI", "Shinigami", "id")
internal class Shinigami(context: MangaLoaderContext) : internal class Shinigami(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.SHINIGAMI, "shinigami03.com", 10) { MadaraParser(context, MangaParserSource.SHINIGAMI, "shinigami05.com", 10) {
override val tagPrefix = "genre/" override val tagPrefix = "genre/"
override val listUrl = "series/" override val listUrl = "series/"
override val sourceLocale: Locale = Locale.ENGLISH override val sourceLocale: Locale = Locale.ENGLISH

@ -0,0 +1,13 @@
package org.koitharu.kotatsu.parsers.site.madara.ja
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("RAWMANGA", "RawManga", "ja")
internal class RawManga(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.RAWMANGA, "rawmanga.su", 24) {
override val listUrl = "r/"
override val selectPage = "div.mg-item"
}

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.pt 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("ARGOSCOMICS", "ArgosComics", "pt") @MangaSourceParser("ARGOSCOMICS", "ArgosComics", "pt")
internal class ArgosComics(context: MangaLoaderContext) : internal class ArgosComics(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.ARGOSCOMICS, "argoscomics.com.br") { MadaraParser(context, MangaParserSource.ARGOSCOMICS, "argoscomics.com.br") {

@ -6,9 +6,9 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken @Broken // Not dead, changed template
@MangaSourceParser("CERISE_SCANS", "CeriseScans", "pt") @MangaSourceParser("CERISE_SCANS", "CeriseScans", "pt")
internal class CeriseScans(context: MangaLoaderContext) : internal class CeriseScans(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.CERISE_SCANS, "cerisetoon.com") { MadaraParser(context, MangaParserSource.CERISE_SCANS, "cerise.leitorweb.com") {
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
} }

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.pt 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("MOMONOHANASCAN", "MomonohanaScan", "pt") @MangaSourceParser("MOMONOHANASCAN", "MomonohanaScan", "pt")
internal class MomonohanaScan(context: MangaLoaderContext) : internal class MomonohanaScan(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.MOMONOHANASCAN, "momonohanascan.com", 10) { MadaraParser(context, MangaParserSource.MOMONOHANASCAN, "momonohanascan.com", 10) {

@ -1,14 +1,13 @@
package org.koitharu.kotatsu.parsers.site.madara.pt 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("MOONWITCHINLOVESCAN", "MoonWitchinLoveScan", "pt") @MangaSourceParser("MOONWITCHINLOVESCAN", "MoonWitchinScan", "pt")
internal class Moonwitchinlovescan(context: MangaLoaderContext) : internal class Moonwitchinlovescan(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.MOONWITCHINLOVESCAN, "moonwitchinlovescan.com", 10) { MadaraParser(context, MangaParserSource.MOONWITCHINLOVESCAN, "moonwitchscan.com.br", 10) {
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
} }

@ -9,6 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken // Not dead, changed template @Broken // Not dead, changed template
@MangaSourceParser("SINENSISSCANS", "SinensisScans", "pt") @MangaSourceParser("SINENSISSCANS", "SinensisScans", "pt")
internal class SinensisScans(context: MangaLoaderContext) : internal class SinensisScans(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.SINENSISSCANS, "sinensistoon.com") { MadaraParser(context, MangaParserSource.SINENSISSCANS, "sinensis.leitorweb.com") {
override val datePattern: String = "dd/MM/yyyy" override val datePattern: String = "dd/MM/yyyy"
} }

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.madara.pt 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("VILLAINESSSCAN", "VillainessScan", "pt", ContentType.HENTAI) @MangaSourceParser("VILLAINESSSCAN", "VillainessScan", "pt", ContentType.HENTAI)
internal class VillainessScan(context: MangaLoaderContext) : internal class VillainessScan(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.VILLAINESSSCAN, "villainessscan.xyz", pageSize = 10) { MadaraParser(context, MangaParserSource.VILLAINESSSCAN, "villainessscan.xyz", pageSize = 10) {

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.ru package org.koitharu.kotatsu.parsers.site.madara.ru
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken
@MangaSourceParser("BEST_MANGA", "BestManga", "ru") @MangaSourceParser("BEST_MANGA", "BestManga", "ru")
internal class BestManga(context: MangaLoaderContext) : internal class BestManga(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.BEST_MANGA, "bestmanga.club") { MadaraParser(context, MangaParserSource.BEST_MANGA, "bestmanga.club") {

@ -2,12 +2,13 @@ package org.koitharu.kotatsu.parsers.site.madara.th
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser 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.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("KINGS_MANGA", "KingsManga", "th") @MangaSourceParser("KINGS_MANGA", "SuperDoujin", "th", ContentType.HENTAI)
internal class KingsManga(context: MangaLoaderContext) : internal class KingsManga(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.KINGS_MANGA, "www.kings-manga.co") { MadaraParser(context, MangaParserSource.KINGS_MANGA, "www.superdoujin.org") {
override val postReq = true override val postReq = true
override val datePattern = "d MMMM yyyy" override val datePattern = "d MMMM yyyy"
} }

@ -1,13 +1,16 @@
package org.koitharu.kotatsu.parsers.site.madara.th package org.koitharu.kotatsu.parsers.site.madara.th
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser 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.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("NEKOPOST", "NekoPost", "th") @Broken // Redirect to @KINGS_MANGA
@MangaSourceParser("NEKOPOST", "NekoPost", "th", ContentType.HENTAI)
internal class NekoPost(context: MangaLoaderContext) : internal class NekoPost(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.NEKOPOST, "www.nekopost.co") { MadaraParser(context, MangaParserSource.NEKOPOST, "www.superdoujin.org") {
override val postReq = true override val postReq = true
override val datePattern = "d MMMM yyyy" override val datePattern = "d MMMM yyyy"
} }

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.madara.tr 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@Broken // Redirect to @WEBTOONHATTI
@MangaSourceParser("CLOVERMANGA", "CloverManga", "tr") @MangaSourceParser("CLOVERMANGA", "CloverManga", "tr")
internal class CloverManga(context: MangaLoaderContext) : internal class CloverManga(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.CLOVERMANGA, "clover-manga.com", 20) MadaraParser(context, MangaParserSource.CLOVERMANGA, "webtoonhatti.net", 20)

@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("LUNASCANS", "LunaScans", "tr", ContentType.HENTAI) @MangaSourceParser("LUNASCANS", "LunaScans", "tr", ContentType.HENTAI)
internal class LunaScans(context: MangaLoaderContext) : internal class LunaScans(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.LUNASCANS, "lunascans.org") { MadaraParser(context, MangaParserSource.LUNASCANS, "tuhafscans.com") {
override val postReq = true override val postReq = true
override val datePattern = "dd MMMM yyyy" override val datePattern = "dd MMMM yyyy"
} }

@ -6,9 +6,9 @@ import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("HENTAIVNFIT", "HentaiVnFit", "vi", ContentType.HENTAI) @MangaSourceParser("HENTAIVNFIT", "HentaiVn.vin", "vi", ContentType.HENTAI)
internal class HentaiVnCafe(context: MangaLoaderContext) : internal class HentaiVnFit(context: MangaLoaderContext) :
MadaraParser(context, MangaParserSource.HENTAIVNFIT, "hentaivn.fit", 24) { MadaraParser(context, MangaParserSource.HENTAIVNFIT, "hentaivn.vin", 24) {
override val listUrl = "truyen-hentai/" override val listUrl = "truyen-hentai/"
override val tagPrefix = "the-loai/" override val tagPrefix = "the-loai/"
override val datePattern = "dd/MM/yyyy" override val datePattern = "dd/MM/yyyy"

@ -10,7 +10,7 @@ import org.koitharu.kotatsu.parsers.util.*
@MangaSourceParser("MANJANOON", "Manjanoon", "ar") @MangaSourceParser("MANJANOON", "Manjanoon", "ar")
internal class Manjanoon(context: MangaLoaderContext) : internal class Manjanoon(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.MANJANOON, "manjanoon.xyz", pageSize = 21, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.MANJANOON, "manjanoon.com", pageSize = 21, searchPageSize = 10) {
override suspend fun getDetails(manga: Manga): Manga { override suspend fun getDetails(manga: Manga): Manga {
val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()

@ -10,10 +10,10 @@ import java.text.DateFormat
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
@Broken @Broken // Not dead but changed template
@MangaSourceParser("VEXMANGA", "VexManga", "ar") @MangaSourceParser("VEXMANGA", "VexManga", "ar")
internal class VexManga(context: MangaLoaderContext) : internal class VexManga(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.VEXMANGA, "vexmanga.com", pageSize = 10, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.VEXMANGA, "vortexscans.org", pageSize = 10, searchPageSize = 10) {
override val selectMangaList = ".listarchives .latest-recom" override val selectMangaList = ".listarchives .latest-recom"
override val selectChapter = ".ulChapterList > a" override val selectChapter = ".ulChapterList > a"
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("DRAKESCANS", "DrakeComic", "en") @MangaSourceParser("DRAKESCANS", "DrakeComic", "en")
internal class DrakeScans(context: MangaLoaderContext) : internal class DrakeScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.DRAKESCANS, "drakecomic.com", 20, 10) MangaReaderParser(context, MangaParserSource.DRAKESCANS, "drakecomic.org", 20, 10)

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("ELARCPAGE", "ElarcPage", "en") @MangaSourceParser("ELARCPAGE", "ElarcPage", "en")
internal class Elarcpage(context: MangaLoaderContext) : internal class Elarcpage(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.ELARCPAGE, "elarctoon.com", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.ELARCPAGE, "elarctoon.com", pageSize = 20, searchPageSize = 10) {

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("EROSSCANS", "ErosScans", "en") @MangaSourceParser("EROSSCANS", "ErosScans", "en")
internal class ErosScans(context: MangaLoaderContext) : internal class ErosScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.EROSSCANS, "erosscans.xyz", pageSize = 20, searchPageSize = 10) MangaReaderParser(context, MangaParserSource.EROSSCANS, "eros-scans.xyz", pageSize = 20, searchPageSize = 10)

@ -7,6 +7,6 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("FURYMANGA", "KingOfScans", "en") @MangaSourceParser("FURYMANGA", "KingOfScans", "en")
internal class FuryManga(context: MangaLoaderContext) : internal class FuryManga(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.FURYMANGA, "kingofscans.com", pageSize = 30, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.FURYMANGA, "myshojo.com", pageSize = 30, searchPageSize = 10) {
override val listUrl = "/comics" override val listUrl = "/comics"
} }

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("MANHWA_FREAK", "ManhwaFreak", "en") @MangaSourceParser("MANHWA_FREAK", "ManhwaFreak", "en")
internal class ManhwaFreak(context: MangaLoaderContext) : internal class ManhwaFreak(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.MANHWA_FREAK, "manhwafreak.xyz", pageSize = 30, searchPageSize = 42) MangaReaderParser(context, MangaParserSource.MANHWA_FREAK, "manhwafreak.xyz", pageSize = 30, searchPageSize = 42)

@ -1,5 +1,6 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.ContentType 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.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("MANHWALOVER", "ManhwaLover", "en", ContentType.HENTAI) @MangaSourceParser("MANHWALOVER", "ManhwaLover", "en", ContentType.HENTAI)
internal class ManhwaLover(context: MangaLoaderContext) : internal class ManhwaLover(context: MangaLoaderContext) :
MangaReaderParser( MangaReaderParser(

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("MANJANOON_EN", "NoonScan.net", "en") @MangaSourceParser("MANJANOON_EN", "NoonScan.net", "en")
internal class Manjanoon(context: MangaLoaderContext) : internal class Manjanoon(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.MANJANOON_EN, "noonscan.net", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.MANJANOON_EN, "noonscan.net", pageSize = 20, searchPageSize = 10) {

@ -5,8 +5,8 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("RAISCANS", "RaiScans", "en") @MangaSourceParser("RAISCANS", "KenScans", "en")
internal class RaiScans(context: MangaLoaderContext) : internal class RaiScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.RAISCANS, "kenmanga.com", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.RAISCANS, "kenscans.com", pageSize = 20, searchPageSize = 10) {
override val listUrl = "/series" override val listUrl = "/series"
} }

@ -1,12 +1,14 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken // Redirect to @FLIXSCANS
@MangaSourceParser("SNOWSCANS", "SnowScans", "en") @MangaSourceParser("SNOWSCANS", "SnowScans", "en")
internal class SnowScans(context: MangaLoaderContext) : internal class SnowScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.SNOWSCANS, "snowscans.com", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.SNOWSCANS, "flixscans.net", pageSize = 20, searchPageSize = 10) {
override val listUrl = "/series" override val listUrl = "/series"
} }

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("SURYASCANS", "SuryaScans", "en") @MangaSourceParser("SURYASCANS", "SuryaScans", "en")
internal class SuryaScans(context: MangaLoaderContext) : internal class SuryaScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.SURYASCANS, "suryacomics.com", pageSize = 5, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.SURYASCANS, "suryacomics.com", pageSize = 5, searchPageSize = 10) {

@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("TECNOSCANS", "TecnoScans", "en") @MangaSourceParser("TECNOSCANS", "TecnoScans", "en")
internal class TecnoScans(context: MangaLoaderContext) : internal class TecnoScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.TECNOSCANS, "olyscans.xyz", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.TECNOSCANS, "oliosscans.xyz", pageSize = 20, searchPageSize = 10) {
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = super.filterCapabilities.copy( get() = super.filterCapabilities.copy(
isTagsExclusionSupported = false, isTagsExclusionSupported = false,

@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("VARNASCAN", "VarnaScan", "en") @MangaSourceParser("VARNASCAN", "VarnaScan", "en")
internal class VarnaScan(context: MangaLoaderContext) : internal class VarnaScan(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.VARNASCAN, "varnascan.com", pageSize = 20, searchPageSize = 10) MangaReaderParser(context, MangaParserSource.VARNASCAN, "varnascan.net", pageSize = 20, searchPageSize = 10)

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("YDCOMICS", "YdComics", "en") @MangaSourceParser("YDCOMICS", "YdComics", "en")
internal class YdComics(context: MangaLoaderContext) : internal class YdComics(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.YDCOMICS, "yd-comics.com", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.YDCOMICS, "yd-comics.com", pageSize = 20, searchPageSize = 10) {

@ -8,7 +8,13 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("INARIPIKAV", "InariPikav", "es") @MangaSourceParser("INARIPIKAV", "InariPikav", "es")
internal class InariPikav(context: MangaLoaderContext) : internal class InariPikav(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.INARIPIKAV, "inaripikav.org", pageSize = 10, searchPageSize = 10) { MangaReaderParser(
context,
MangaParserSource.INARIPIKAV,
"inarimanga.cooksu.net",
pageSize = 10,
searchPageSize = 10,
) {
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = super.filterCapabilities.copy( get() = super.filterCapabilities.copy(
isTagsExclusionSupported = false, isTagsExclusionSupported = false,

@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("UKIYOTOON", "UkiyoToon", "es") @MangaSourceParser("UKIYOTOON", "UkiyoToon", "es")
internal class UkiyoToon(context: MangaLoaderContext) : internal class UkiyoToon(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.UKIYOTOON, "ukiyotoon.com", 30, 10) { MangaReaderParser(context, MangaParserSource.UKIYOTOON, "nakamatoon.com", 30, 10) {
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = super.filterCapabilities.copy( get() = super.filterCapabilities.copy(
isTagsExclusionSupported = false, isTagsExclusionSupported = false,

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.mangareader.fr package org.koitharu.kotatsu.parsers.site.mangareader.fr
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("LUNARHENTAI", "GloryScans", "fr") @MangaSourceParser("LUNARHENTAI", "GloryScans", "fr")
internal class LunarHentai(context: MangaLoaderContext) : internal class LunarHentai(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.LUNARHENTAI, "gloryscans.fr", pageSize = 40, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.LUNARHENTAI, "gloryscans.fr", pageSize = 40, searchPageSize = 10) {

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.mangareader.fr package org.koitharu.kotatsu.parsers.site.mangareader.fr
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("VFSCAN", "VfScan", "fr") @MangaSourceParser("VFSCAN", "VfScan", "fr")
internal class VfScan(context: MangaLoaderContext) : internal class VfScan(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.VFSCAN, "www.vfscan.net", pageSize = 18, searchPageSize = 18) { MangaReaderParser(context, MangaParserSource.VFSCAN, "www.vfscan.net", pageSize = 18, searchPageSize = 18) {

@ -1,13 +1,20 @@
package org.koitharu.kotatsu.parsers.site.mangareader.id package org.koitharu.kotatsu.parsers.site.mangareader.id
import org.koitharu.kotatsu.parsers.Broken import org.json.JSONObject
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import org.koitharu.kotatsu.parsers.util.domain
import org.koitharu.kotatsu.parsers.util.generateUid
import org.koitharu.kotatsu.parsers.util.parseHtml
import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl
import java.util.ArrayList
import java.util.Base64
@Broken
@MangaSourceParser("COMICASO", "Comicaso", "id") @MangaSourceParser("COMICASO", "Comicaso", "id")
internal class Comicaso(context: MangaLoaderContext) : internal class Comicaso(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.COMICASO, "comicaso.id", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.COMICASO, "comicaso.id", pageSize = 20, searchPageSize = 10) {
@ -17,4 +24,38 @@ internal class Comicaso(context: MangaLoaderContext) :
get() = super.filterCapabilities.copy( get() = super.filterCapabilities.copy(
isTagsExclusionSupported = false, isTagsExclusionSupported = false,
) )
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
val chapterUrl = chapter.url.toAbsoluteUrl(domain)
val docs = webClient.httpGet(chapterUrl).parseHtml()
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
}
}
}
val images = JSONObject(decode.substringAfter('(').substringBeforeLast(')'))
.getJSONArray("sources")
.getJSONObject(0)
.getJSONArray("images")
val pages = ArrayList<MangaPage>(images.length())
for (i in 0 until images.length()) {
pages.add(
MangaPage(
id = generateUid(images.getString(i)),
url = images.getString(i).replace("http:", "https:"),
preview = null,
source = source,
),
)
}
return pages
}
} }

@ -9,7 +9,7 @@ import java.util.*
@MangaSourceParser("COSMIC_SCANS", "CosmicScans.id", "id") @MangaSourceParser("COSMIC_SCANS", "CosmicScans.id", "id")
internal class CosmicScans(context: MangaLoaderContext) : internal class CosmicScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.COSMIC_SCANS, "cosmicscans.id", pageSize = 30, searchPageSize = 30) { MangaReaderParser(context, MangaParserSource.COSMIC_SCANS, "cosmic1.co", pageSize = 30, searchPageSize = 30) {
override val sourceLocale: Locale = Locale.ENGLISH override val sourceLocale: Locale = Locale.ENGLISH
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities

@ -0,0 +1,13 @@
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.Locale
@MangaSourceParser("IKIRU", "Ikiru", "id")
internal class Ikiru(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.IKIRU, "ikiru.me", pageSize = 20, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("KOMIKINDO", "KomikIndo", "id") @MangaSourceParser("KOMIKINDO", "KomikIndo", "id")
internal class KomikIndoParser(context: MangaLoaderContext) : internal class KomikIndoParser(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.KOMIKINDO, "komikindo.co", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.KOMIKINDO, "komiksin.id", pageSize = 20, searchPageSize = 10) {
override val datePattern = "MMM d, yyyy" override val datePattern = "MMM d, yyyy"
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = super.filterCapabilities.copy( get() = super.filterCapabilities.copy(

@ -9,6 +9,6 @@ import java.util.*
@MangaSourceParser("KOMIKLOKALCFD", "KomikLokal.mom", "id", ContentType.HENTAI) @MangaSourceParser("KOMIKLOKALCFD", "KomikLokal.mom", "id", ContentType.HENTAI)
internal class KomiklokalCfd(context: MangaLoaderContext) : internal class KomiklokalCfd(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.KOMIKLOKALCFD, "komiklokal.shop", pageSize = 30, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.KOMIKLOKALCFD, "komikmu.fun", pageSize = 30, searchPageSize = 10) {
override val sourceLocale: Locale = Locale.ENGLISH override val sourceLocale: Locale = Locale.ENGLISH
} }

@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("MANHWAINDO", "ManhwaIndo", "id") @MangaSourceParser("MANHWAINDO", "ManhwaIndo", "id")
internal class ManhwaIndoParser(context: MangaLoaderContext) : internal class ManhwaIndoParser(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.MANHWAINDO, "manhwaindo.net", pageSize = 30, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.MANHWAINDO, "www.manhwaindo.st", pageSize = 30, searchPageSize = 10) {
override val datePattern = "MMM d, yyyy" override val datePattern = "MMM d, yyyy"
override val listUrl = "/series" override val listUrl = "/series"
} }

@ -1,5 +1,6 @@
package org.koitharu.kotatsu.parsers.site.mangareader.id 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.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.ContentType
@ -8,6 +9,7 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.util.* import java.util.*
@Broken
@MangaSourceParser("MANHWAPLUS", "ManhwaPlus", "id", ContentType.HENTAI) @MangaSourceParser("MANHWAPLUS", "ManhwaPlus", "id", ContentType.HENTAI)
internal class ManhwaPlus(context: MangaLoaderContext) : internal class ManhwaPlus(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.MANHWAPLUS, "manhwablue.com", 20, 10) { MangaReaderParser(context, MangaParserSource.MANHWAPLUS, "manhwablue.com", 20, 10) {

@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("MASTERKOMIK", "Tenshi", "id") @MangaSourceParser("MASTERKOMIK", "Tenshi", "id")
internal class MasterKomik(context: MangaLoaderContext) : internal class MasterKomik(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.MASTERKOMIK, "tenshi.id", pageSize = 20, searchPageSize = 20) { MangaReaderParser(context, MangaParserSource.MASTERKOMIK, "tenshi.pw", pageSize = 20, searchPageSize = 20) {
override val datePattern = "MMM d, yyyy" override val datePattern = "MMM d, yyyy"
override val listUrl = "/komik" override val listUrl = "/komik"
} }

@ -1,6 +1,5 @@
package org.koitharu.kotatsu.parsers.site.mangareader.th package org.koitharu.kotatsu.parsers.site.mangareader.th
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.ContentType import org.koitharu.kotatsu.parsers.model.ContentType
@ -8,7 +7,6 @@ import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("DOUJIN69", "Doujin69", "th", type = ContentType.HENTAI) @MangaSourceParser("DOUJIN69", "Doujin69", "th", type = ContentType.HENTAI)
internal class Doujin69(context: MangaLoaderContext) : internal class Doujin69(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.DOUJIN69, "doujin69.com", pageSize = 40, searchPageSize = 21) { MangaReaderParser(context, MangaParserSource.DOUJIN69, "doujin69.com", pageSize = 40, searchPageSize = 21) {

@ -1,12 +1,10 @@
package org.koitharu.kotatsu.parsers.site.mangareader.id package org.koitharu.kotatsu.parsers.site.mangareader.th
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("SOMANGA", "SoManga", "id") @MangaSourceParser("SOMANGA", "SoManga", "th")
internal class SoManga(context: MangaLoaderContext) : internal class SoManga(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.SOMANGA, "so-manga.com", pageSize = 5, searchPageSize = 25) { MangaReaderParser(context, MangaParserSource.SOMANGA, "so-manga.com", pageSize = 5, searchPageSize = 25)
override val datePattern = "MMM d, yyyy"
}

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.mangareader.tr package org.koitharu.kotatsu.parsers.site.mangareader.tr
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities import org.koitharu.kotatsu.parsers.model.MangaListFilterCapabilities
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@Broken
@MangaSourceParser("ATHENAMANGA", "AthenaManga", "tr") @MangaSourceParser("ATHENAMANGA", "AthenaManga", "tr")
internal class AthenaManga(context: MangaLoaderContext) : internal class AthenaManga(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.ATHENAMANGA, "athenamanga.com", pageSize = 20, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.ATHENAMANGA, "athenamanga.com", pageSize = 20, searchPageSize = 10) {

@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("NOXSCANS", "NoxScans", "tr") @MangaSourceParser("NOXSCANS", "NoxScans", "tr")
internal class NoxScans(context: MangaLoaderContext) : internal class NoxScans(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.NOXSCANS, "noxscans.com", pageSize = 30, searchPageSize = 20) { MangaReaderParser(context, MangaParserSource.NOXSCANS, "www.noxscans.com", pageSize = 30, searchPageSize = 20) {
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = super.filterCapabilities.copy( get() = super.filterCapabilities.copy(
isTagsExclusionSupported = false, isTagsExclusionSupported = false,

@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
@MangaSourceParser("SUMMERTOON", "SummerToon", "tr") @MangaSourceParser("SUMMERTOON", "SummerToon", "tr")
internal class SummerToon(context: MangaLoaderContext) : internal class SummerToon(context: MangaLoaderContext) :
MangaReaderParser(context, MangaParserSource.SUMMERTOON, "summertoon.biz", pageSize = 10, searchPageSize = 10) { MangaReaderParser(context, MangaParserSource.SUMMERTOON, "summertoon.co", pageSize = 10, searchPageSize = 10) {
override val filterCapabilities: MangaListFilterCapabilities override val filterCapabilities: MangaListFilterCapabilities
get() = super.filterCapabilities.copy( get() = super.filterCapabilities.copy(
isTagsExclusionSupported = false, isTagsExclusionSupported = false,

@ -129,7 +129,7 @@ internal abstract class MmrcmsParser(
coverUrl = div.selectFirst("img")?.src().orEmpty(), coverUrl = div.selectFirst("img")?.src().orEmpty(),
title = div.selectFirst("div.media-body h5")?.text().orEmpty(), title = div.selectFirst("div.media-body h5")?.text().orEmpty(),
altTitle = null, altTitle = null,
rating = div.selectFirst("span")?.ownText()?.toFloat()?.div(5f) ?: RATING_UNKNOWN, rating = div.selectFirst("span")?.ownText()?.toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN,
tags = emptySet(), tags = emptySet(),
author = null, author = null,
state = null, state = null,

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.mmrcms.fr package org.koitharu.kotatsu.parsers.site.mmrcms.fr
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser
import java.util.* import java.util.*
@Broken
@MangaSourceParser("BENTOSCAN", "BentoScan", "fr") @MangaSourceParser("BENTOSCAN", "BentoScan", "fr")
internal class BentoScan(context: MangaLoaderContext) : internal class BentoScan(context: MangaLoaderContext) :
MmrcmsParser(context, MangaParserSource.BENTOSCAN, "bentoscan.com") { MmrcmsParser(context, MangaParserSource.BENTOSCAN, "bentoscan.com") {

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.mmrcms.fr package org.koitharu.kotatsu.parsers.site.mmrcms.fr
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser
import java.util.* import java.util.*
@Broken
@MangaSourceParser("MANGA_SCAN", "MangaScan", "fr") @MangaSourceParser("MANGA_SCAN", "MangaScan", "fr")
internal class MangaScan(context: MangaLoaderContext) : internal class MangaScan(context: MangaLoaderContext) :
MmrcmsParser(context, MangaParserSource.MANGA_SCAN, "mangascan-fr.net") { MmrcmsParser(context, MangaParserSource.MANGA_SCAN, "mangascan-fr.net") {

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.mmrcms.fr package org.koitharu.kotatsu.parsers.site.mmrcms.fr
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser
import java.util.* import java.util.*
@Broken
@MangaSourceParser("SCANMANGAVF_WS", "ScanMangaVf.ws", "fr") @MangaSourceParser("SCANMANGAVF_WS", "ScanMangaVf.ws", "fr")
internal class ScanMangaVfWs(context: MangaLoaderContext) : internal class ScanMangaVfWs(context: MangaLoaderContext) :
MmrcmsParser(context, MangaParserSource.SCANMANGAVF_WS, "scanmanga-vf.me") { MmrcmsParser(context, MangaParserSource.SCANMANGAVF_WS, "scanmanga-vf.me") {

@ -1,11 +1,13 @@
package org.koitharu.kotatsu.parsers.site.mmrcms.id package org.koitharu.kotatsu.parsers.site.mmrcms.id
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser
import java.util.* import java.util.*
@Broken
@MangaSourceParser("KOMIKID", "KomikId", "id") @MangaSourceParser("KOMIKID", "KomikId", "id")
internal class KomikId(context: MangaLoaderContext) : internal class KomikId(context: MangaLoaderContext) :
MmrcmsParser(context, MangaParserSource.KOMIKID, "komikid.com") { MmrcmsParser(context, MangaParserSource.KOMIKID, "komikid.com") {

@ -113,7 +113,7 @@ internal abstract class OtakuSanctuaryParser(
coverUrl = div.selectFirst("img")?.src().orEmpty(), coverUrl = div.selectFirst("img")?.src().orEmpty(),
title = div.selectFirst("h4")?.text().orEmpty(), title = div.selectFirst("h4")?.text().orEmpty(),
altTitle = null, altTitle = null,
rating = div.selectFirst(".rating")?.ownText()?.toFloat()?.div(10f) ?: RATING_UNKNOWN, rating = div.selectFirst(".rating")?.ownText()?.toFloatOrNull()?.div(10f) ?: RATING_UNKNOWN,
tags = emptySet(), tags = emptySet(),
author = null, author = null,
state = null, state = null,

@ -13,7 +13,7 @@ import org.koitharu.kotatsu.parsers.util.*
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.zip.ZipInputStream import java.util.zip.ZipInputStream
@Broken // Not dead but totally changed structure @Broken // Not dead but changed template
@MangaSourceParser("RANDOMSCANS", "LuratoonScan", "pt") @MangaSourceParser("RANDOMSCANS", "LuratoonScan", "pt")
internal class LuratoonScansParser(context: MangaLoaderContext) : internal class LuratoonScansParser(context: MangaLoaderContext) :
SinglePageMangaParser(context, MangaParserSource.RANDOMSCANS), SinglePageMangaParser(context, MangaParserSource.RANDOMSCANS),

@ -71,7 +71,7 @@ internal class MangaOnline(context: MangaLoaderContext) : PagedMangaParser(conte
title = div.selectLast(".data h3")?.text().orEmpty(), title = div.selectLast(".data h3")?.text().orEmpty(),
coverUrl = div.selectFirst("img")?.src().orEmpty(), coverUrl = div.selectFirst("img")?.src().orEmpty(),
altTitle = null, altTitle = null,
rating = div.selectFirst(".rating")?.ownText()?.toFloat()?.div(10f) ?: RATING_UNKNOWN, rating = div.selectFirst(".rating")?.ownText()?.toFloatOrNull()?.div(10f) ?: RATING_UNKNOWN,
tags = emptySet(), tags = emptySet(),
description = null, description = null,
state = null, state = null,

@ -113,7 +113,7 @@ internal abstract class SinmhParser(
coverUrl = div.selectFirst("img")?.src().orEmpty(), coverUrl = div.selectFirst("img")?.src().orEmpty(),
title = div.selectFirst("p > a, h3 > a")?.text().orEmpty(), title = div.selectFirst("p > a, h3 > a")?.text().orEmpty(),
altTitle = null, altTitle = null,
rating = div.selectFirst("span.total_votes")?.ownText()?.toFloat()?.div(5f) ?: RATING_UNKNOWN, rating = div.selectFirst("span.total_votes")?.ownText()?.toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN,
tags = emptySet(), tags = emptySet(),
author = null, author = null,
state = null, state = null,
@ -191,7 +191,7 @@ internal abstract class SinmhParser(
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> { override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
val host = webClient.httpGet("/js/config.js".toAbsoluteUrl(domain)).parseRaw().substringAfter("domain\":[\"") val host = webClient.httpGet("/js/config.js".toAbsoluteUrl(domain)).parseRaw().substringAfter("domain\":[\"")
.substringBefore("\"]}") .substringBefore("\"]}").replace("http:", "https:")
val chapterUrl = chapter.url.toAbsoluteUrl(domain) val chapterUrl = chapter.url.toAbsoluteUrl(domain)
val docs = webClient.httpGet(chapterUrl).parseHtml() val docs = webClient.httpGet(chapterUrl).parseHtml()
@ -204,6 +204,8 @@ internal abstract class SinmhParser(
images.map { images.map {
val imageUrl = when { val imageUrl = when {
it.startsWith("https:\\/\\/") -> it.replace("\\", "") it.startsWith("https:\\/\\/") -> it.replace("\\", "")
it.startsWith("http:\\/\\/") -> it.replace("\\", "").replace("http:", "https:")
it.startsWith("\\/") -> host + it.replace("\\", "")
it.startsWith("/") -> "$host$it" it.startsWith("/") -> "$host$it"
else -> "$host/$path$it" else -> "$host/$path$it"
} }

@ -0,0 +1,10 @@
package org.koitharu.kotatsu.parsers.site.sinmh.zh
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.sinmh.SinmhParser
@MangaSourceParser("YKMH", "Ykmh", "zh")
internal class Ykmh(context: MangaLoaderContext) :
SinmhParser(context, MangaParserSource.YKMH, "www.ykmh.net")

@ -56,6 +56,7 @@ internal abstract class WpComicsParser(
@JvmField @JvmField
protected val ongoing: Set<String> = setOf( protected val ongoing: Set<String> = setOf(
"Đang tiến hành", "Đang tiến hành",
"Đang cập nhật",
"Ongoing", "Ongoing",
"Updating", "Updating",
"連載中", "連載中",
@ -64,6 +65,7 @@ internal abstract class WpComicsParser(
@JvmField @JvmField
protected val finished: Set<String> = setOf( protected val finished: Set<String> = setOf(
"Hoàn thành", "Hoàn thành",
"Đã hoàn thành",
"Complete", "Complete",
"Completed", "Completed",
"完結済み", "完結済み",

@ -0,0 +1,10 @@
package org.koitharu.kotatsu.parsers.site.wpcomics.vi
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.wpcomics.WpComicsParser
@MangaSourceParser("TOPTRUYENVIET", "TopTruyen.pro", "vi")
internal class TopTruyenViet(context: MangaLoaderContext) :
WpComicsParser(context, MangaParserSource.TOPTRUYENVIET, "www.toptruyenzz.pro", 36)

@ -1,10 +1,12 @@
package org.koitharu.kotatsu.parsers.site.zeistmanga.es package org.koitharu.kotatsu.parsers.site.zeistmanga.es
import org.koitharu.kotatsu.parsers.Broken
import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.model.MangaParserSource import org.koitharu.kotatsu.parsers.model.MangaParserSource
import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser import org.koitharu.kotatsu.parsers.site.zeistmanga.ZeistMangaParser
@Broken
@MangaSourceParser("AIYUMANGASCANLATION", "AiyuManhua", "es") @MangaSourceParser("AIYUMANGASCANLATION", "AiyuManhua", "es")
internal class AiyuMangaScanlation(context: MangaLoaderContext) : internal class AiyuMangaScanlation(context: MangaLoaderContext) :
ZeistMangaParser(context, MangaParserSource.AIYUMANGASCANLATION, "www.aiyumanhua.com") { ZeistMangaParser(context, MangaParserSource.AIYUMANGASCANLATION, "www.aiyumanhua.com") {

Loading…
Cancel
Save