2
.github/summary.yaml
vendored
2
.github/summary.yaml
vendored
@@ -1 +1 @@
|
||||
total: 1111
|
||||
total: 1118
|
||||
|
||||
@@ -123,7 +123,7 @@ internal class ExHentaiParser(
|
||||
url.addEncodedQueryParameter("next", next.toString())
|
||||
url.addQueryParameter("f_search", filter.toSearchQuery())
|
||||
|
||||
var fCats = filter.types.toFCats()
|
||||
val fCats = filter.types.toFCats()
|
||||
if (fCats != 0) {
|
||||
url.addEncodedQueryParameter("f_cats", (1023 - fCats).toString())
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.cupfox.CupFoxParser
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("OIOIVN", "OioiVn", "vi")
|
||||
internal class OioiVn(context: MangaLoaderContext) :
|
||||
CupFoxParser(context, MangaParserSource.OIOIVN, "oioivn.com")
|
||||
|
||||
@@ -20,7 +20,7 @@ internal class TuMangaOnlineParser(context: MangaLoaderContext) : PagedMangaPars
|
||||
pageSize = 24,
|
||||
) {
|
||||
|
||||
override val configKeyDomain = ConfigKey.Domain("visortmo.com")
|
||||
override val configKeyDomain = ConfigKey.Domain("zonatmo.com")
|
||||
|
||||
override fun onCreateConfig(keys: MutableCollection<ConfigKey<*>>) {
|
||||
super.onCreateConfig(keys)
|
||||
|
||||
@@ -180,7 +180,7 @@ internal class MangaMana(context: MangaLoaderContext) : PagedMangaParser(context
|
||||
altTitle = doc.selectFirst(".mangalist_item_othernames")?.text().orEmpty(),
|
||||
url = href,
|
||||
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,
|
||||
coverUrl = img.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(),
|
||||
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 {
|
||||
val key = it.attr("href").substringAfterLast('=')
|
||||
MangaTag(
|
||||
|
||||
@@ -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.erigu.com")
|
||||
HeanCms(context, MangaParserSource.YUGEN_MANGAS_ES, "lectorikigai.efope.com")
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.*
|
||||
import org.koitharu.kotatsu.parsers.site.heancms.HeanCms
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("PERF_SCAN", "PerfScan", "fr")
|
||||
internal class PerfScan(context: MangaLoaderContext) :
|
||||
HeanCms(context, MangaParserSource.PERF_SCAN, "perf-scan.fr")
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.heancmsalt.HeanCmsAlt
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("MANGAESP", "MangaEsp", "es")
|
||||
internal class MangaEsp(context: MangaLoaderContext) :
|
||||
HeanCmsAlt(context, MangaParserSource.MANGAESP, "mangaesp.net", 15) {
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.hotcomics.HotComicsParser
|
||||
import java.util.Locale
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("TOOMICS", "Toomics", "de")
|
||||
internal class Toomics(context: MangaLoaderContext) :
|
||||
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
|
||||
|
||||
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("ANISASCANS", "AnisaScans", "en")
|
||||
internal class AnisaScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.ANISASCANS, "anisascans.in", 36) {
|
||||
|
||||
@@ -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("BESTMANHUACOM", "BestManhua.com", "en")
|
||||
internal class BestManhuaCom(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.BESTMANHUACOM, "bestmanhua.com", 10) {
|
||||
|
||||
@@ -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("COCOMIC", "CoComic", "en", ContentType.HENTAI)
|
||||
internal class CoComic(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.COCOMIC, "cocomic.co")
|
||||
|
||||
@@ -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("DARKSCAN", "Dark-Scan", "en")
|
||||
internal class DarkScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.DARKSCAN, "dark-scan.com")
|
||||
|
||||
@@ -1,13 +1,90 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.en
|
||||
|
||||
import org.json.JSONObject
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
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.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")
|
||||
internal class DarkScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.DARK_SCANS, "darkscans.net", 18) {
|
||||
override val listUrl = "mangas/"
|
||||
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")
|
||||
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
|
||||
|
||||
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("GOODGIRLS", "GoodGirls", "en")
|
||||
internal class GoodGirls(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.GOODGIRLS, "goodgirls.moe", 10) {
|
||||
|
||||
@@ -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("LUXMANGA", "LuxManga", "en")
|
||||
internal class LuxManga(context: MangaLoaderContext) :
|
||||
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.site.madara.MadaraParser
|
||||
|
||||
@Broken
|
||||
@Broken // Redirect to @MANGAREAD
|
||||
@MangaSourceParser("MANGAEFFECT", "MangaEffect", "en")
|
||||
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 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.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGAHALL", "MangaHall", "en", ContentType.HENTAI)
|
||||
@MangaSourceParser("MANGAHALL", "MangaHolic", "en", ContentType.HENTAI)
|
||||
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
|
||||
|
||||
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("MANGA_QUEEN", "MangaQueen", "en")
|
||||
internal class MangaQueen(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.MANGA_QUEEN, "mangaqueen.com", 16)
|
||||
|
||||
@@ -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("MANHWANEW", "ManhwaNew", "en")
|
||||
internal class ManhwaNew(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.MANHWANEW, "manhwanew.com") {
|
||||
|
||||
@@ -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("MORTALSGROOVE", "MortalsGroove", "en")
|
||||
internal class MortalsGroove(context: MangaLoaderContext) :
|
||||
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
|
||||
|
||||
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("NEWMANHUA", "NewManhua", "en")
|
||||
internal class NewManhua(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.NEWMANHUA, "newmanhua.com", pageSize = 16)
|
||||
|
||||
@@ -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("NVMANGA", "NvManga", "en")
|
||||
internal class NvManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.NVMANGA, "1manhwa.com") {
|
||||
|
||||
@@ -13,7 +13,7 @@ import java.util.Collections.emptyMap
|
||||
|
||||
@MangaSourceParser("RESETSCANS", "ResetScans", "en")
|
||||
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 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")
|
||||
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")
|
||||
internal class KnightnoScanlation(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.KNIGHTNOSCANLATION, "lectorkns.com") {
|
||||
MadaraParser(context, MangaParserSource.KNIGHTNOSCANLATION, "lectorkns.eyudud.net") {
|
||||
override val listUrl = "sr/"
|
||||
override val tagPrefix = "generos/"
|
||||
}
|
||||
|
||||
@@ -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 // Not dead but changed template
|
||||
@MangaSourceParser("KOINOBORISCAN", "KoinoboriScan", "es")
|
||||
internal class KoinoboriScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.KOINOBORISCAN, "koinoboriscan.com") {
|
||||
|
||||
@@ -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("RIGHTDARKSCAN", "RightDarkScan", "es")
|
||||
internal class RightdarkScan(context: MangaLoaderContext) :
|
||||
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
|
||||
|
||||
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
|
||||
@@ -8,6 +9,7 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import org.koitharu.kotatsu.parsers.util.*
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("FRSCAN", "Fr-Scan", "fr")
|
||||
internal class FrScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.FRSCAN, "fr-scan.com") {
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("READERGEN", "ReaderGen", "fr")
|
||||
internal class Readergen(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.READERGEN, "fr.readergen.fr", 18)
|
||||
|
||||
@@ -8,7 +8,7 @@ import java.util.*
|
||||
|
||||
@MangaSourceParser("SHINIGAMI", "Shinigami", "id")
|
||||
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 listUrl = "series/"
|
||||
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
|
||||
|
||||
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("ARGOSCOMICS", "ArgosComics", "pt")
|
||||
internal class ArgosComics(context: MangaLoaderContext) :
|
||||
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.site.madara.MadaraParser
|
||||
|
||||
@Broken
|
||||
@Broken // Not dead, changed template
|
||||
@MangaSourceParser("CERISE_SCANS", "CeriseScans", "pt")
|
||||
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"
|
||||
}
|
||||
|
||||
@@ -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("MOMONOHANASCAN", "MomonohanaScan", "pt")
|
||||
internal class MomonohanaScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.MOMONOHANASCAN, "momonohanascan.com", 10) {
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
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("MOONWITCHINLOVESCAN", "MoonWitchinLoveScan", "pt")
|
||||
|
||||
@MangaSourceParser("MOONWITCHINLOVESCAN", "MoonWitchinScan", "pt")
|
||||
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"
|
||||
}
|
||||
|
||||
@@ -9,6 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
@Broken // Not dead, changed template
|
||||
@MangaSourceParser("SINENSISSCANS", "SinensisScans", "pt")
|
||||
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"
|
||||
}
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.ContentType
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("VILLAINESSSCAN", "VillainessScan", "pt", ContentType.HENTAI)
|
||||
internal class VillainessScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.VILLAINESSSCAN, "villainessscan.xyz", pageSize = 10) {
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("BEST_MANGA", "BestManga", "ru")
|
||||
internal class BestManga(context: MangaLoaderContext) :
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.ContentType
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
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) :
|
||||
MadaraParser(context, MangaParserSource.KINGS_MANGA, "www.kings-manga.co") {
|
||||
MadaraParser(context, MangaParserSource.KINGS_MANGA, "www.superdoujin.org") {
|
||||
override val postReq = true
|
||||
override val datePattern = "d MMMM yyyy"
|
||||
}
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.ContentType
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
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) :
|
||||
MadaraParser(context, MangaParserSource.NEKOPOST, "www.nekopost.co") {
|
||||
MadaraParser(context, MangaParserSource.NEKOPOST, "www.superdoujin.org") {
|
||||
override val postReq = true
|
||||
override val datePattern = "d MMMM yyyy"
|
||||
}
|
||||
|
||||
@@ -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 // Redirect to @WEBTOONHATTI
|
||||
@MangaSourceParser("CLOVERMANGA", "CloverManga", "tr")
|
||||
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)
|
||||
internal class LunaScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.LUNASCANS, "lunascans.org") {
|
||||
MadaraParser(context, MangaParserSource.LUNASCANS, "tuhafscans.com") {
|
||||
override val postReq = true
|
||||
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.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("HENTAIVNFIT", "HentaiVnFit", "vi", ContentType.HENTAI)
|
||||
internal class HentaiVnCafe(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.HENTAIVNFIT, "hentaivn.fit", 24) {
|
||||
@MangaSourceParser("HENTAIVNFIT", "HentaiVn.vin", "vi", ContentType.HENTAI)
|
||||
internal class HentaiVnFit(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaParserSource.HENTAIVNFIT, "hentaivn.vin", 24) {
|
||||
override val listUrl = "truyen-hentai/"
|
||||
override val tagPrefix = "the-loai/"
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
|
||||
@@ -10,7 +10,7 @@ import org.koitharu.kotatsu.parsers.util.*
|
||||
|
||||
@MangaSourceParser("MANJANOON", "Manjanoon", "ar")
|
||||
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 {
|
||||
val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml()
|
||||
|
||||
@@ -10,10 +10,10 @@ import java.text.DateFormat
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
|
||||
@Broken
|
||||
@Broken // Not dead but changed template
|
||||
@MangaSourceParser("VEXMANGA", "VexManga", "ar")
|
||||
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 selectChapter = ".ulChapterList > a"
|
||||
override val filterCapabilities: MangaListFilterCapabilities
|
||||
|
||||
@@ -7,4 +7,4 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
||||
|
||||
@MangaSourceParser("DRAKESCANS", "DrakeComic", "en")
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("ELARCPAGE", "ElarcPage", "en")
|
||||
internal class Elarcpage(context: MangaLoaderContext) :
|
||||
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")
|
||||
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")
|
||||
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"
|
||||
}
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
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.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("MANHWA_FREAK", "ManhwaFreak", "en")
|
||||
internal class ManhwaFreak(context: MangaLoaderContext) :
|
||||
MangaReaderParser(context, MangaParserSource.MANHWA_FREAK, "manhwafreak.xyz", pageSize = 30, searchPageSize = 42)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
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.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("MANHWALOVER", "ManhwaLover", "en", ContentType.HENTAI)
|
||||
internal class ManhwaLover(context: MangaLoaderContext) :
|
||||
MangaReaderParser(
|
||||
|
||||
@@ -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("MANJANOON_EN", "NoonScan.net", "en")
|
||||
internal class Manjanoon(context: MangaLoaderContext) :
|
||||
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.site.mangareader.MangaReaderParser
|
||||
|
||||
@MangaSourceParser("RAISCANS", "RaiScans", "en")
|
||||
@MangaSourceParser("RAISCANS", "KenScans", "en")
|
||||
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"
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
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.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
||||
|
||||
@Broken // Redirect to @FLIXSCANS
|
||||
@MangaSourceParser("SNOWSCANS", "SnowScans", "en")
|
||||
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"
|
||||
}
|
||||
|
||||
@@ -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("SURYASCANS", "SuryaScans", "en")
|
||||
internal class SuryaScans(context: MangaLoaderContext) :
|
||||
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")
|
||||
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
|
||||
get() = super.filterCapabilities.copy(
|
||||
isTagsExclusionSupported = false,
|
||||
|
||||
@@ -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.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
|
||||
|
||||
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
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("YDCOMICS", "YdComics", "en")
|
||||
internal class YdComics(context: MangaLoaderContext) :
|
||||
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")
|
||||
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
|
||||
get() = super.filterCapabilities.copy(
|
||||
isTagsExclusionSupported = false,
|
||||
|
||||
@@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
||||
|
||||
@MangaSourceParser("UKIYOTOON", "UkiyoToon", "es")
|
||||
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
|
||||
get() = super.filterCapabilities.copy(
|
||||
isTagsExclusionSupported = false,
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.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("LUNARHENTAI", "GloryScans", "fr")
|
||||
internal class LunarHentai(context: MangaLoaderContext) :
|
||||
MangaReaderParser(context, MangaParserSource.LUNARHENTAI, "gloryscans.fr", pageSize = 40, searchPageSize = 10) {
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.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("VFSCAN", "VfScan", "fr")
|
||||
internal class VfScan(context: MangaLoaderContext) :
|
||||
MangaReaderParser(context, MangaParserSource.VFSCAN, "www.vfscan.net", pageSize = 18, searchPageSize = 18) {
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
||||
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.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")
|
||||
internal class Comicaso(context: MangaLoaderContext) :
|
||||
MangaReaderParser(context, MangaParserSource.COMICASO, "comicaso.id", pageSize = 20, searchPageSize = 10) {
|
||||
@@ -17,4 +24,38 @@ internal class Comicaso(context: MangaLoaderContext) :
|
||||
get() = super.filterCapabilities.copy(
|
||||
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")
|
||||
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 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")
|
||||
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 filterCapabilities: MangaListFilterCapabilities
|
||||
get() = super.filterCapabilities.copy(
|
||||
|
||||
@@ -9,6 +9,6 @@ import java.util.*
|
||||
|
||||
@MangaSourceParser("KOMIKLOKALCFD", "KomikLokal.mom", "id", ContentType.HENTAI)
|
||||
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
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
||||
|
||||
@MangaSourceParser("MANHWAINDO", "ManhwaIndo", "id")
|
||||
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 listUrl = "/series"
|
||||
}
|
||||
|
||||
@@ -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.ContentType
|
||||
@@ -8,6 +9,7 @@ import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
||||
import java.util.*
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("MANHWAPLUS", "ManhwaPlus", "id", ContentType.HENTAI)
|
||||
internal class ManhwaPlus(context: MangaLoaderContext) :
|
||||
MangaReaderParser(context, MangaParserSource.MANHWAPLUS, "manhwablue.com", 20, 10) {
|
||||
|
||||
@@ -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.id", pageSize = 20, searchPageSize = 20) {
|
||||
MangaReaderParser(context, MangaParserSource.MASTERKOMIK, "tenshi.pw", pageSize = 20, searchPageSize = 20) {
|
||||
override val datePattern = "MMM d, yyyy"
|
||||
override val listUrl = "/komik"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
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.MangaSourceParser
|
||||
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.site.mangareader.MangaReaderParser
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("DOUJIN69", "Doujin69", "th", type = ContentType.HENTAI)
|
||||
internal class Doujin69(context: MangaLoaderContext) :
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
||||
|
||||
@MangaSourceParser("SOMANGA", "SoManga", "id")
|
||||
@MangaSourceParser("SOMANGA", "SoManga", "th")
|
||||
internal class SoManga(context: MangaLoaderContext) :
|
||||
MangaReaderParser(context, MangaParserSource.SOMANGA, "so-manga.com", pageSize = 5, searchPageSize = 25) {
|
||||
override val datePattern = "MMM d, yyyy"
|
||||
}
|
||||
MangaReaderParser(context, MangaParserSource.SOMANGA, "so-manga.com", pageSize = 5, searchPageSize = 25)
|
||||
@@ -1,11 +1,13 @@
|
||||
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.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("ATHENAMANGA", "AthenaManga", "tr")
|
||||
internal class AthenaManga(context: MangaLoaderContext) :
|
||||
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")
|
||||
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
|
||||
get() = super.filterCapabilities.copy(
|
||||
isTagsExclusionSupported = false,
|
||||
|
||||
@@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
|
||||
|
||||
@MangaSourceParser("SUMMERTOON", "SummerToon", "tr")
|
||||
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
|
||||
get() = super.filterCapabilities.copy(
|
||||
isTagsExclusionSupported = false,
|
||||
|
||||
@@ -129,7 +129,7 @@ internal abstract class MmrcmsParser(
|
||||
coverUrl = div.selectFirst("img")?.src().orEmpty(),
|
||||
title = div.selectFirst("div.media-body h5")?.text().orEmpty(),
|
||||
altTitle = null,
|
||||
rating = div.selectFirst("span")?.ownText()?.toFloat()?.div(5f) ?: RATING_UNKNOWN,
|
||||
rating = div.selectFirst("span")?.ownText()?.toFloatOrNull()?.div(5f) ?: RATING_UNKNOWN,
|
||||
tags = emptySet(),
|
||||
author = null,
|
||||
state = null,
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser
|
||||
import java.util.*
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("BENTOSCAN", "BentoScan", "fr")
|
||||
internal class BentoScan(context: MangaLoaderContext) :
|
||||
MmrcmsParser(context, MangaParserSource.BENTOSCAN, "bentoscan.com") {
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser
|
||||
import java.util.*
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("MANGA_SCAN", "MangaScan", "fr")
|
||||
internal class MangaScan(context: MangaLoaderContext) :
|
||||
MmrcmsParser(context, MangaParserSource.MANGA_SCAN, "mangascan-fr.net") {
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser
|
||||
import java.util.*
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("SCANMANGAVF_WS", "ScanMangaVf.ws", "fr")
|
||||
internal class ScanMangaVfWs(context: MangaLoaderContext) :
|
||||
MmrcmsParser(context, MangaParserSource.SCANMANGAVF_WS, "scanmanga-vf.me") {
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
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.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaParserSource
|
||||
import org.koitharu.kotatsu.parsers.site.mmrcms.MmrcmsParser
|
||||
import java.util.*
|
||||
|
||||
@Broken
|
||||
@MangaSourceParser("KOMIKID", "KomikId", "id")
|
||||
internal class KomikId(context: MangaLoaderContext) :
|
||||
MmrcmsParser(context, MangaParserSource.KOMIKID, "komikid.com") {
|
||||
|
||||
@@ -113,7 +113,7 @@ internal abstract class OtakuSanctuaryParser(
|
||||
coverUrl = div.selectFirst("img")?.src().orEmpty(),
|
||||
title = div.selectFirst("h4")?.text().orEmpty(),
|
||||
altTitle = null,
|
||||
rating = div.selectFirst(".rating")?.ownText()?.toFloat()?.div(10f) ?: RATING_UNKNOWN,
|
||||
rating = div.selectFirst(".rating")?.ownText()?.toFloatOrNull()?.div(10f) ?: RATING_UNKNOWN,
|
||||
tags = emptySet(),
|
||||
author = null,
|
||||
state = null,
|
||||
|
||||
@@ -13,7 +13,7 @@ import org.koitharu.kotatsu.parsers.util.*
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.zip.ZipInputStream
|
||||
|
||||
@Broken // Not dead but totally changed structure
|
||||
@Broken // Not dead but changed template
|
||||
@MangaSourceParser("RANDOMSCANS", "LuratoonScan", "pt")
|
||||
internal class LuratoonScansParser(context: MangaLoaderContext) :
|
||||
SinglePageMangaParser(context, MangaParserSource.RANDOMSCANS),
|
||||
|
||||
@@ -71,7 +71,7 @@ internal class MangaOnline(context: MangaLoaderContext) : PagedMangaParser(conte
|
||||
title = div.selectLast(".data h3")?.text().orEmpty(),
|
||||
coverUrl = div.selectFirst("img")?.src().orEmpty(),
|
||||
altTitle = null,
|
||||
rating = div.selectFirst(".rating")?.ownText()?.toFloat()?.div(10f) ?: RATING_UNKNOWN,
|
||||
rating = div.selectFirst(".rating")?.ownText()?.toFloatOrNull()?.div(10f) ?: RATING_UNKNOWN,
|
||||
tags = emptySet(),
|
||||
description = null,
|
||||
state = null,
|
||||
|
||||
@@ -113,7 +113,7 @@ internal abstract class SinmhParser(
|
||||
coverUrl = div.selectFirst("img")?.src().orEmpty(),
|
||||
title = div.selectFirst("p > a, h3 > a")?.text().orEmpty(),
|
||||
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(),
|
||||
author = null,
|
||||
state = null,
|
||||
@@ -191,7 +191,7 @@ internal abstract class SinmhParser(
|
||||
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||
|
||||
val host = webClient.httpGet("/js/config.js".toAbsoluteUrl(domain)).parseRaw().substringAfter("domain\":[\"")
|
||||
.substringBefore("\"]}")
|
||||
.substringBefore("\"]}").replace("http:", "https:")
|
||||
|
||||
val chapterUrl = chapter.url.toAbsoluteUrl(domain)
|
||||
val docs = webClient.httpGet(chapterUrl).parseHtml()
|
||||
@@ -204,6 +204,8 @@ internal abstract class SinmhParser(
|
||||
images.map {
|
||||
val imageUrl = when {
|
||||
it.startsWith("https:\\/\\/") -> it.replace("\\", "")
|
||||
it.startsWith("http:\\/\\/") -> it.replace("\\", "").replace("http:", "https:")
|
||||
it.startsWith("\\/") -> host + it.replace("\\", "")
|
||||
it.startsWith("/") -> "$host$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
|
||||
protected val ongoing: Set<String> = setOf(
|
||||
"Đang tiến hành",
|
||||
"Đang cập nhật",
|
||||
"Ongoing",
|
||||
"Updating",
|
||||
"連載中",
|
||||
@@ -64,6 +65,7 @@ internal abstract class WpComicsParser(
|
||||
@JvmField
|
||||
protected val finished: Set<String> = setOf(
|
||||
"Hoàn thành",
|
||||
"Đã hoàn thành",
|
||||
"Complete",
|
||||
"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
|
||||
|
||||
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("AIYUMANGASCANLATION", "AiyuManhua", "es")
|
||||
internal class AiyuMangaScanlation(context: MangaLoaderContext) :
|
||||
ZeistMangaParser(context, MangaParserSource.AIYUMANGASCANLATION, "www.aiyumanhua.com") {
|
||||
|
||||
Reference in New Issue
Block a user