add new source and add other
This commit is contained in:
@@ -202,7 +202,7 @@ internal class BentomangaParser(context: MangaLoaderContext) : PagedMangaParser(
|
||||
private fun parseChapters(root: Element): List<MangaChapter> {
|
||||
return root.requireElementById("chapters_content")
|
||||
.select(".component-chapter").map { div ->
|
||||
val a = div.selectFirstOrThrow("a")
|
||||
val a = div.selectFirstOrThrow("a:not([style*='display:none'])")
|
||||
val href = a.attrAsRelativeUrl("href")
|
||||
val title = div.selectFirstOrThrow(".chapter_volume").text()
|
||||
val name = div.selectFirst(".chapter_title")?.textOrNull()
|
||||
|
||||
@@ -51,11 +51,14 @@ internal abstract class MadaraParser(
|
||||
override val sortOrders: Set<SortOrder> = EnumSet.of(
|
||||
SortOrder.UPDATED,
|
||||
SortOrder.POPULARITY,
|
||||
SortOrder.NEWEST,
|
||||
SortOrder.ALPHABETICAL,
|
||||
)
|
||||
|
||||
protected open val tagPrefix = "manga-genre/"
|
||||
protected open val isNsfwSource = false
|
||||
protected open val datePattern = "MMMM dd, yyyy"
|
||||
protected open val stylepage = "?style=list"
|
||||
|
||||
protected open val postreq = false
|
||||
|
||||
@@ -87,6 +90,7 @@ internal abstract class MadaraParser(
|
||||
"En cours",
|
||||
"En cours \uD83D\uDFE2",
|
||||
"En cours de publication",
|
||||
"Activo",
|
||||
"Đang tiến hành",
|
||||
"Em lançamento",
|
||||
"em lançamento",
|
||||
@@ -95,6 +99,7 @@ internal abstract class MadaraParser(
|
||||
"Publishing",
|
||||
"Devam Ediyor",
|
||||
"Em Andamento",
|
||||
"Em andamento",
|
||||
"In Corso",
|
||||
"Güncel",
|
||||
"Berjalan",
|
||||
@@ -149,11 +154,19 @@ internal abstract class MadaraParser(
|
||||
val tag = tags.oneOrThrowIfMany()
|
||||
val payload = createRequestTemplate()
|
||||
payload["page"] = page.toString()
|
||||
payload["vars[meta_key]"] = when (sortOrder) {
|
||||
SortOrder.POPULARITY -> "_wp_manga_views"
|
||||
SortOrder.UPDATED -> "_latest_update"
|
||||
else -> "_wp_manga_views"
|
||||
when (sortOrder) {
|
||||
SortOrder.POPULARITY -> payload["vars[meta_key]"] = "_wp_manga_views"
|
||||
SortOrder.UPDATED -> payload["vars[meta_key]"] = "_latest_update"
|
||||
SortOrder.NEWEST -> payload["vars[meta_key]"] = ""
|
||||
SortOrder.ALPHABETICAL -> {
|
||||
payload["vars[orderby]"] = "post_title"
|
||||
payload["vars[order]"] = "ASC"
|
||||
}
|
||||
|
||||
else -> payload["vars[meta_key]"] = "_latest_update"
|
||||
|
||||
}
|
||||
|
||||
payload["vars[wp-manga-genre]"] = tag?.key.orEmpty()
|
||||
payload["vars[s]"] = query?.urlEncoded().orEmpty()
|
||||
val doc = webClient.httpPost(
|
||||
@@ -183,9 +196,9 @@ internal abstract class MadaraParser(
|
||||
author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(),
|
||||
state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()?.trim()
|
||||
?.lowercase()) {
|
||||
"مستمرة", "En curso", "En Curso", "Ongoing", "OnGoing", "On going", "Ativo", "En Cours", "En cours",
|
||||
"مستمرة", "En curso", "En Curso", "Ongoing", "OnGoing", "On going", "Ativo", "En Cours", "En cours", "Activo",
|
||||
"En cours \uD83D\uDFE2", "En cours de publication", "Đang tiến hành", "Em lançamento", "em lançamento", "Em Lançamento",
|
||||
"Онгоінг", "Publishing", "Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating",
|
||||
"Онгоінг", "Publishing", "Devam Ediyor", "Em Andamento", "Em andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating",
|
||||
"Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "Publicando", "连载中",
|
||||
"Devam ediyor",
|
||||
-> MangaState.ONGOING
|
||||
@@ -228,6 +241,12 @@ internal abstract class MadaraParser(
|
||||
}
|
||||
}
|
||||
|
||||
protected open val selectdesc =
|
||||
"div.description-summary div.summary__content, div.summary_content div.post-content_item > h5 + div, div.summary_content div.manga-excerpt, div.post-content div.manga-summary, div.post-content div.desc, div.c-page__content div.summary__content"
|
||||
protected open val selectgenre = "div.genres-content a"
|
||||
protected open val selectdate = "span.chapter-release-date i"
|
||||
protected open val selectchapter = "li.wp-manga-chapter"
|
||||
|
||||
override suspend fun getDetails(manga: Manga): Manga = coroutineScope {
|
||||
val fullUrl = manga.url.toAbsoluteUrl(domain)
|
||||
val doc = webClient.httpGet(fullUrl).parseHtml()
|
||||
@@ -240,23 +259,27 @@ internal abstract class MadaraParser(
|
||||
async { getChapters(manga, doc) }
|
||||
}
|
||||
|
||||
val desc = doc.body().selectFirst("div.description-summary div.summary__content") ?: doc.body()
|
||||
.selectFirst("div.summary_content div.post-content_item > h5 + div") ?: doc.body()
|
||||
.selectFirst("div.post-content div.manga-summary") ?: doc.body()
|
||||
.selectFirst("div.post-content div.desc") ?: doc.body()
|
||||
.selectFirst("div.summary_content div.manga-excerpt")
|
||||
|
||||
val desc = doc.select(selectdesc).let {
|
||||
if (it.select("p").text().isNotEmpty()) {
|
||||
it.select("p").joinToString(separator = "\n\n") { p ->
|
||||
p.text().replace("<br>", "\n")
|
||||
}
|
||||
} else {
|
||||
it.text()
|
||||
}
|
||||
}
|
||||
|
||||
val stateselect =
|
||||
doc.body().select("div.post-content_item:contains(Status) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(Statut) > div.summary-content").last()
|
||||
?: doc.body().select("div.post-content_item:contains(حالة العمل) > div.summary-content").last()
|
||||
?: doc.body().select("div.post-content_item:contains(Estado) > div.summary-content").last()
|
||||
?: doc.body().select("div.post-content_item:contains(สถานะ) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(Stato) > div.summary-content").last()
|
||||
?: doc.body().select("div.post-content_item:contains(Durum) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(Statüsü) > div.summary-content").last()
|
||||
?: doc.body().select("div.summary-content").last()
|
||||
.select("div.post-content_item:contains(Statut) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(حالة العمل) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(Estado) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(สถานะ) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(Stato) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(Durum) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(Statüsü) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.post-content_item:contains(状态) > div.summary-content").last() ?: doc.body()
|
||||
.select("div.summary-content").last()
|
||||
|
||||
val state =
|
||||
stateselect?.let {
|
||||
@@ -267,20 +290,21 @@ internal abstract class MadaraParser(
|
||||
}
|
||||
}
|
||||
|
||||
val alt =
|
||||
doc.body().select(".post-content_item:contains(Alt) .summary-content").firstOrNull()?.tableValue()?.text()
|
||||
?.trim() ?: doc.body().select(".post-content_item:contains(Nomes alternativos: ) .summary-content")
|
||||
.firstOrNull()?.tableValue()?.text()?.trim()
|
||||
|
||||
manga.copy(
|
||||
tags = doc.body().select("div.genres-content a").mapNotNullToSet { a ->
|
||||
tags = doc.body().select(selectgenre).mapNotNullToSet { a ->
|
||||
MangaTag(
|
||||
key = a.attr("href").removeSuffix("/").substringAfterLast('/'),
|
||||
title = a.text().toTitleCase(),
|
||||
source = source,
|
||||
)
|
||||
},
|
||||
description = desc?.select("p")?.filterNot { it.ownText().startsWith("A brief description") }
|
||||
?.joinToString { it.text() },
|
||||
altTitle =
|
||||
doc.body().select(".post-content_item:contains(Alt) .summary-content").firstOrNull()?.tableValue()?.text()
|
||||
?.trim() ?: doc.body().select(".post-content_item:contains(Nomes alternativos: ) .summary-content")
|
||||
.firstOrNull()?.tableValue()?.text()?.trim(),
|
||||
description = desc,
|
||||
altTitle = alt,
|
||||
state = state,
|
||||
chapters = chaptersDeferred.await(),
|
||||
)
|
||||
@@ -289,10 +313,10 @@ internal abstract class MadaraParser(
|
||||
protected open suspend fun getChapters(manga: Manga, doc: Document): List<MangaChapter> {
|
||||
val root2 = doc.body().selectFirstOrThrow("div.content-area")
|
||||
val dateFormat = SimpleDateFormat(datePattern, sourceLocale)
|
||||
return root2.select("li.wp-manga-chapter").mapChapters(reversed = true) { i, li ->
|
||||
return root2.select(selectchapter).mapChapters(reversed = true) { i, li ->
|
||||
val a = li.selectFirst("a")
|
||||
val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing")
|
||||
val link = href + "?style=list"
|
||||
val link = href + stylepage
|
||||
MangaChapter(
|
||||
id = generateUid(href),
|
||||
name = a.ownText(),
|
||||
@@ -300,7 +324,7 @@ internal abstract class MadaraParser(
|
||||
url = link,
|
||||
uploadDate = parseChapterDate(
|
||||
dateFormat,
|
||||
li.selectFirst("span.chapter-release-date i")?.text(),
|
||||
li.selectFirst(selectdate)?.text(),
|
||||
),
|
||||
source = source,
|
||||
scanlator = null,
|
||||
@@ -323,19 +347,19 @@ internal abstract class MadaraParser(
|
||||
}
|
||||
val dateFormat = SimpleDateFormat(datePattern, sourceLocale)
|
||||
|
||||
return doc.select("li.wp-manga-chapter").mapChapters(reversed = true) { i, li ->
|
||||
return doc.select(selectchapter).mapChapters(reversed = true) { i, li ->
|
||||
val a = li.selectFirst("a")
|
||||
val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing")
|
||||
val link = href + "?style=list"
|
||||
val link = href + stylepage
|
||||
MangaChapter(
|
||||
id = generateUid(href),
|
||||
url = link,
|
||||
name = a.text(),
|
||||
name = a.ownText(),
|
||||
number = i + 1,
|
||||
branch = null,
|
||||
uploadDate = parseChapterDate(
|
||||
dateFormat,
|
||||
li.selectFirst("span.chapter-release-date i")?.text(),
|
||||
li.selectFirst(selectdate)?.text(),
|
||||
),
|
||||
scanlator = null,
|
||||
source = source,
|
||||
@@ -370,6 +394,10 @@ internal abstract class MadaraParser(
|
||||
date.endsWith(" atrás", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
// other translated 'ago' in Portuguese.
|
||||
date.startsWith("há ", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
// Handle translated 'ago' in Turkish.
|
||||
date.endsWith(" önce", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
@@ -390,10 +418,31 @@ internal abstract class MadaraParser(
|
||||
date.endsWith(" d", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
|
||||
date.endsWith(" mins", ignoreCase = true) -> {
|
||||
//If there is no ago but just a motion of time
|
||||
date.endsWith(" días", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
|
||||
date.endsWith(" día", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
|
||||
date.endsWith(" horas", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
|
||||
date.endsWith(" hora", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
|
||||
date.endsWith(" minutos", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
|
||||
date.endsWith(" minuto", ignoreCase = true) -> {
|
||||
parseRelativeDate(date)
|
||||
}
|
||||
|
||||
// Handle 'yesterday' and 'today', using midnight
|
||||
date.startsWith("year", ignoreCase = true) -> {
|
||||
Calendar.getInstance().apply {
|
||||
@@ -446,7 +495,7 @@ internal abstract class MadaraParser(
|
||||
"d",
|
||||
).anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis
|
||||
|
||||
WordSet("jam", "saat", "heure", "hora", "hour", "h").anyWordIn(date) -> cal.apply {
|
||||
WordSet("jam", "saat", "heure", "hora", "horas", "hour", "h").anyWordIn(date) -> cal.apply {
|
||||
add(
|
||||
Calendar.HOUR,
|
||||
-number,
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("ARABTOONS", "Arab Toons", "ar")
|
||||
internal class ArabToons(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ARABTOONS, "arabtoons.net") {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "dd-MM-yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("ASQORG", "3Asq", "ar")
|
||||
internal class Asq(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ASQORG, "3asq.org") {
|
||||
|
||||
override val datePattern = "d MMMM، yyyy"
|
||||
}
|
||||
@@ -5,7 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("AZORANOV", "Azoranov", "ar")
|
||||
internal class Azoranov(context: MangaLoaderContext) :
|
||||
@@ -13,5 +12,4 @@ internal class Azoranov(context: MangaLoaderContext) :
|
||||
|
||||
override val tagPrefix = "novel-genre/"
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("ar", "AR")
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("GATEMANGA", "Gate Manga", "ar")
|
||||
internal class GateManga(context: MangaLoaderContext) :
|
||||
@@ -13,5 +12,4 @@ internal class GateManga(context: MangaLoaderContext) :
|
||||
|
||||
override val postreq = true
|
||||
override val datePattern = "d MMMM، yyyy"
|
||||
override val sourceLocale: Locale = Locale("ar", "AR")
|
||||
}
|
||||
|
||||
@@ -7,7 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGALEK", "MangaLek", "ar")
|
||||
internal class MangaLek(context: MangaLoaderContext) : MadaraParser(
|
||||
context, MangaSource.MANGALEK, "mangalek.com",
|
||||
pageSize = 20,
|
||||
)
|
||||
internal class MangaLek(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGALEK, "mangalek.com", pageSize = 20)
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGALIONZ", "Manga Lionz", "ar")
|
||||
internal class MangaLionz(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGALIONZ, "mangalionz.com", pageSize = 10) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGASTARZ", "Manga Starz", "ar")
|
||||
internal class MangaStarz(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGASTARZ, "mangastarz.com", pageSize = 10) {
|
||||
|
||||
override val datePattern = "d MMMM، yyyy"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGASPARK", "Mangaspark", "ar")
|
||||
internal class Mangaspark(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGASPARK, "mangaspark.com", pageSize = 10) {
|
||||
|
||||
override val postreq = true
|
||||
override val datePattern = "d MMMM، yyyy"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("MANHATIC", "Manhatic", "ar")
|
||||
internal class Manhatic(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANHATIC, "manhatic.com") {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale.ENGLISH
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("NIJITRANSLATIONS", "Niji Translations", "ar")
|
||||
internal class NijiTranslations(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.NIJITRANSLATIONS, "niji-translations.com") {
|
||||
|
||||
override val postreq = true
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("NOVELSTOWN", "Novelstown", "ar")
|
||||
internal class Novelstown(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.NOVELSTOWN, "novelstown.cyou") {
|
||||
|
||||
override val datePattern = "d MMMM، yyyy"
|
||||
}
|
||||
@@ -5,12 +5,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("WEBTOONEMPIRE", "Webtoon Empire", "ar")
|
||||
internal class WebtoonEmpire(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.WEBTOONEMPIRE, "webtoonempire.org", pageSize = 10) {
|
||||
|
||||
override val datePattern = "d MMMM yyyy"
|
||||
override val sourceLocale: Locale = Locale("ar", "AR")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("IMMORTALUPDATES", "Immortal Updates", "en")
|
||||
internal class ImmortalUpdates(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.IMMORTALUPDATES, "immortalupdates.com") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.jsoup.nodes.Document
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.Manga
|
||||
import org.koitharu.kotatsu.parsers.model.MangaChapter
|
||||
import org.koitharu.kotatsu.parsers.model.MangaPage
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.model.MangaState
|
||||
import org.koitharu.kotatsu.parsers.model.MangaTag
|
||||
import org.koitharu.kotatsu.parsers.model.SortOrder
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull
|
||||
import org.koitharu.kotatsu.parsers.util.domain
|
||||
import org.koitharu.kotatsu.parsers.util.generateUid
|
||||
import org.koitharu.kotatsu.parsers.util.host
|
||||
import org.koitharu.kotatsu.parsers.util.mapChapters
|
||||
import org.koitharu.kotatsu.parsers.util.mapNotNullToSet
|
||||
import org.koitharu.kotatsu.parsers.util.parseFailed
|
||||
import org.koitharu.kotatsu.parsers.util.parseHtml
|
||||
import org.koitharu.kotatsu.parsers.util.removeSuffix
|
||||
import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl
|
||||
import org.koitharu.kotatsu.parsers.util.toTitleCase
|
||||
import org.koitharu.kotatsu.parsers.util.urlEncoded
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.EnumSet
|
||||
|
||||
@MangaSourceParser("ISEKAISCAN", "Isekai Scan", "en")
|
||||
internal class IsekaiScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ISEKAISCAN, "isekaiscan.top", 16) {
|
||||
|
||||
override val tagPrefix = "mangas/"
|
||||
override val datePattern = "MMMM d, HH:mm"
|
||||
|
||||
override val sortOrders: Set<SortOrder> = EnumSet.of(
|
||||
SortOrder.POPULARITY,
|
||||
SortOrder.UPDATED,
|
||||
)
|
||||
|
||||
override suspend fun getListPage(
|
||||
page: Int,
|
||||
query: String?,
|
||||
tags: Set<MangaTag>?,
|
||||
sortOrder: SortOrder,
|
||||
): List<Manga> {
|
||||
val url = buildString {
|
||||
append("https://")
|
||||
append(domain)
|
||||
val pages = page + 1
|
||||
|
||||
when {
|
||||
!query.isNullOrEmpty() -> {
|
||||
|
||||
append("/?search=")
|
||||
append(query.urlEncoded())
|
||||
append("&page=")
|
||||
append(pages.toString())
|
||||
append("&post_type=wp-manga")
|
||||
}
|
||||
|
||||
!tags.isNullOrEmpty() -> {
|
||||
append("/mangas/")
|
||||
for (tag in tags) {
|
||||
append(tag.key)
|
||||
}
|
||||
|
||||
append("?orderby=2&page=")
|
||||
append(pages.toString())
|
||||
|
||||
}
|
||||
|
||||
else -> {
|
||||
|
||||
if (sortOrder == SortOrder.POPULARITY) {
|
||||
append("/popular-manga")
|
||||
}
|
||||
if (sortOrder == SortOrder.UPDATED) {
|
||||
append("/latest-manga")
|
||||
}
|
||||
append("?page=")
|
||||
append(pages.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
val doc = webClient.httpGet(url).parseHtml()
|
||||
return doc.select("div.row.c-tabs-item__content").ifEmpty {
|
||||
doc.select("div.page-item-detail.manga")
|
||||
}.map { div ->
|
||||
val href = div.selectFirst("a")?.attrAsRelativeUrlOrNull("href") ?: div.parseFailed("Link not found")
|
||||
val summary = div.selectFirst(".tab-summary") ?: div.selectFirst(".item-summary")
|
||||
Manga(
|
||||
id = generateUid(href),
|
||||
url = href,
|
||||
publicUrl = href.toAbsoluteUrl(div.host ?: domain),
|
||||
coverUrl = div.selectFirst("img")?.src().orEmpty(),
|
||||
title = (summary?.selectFirst("h3") ?: summary?.selectFirst("h4"))?.text().orEmpty(),
|
||||
altTitle = null,
|
||||
rating = div.selectFirst("span.total_votes")?.ownText()?.toFloatOrNull()?.div(5f) ?: -1f,
|
||||
tags = summary?.selectFirst(".mg_genres")?.select("a")?.mapNotNullToSet { a ->
|
||||
MangaTag(
|
||||
key = a.attr("href").removeSuffix('/').substringAfterLast('/'),
|
||||
title = a.text().ifEmpty { return@mapNotNullToSet null }.toTitleCase(),
|
||||
source = source,
|
||||
)
|
||||
}.orEmpty(),
|
||||
author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(),
|
||||
state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()?.trim()
|
||||
?.lowercase()) {
|
||||
"مستمرة", "En curso", "En Curso", "Ongoing", "OnGoing", "On going", "Ativo", "En Cours", "En cours", "Activo",
|
||||
"En cours \uD83D\uDFE2", "En cours de publication", "Đang tiến hành", "Em lançamento", "em lançamento", "Em Lançamento",
|
||||
"Онгоінг", "Publishing", "Devam Ediyor", "Em Andamento", "Em andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating",
|
||||
"Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "Publicando", "连载中",
|
||||
"Devam ediyor",
|
||||
-> MangaState.ONGOING
|
||||
|
||||
"Completed", "Completo", "Complété", "Fini", "Achevé", "Terminé", "Terminé ⚫", "Tamamlandı", "Đã hoàn thành", "Hoàn Thành", "مكتملة",
|
||||
"Завершено", "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", "Bitmiş",
|
||||
-> MangaState.FINISHED
|
||||
|
||||
else -> null
|
||||
},
|
||||
source = source,
|
||||
isNsfw = isNsfwSource,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun loadChapters(mangaUrl: String, document: Document): List<MangaChapter> {
|
||||
|
||||
|
||||
val mangaId = document.select("div[id^=manga-chapters-holder]").attr("data-id")
|
||||
|
||||
val doc = webClient.httpGet("https://$domain/ajax-list-chapter?mangaID=$mangaId").parseHtml()
|
||||
|
||||
val dateFormat = SimpleDateFormat(datePattern, sourceLocale)
|
||||
|
||||
return doc.select(selectchapter).mapChapters(reversed = true) { i, li ->
|
||||
val a = li.selectFirst("a")
|
||||
val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing")
|
||||
val link = href + stylepage
|
||||
MangaChapter(
|
||||
id = generateUid(href),
|
||||
url = link,
|
||||
name = a.ownText(),
|
||||
number = i + 1,
|
||||
branch = null,
|
||||
uploadDate = parseChapterDate(
|
||||
dateFormat,
|
||||
li.selectFirst(selectdate)?.text(),
|
||||
),
|
||||
scanlator = null,
|
||||
source = source,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun getPages(chapter: MangaChapter): List<MangaPage> {
|
||||
val fullUrl = chapter.url.toAbsoluteUrl(domain)
|
||||
val doc = webClient.httpGet(fullUrl).parseHtml()
|
||||
val urlarray = doc.select("p#arraydata").text().split(",").toTypedArray()
|
||||
return urlarray.map { url ->
|
||||
MangaPage(
|
||||
id = generateUid(url),
|
||||
url = url,
|
||||
preview = null,
|
||||
source = source,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("ITSYOURIGHTMANHUA", "Itsyourightmanhua", "en")
|
||||
internal class Itsyourightmanhua(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ITSYOURIGHTMANHUA, "itsyourightmanhua.com", 10) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("KSGROUPSCANS", "Ks Group Scans", "en")
|
||||
internal class KsGroupScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.KSGROUPSCANS, "ksgroupscans.com") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("KUNMANGA", "Kun Manga", "en")
|
||||
internal class KunManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.KUNMANGA, "kunmanga.com", 10) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("LADYMANGA", "Lady Manga", "en")
|
||||
internal class LadyManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.LADYMANGA, "ladymanga.com") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("LILYMANGA", "LilyManga", "en")
|
||||
internal class LilyManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.LILYMANGA, "lilymanga.net") {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val tagPrefix = "ys-genre/"
|
||||
override val datePattern = "yyyy-MM-dd"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("LOLICONMOBI", "LoliconMobi", "en")
|
||||
internal class LoliconMobi(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.LOLICONMOBI, "lolicon.mobi") {
|
||||
|
||||
override val postreq = true
|
||||
override val isNsfwSource = true
|
||||
override val tagPrefix = "lolicon-genre/"
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("LUXMANGA", "LuxManga", "en")
|
||||
internal class LuxManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.LUXMANGA, "luxmanga.net") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGAACTION", "Manga Action", "en")
|
||||
internal class MangaAction(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGAACTION, "mangaaction.com") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGAGALAXY", "Manga Galaxy", "en")
|
||||
internal class MangaGalaxy(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGAGALAXY, "mangagalaxy.me", 16) {
|
||||
|
||||
override val datePattern = "MM/dd/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGASTIC", "Mangastic", "en")
|
||||
internal class Mangastic(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGASTIC, "mangastic.cc", 20) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("TOONCHILL", "Toon Chill", "en")
|
||||
internal class ToonChill(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.TOONCHILL, "toonchill.com", 32) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("APOLL_COMICS", "Apoll Comics", "es")
|
||||
internal class ApollComics(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.APOLL_COMICS, "apollcomics.com", 10) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("es")
|
||||
}
|
||||
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("COPYPASTESCAN", "Copypastescan", "es")
|
||||
internal class Copypastescan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.COPYPASTESCAN, "copypastescan.xyz", 10) {
|
||||
|
||||
override val datePattern = "d MMMM, yyyy"
|
||||
override val sourceLocale: Locale = Locale("es")
|
||||
}
|
||||
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("DAPROB", "Daprob", "es")
|
||||
internal class Daprob(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.DAPROB, "daprob.com") {
|
||||
|
||||
override val datePattern = "d 'de' MMMMM 'de' yyyy"
|
||||
override val sourceLocale: Locale = Locale("es")
|
||||
}
|
||||
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("DOKKOMANGA", "Dokko Manga", "es")
|
||||
internal class DokkoManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.DOKKOMANGA, "dokkomanga.com", 10) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("es")
|
||||
}
|
||||
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("EMPERORSCAN", "Emperor Scan", "es")
|
||||
internal class EmperorScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.EMPERORSCAN, "dokkomanga.com") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("es")
|
||||
}
|
||||
|
||||
@@ -4,7 +4,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("EROMIAU", "Eromiau", "es")
|
||||
internal class Eromiau(context: MangaLoaderContext) :
|
||||
@@ -12,5 +11,4 @@ internal class Eromiau(context: MangaLoaderContext) :
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("es")
|
||||
}
|
||||
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("HERENSCAN", "Heren Scan", "es")
|
||||
internal class HerenScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HERENSCAN, "herenscan.com") {
|
||||
|
||||
override val datePattern = "d 'de' MMMMM 'de' yyyy"
|
||||
override val sourceLocale: Locale = Locale("es")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
|
||||
@MangaSourceParser("INFRAFANDUB", "infrafandub", "es")
|
||||
internal class Infrafandub(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.INFRAFANDUB, "infrafandub.xyz", 10) {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGAMUNDODRAMA", "Manga Mundo Drama", "es")
|
||||
internal class MangaMundoDrama(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGAMUNDODRAMA, "inmortalscan.com") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGAPT", "Mangapt", "es")
|
||||
internal class Mangapt(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGAPT, "mangapt.com") {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("MUNDO_MANHWA", "Mundo Manhwa", "es")
|
||||
internal class MundoManhwa(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MUNDO_MANHWA, "mundomanhwa.com", 10) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("es")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("NOBLESSETRANSLATIONS", "Noblesse Translations", "es")
|
||||
internal class NoblesseTranslations(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.NOBLESSETRANSLATIONS, "www.noblessetranslations.com") {
|
||||
|
||||
override val datePattern = "d MMMM, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("RAGNAROKSCAN", "Ragnarok Scan", "es")
|
||||
internal class RagnarokScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.RAGNAROKSCAN, "ragnarokscan.com") {
|
||||
|
||||
override val stylepage = ""
|
||||
override val tagPrefix = "genero/"
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("RAGNAROKSCANLATION", "Ragnarok Scanlation", "es")
|
||||
internal class RagnarokScanlation(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.RAGNAROKSCANLATION, "ragnarokscanlation.com") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("SAMURAISCAN", "Samurai Scan", "es")
|
||||
internal class SamuraiScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.SAMURAISCAN, "samuraiscan.com", 10) {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("SCAMBERTRASLATOR", "Scambertraslator", "es")
|
||||
internal class Scambertraslator(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.SCAMBERTRASLATOR, "scambertraslator.com") {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("TECNOSCANN", "TecnoScann", "es")
|
||||
internal class TecnoScann(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.TECNOSCANN, "tecnoscann.com", 24) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,137 @@
|
||||
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.Manga
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.model.MangaState
|
||||
import org.koitharu.kotatsu.parsers.model.MangaTag
|
||||
import org.koitharu.kotatsu.parsers.model.SortOrder
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull
|
||||
import org.koitharu.kotatsu.parsers.util.domain
|
||||
import org.koitharu.kotatsu.parsers.util.generateUid
|
||||
import org.koitharu.kotatsu.parsers.util.host
|
||||
import org.koitharu.kotatsu.parsers.util.mapNotNullToSet
|
||||
import org.koitharu.kotatsu.parsers.util.parseFailed
|
||||
import org.koitharu.kotatsu.parsers.util.parseHtml
|
||||
import org.koitharu.kotatsu.parsers.util.removeSuffix
|
||||
import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl
|
||||
import org.koitharu.kotatsu.parsers.util.toTitleCase
|
||||
import org.koitharu.kotatsu.parsers.util.urlEncoded
|
||||
import java.util.EnumSet
|
||||
|
||||
@MangaSourceParser("VERMANHWA", "Vermanhwa", "es")
|
||||
internal class Vermanhwa(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.VERMANHWA, "vermanhwa.es", 10) {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
|
||||
override val sortOrders: Set<SortOrder> = EnumSet.of(
|
||||
SortOrder.NEWEST,
|
||||
SortOrder.ALPHABETICAL,
|
||||
SortOrder.RATING,
|
||||
SortOrder.POPULARITY,
|
||||
SortOrder.UPDATED,
|
||||
|
||||
|
||||
)
|
||||
|
||||
override suspend fun getListPage(
|
||||
page: Int,
|
||||
query: String?,
|
||||
tags: Set<MangaTag>?,
|
||||
sortOrder: SortOrder,
|
||||
): List<Manga> {
|
||||
val url = buildString {
|
||||
append("https://")
|
||||
append(domain)
|
||||
val pages = page + 1
|
||||
|
||||
when {
|
||||
!query.isNullOrEmpty() -> {
|
||||
append("/page/")
|
||||
append(pages.toString())
|
||||
append("/?s=")
|
||||
append(query.urlEncoded())
|
||||
append("&post_type=wp-manga")
|
||||
}
|
||||
|
||||
!tags.isNullOrEmpty() -> {
|
||||
append("/manga-genre/")
|
||||
for (tag in tags) {
|
||||
append(tag.key)
|
||||
}
|
||||
append("/page/")
|
||||
append(pages.toString())
|
||||
}
|
||||
|
||||
else -> {
|
||||
|
||||
append("/manga/")
|
||||
append("/page/")
|
||||
append(pages.toString())
|
||||
append("?m_orderby=")
|
||||
if (sortOrder == SortOrder.NEWEST) {
|
||||
append("new-manga")
|
||||
}
|
||||
if (sortOrder == SortOrder.ALPHABETICAL) {
|
||||
append("alphabet")
|
||||
}
|
||||
if (sortOrder == SortOrder.RATING) {
|
||||
append("rating")
|
||||
}
|
||||
if (sortOrder == SortOrder.POPULARITY) {
|
||||
append("views")
|
||||
}
|
||||
if (sortOrder == SortOrder.UPDATED) {
|
||||
append("latest")
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
val doc = webClient.httpGet(url).parseHtml()
|
||||
return doc.select("div.row.c-tabs-item__content").ifEmpty {
|
||||
doc.select("div.page-item-detail.manga")
|
||||
}.map { div ->
|
||||
val href = div.selectFirst("a")?.attrAsRelativeUrlOrNull("href") ?: div.parseFailed("Link not found")
|
||||
val summary = div.selectFirst(".tab-summary") ?: div.selectFirst(".item-summary")
|
||||
Manga(
|
||||
id = generateUid(href),
|
||||
url = href,
|
||||
publicUrl = href.toAbsoluteUrl(div.host ?: domain),
|
||||
coverUrl = div.selectFirst("img")?.src().orEmpty(),
|
||||
title = (summary?.selectFirst("h3") ?: summary?.selectFirst("h4"))?.text().orEmpty(),
|
||||
altTitle = null,
|
||||
rating = div.selectFirst("span.total_votes")?.ownText()?.toFloatOrNull()?.div(5f) ?: -1f,
|
||||
tags = summary?.selectFirst(".mg_genres")?.select("a")?.mapNotNullToSet { a ->
|
||||
MangaTag(
|
||||
key = a.attr("href").removeSuffix('/').substringAfterLast('/'),
|
||||
title = a.text().ifEmpty { return@mapNotNullToSet null }.toTitleCase(),
|
||||
source = source,
|
||||
)
|
||||
}.orEmpty(),
|
||||
author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(),
|
||||
state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()?.trim()
|
||||
?.lowercase()) {
|
||||
"مستمرة", "En curso", "En Curso", "Ongoing", "OnGoing", "On going", "Ativo", "En Cours", "En cours", "Activo",
|
||||
"En cours \uD83D\uDFE2", "En cours de publication", "Đang tiến hành", "Em lançamento", "em lançamento", "Em Lançamento",
|
||||
"Онгоінг", "Publishing", "Devam Ediyor", "Em Andamento", "Em andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating",
|
||||
"Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "Publicando", "连载中",
|
||||
"Devam ediyor",
|
||||
-> MangaState.ONGOING
|
||||
|
||||
"Completed", "Completo", "Complété", "Fini", "Achevé", "Terminé", "Terminé ⚫", "Tamamlandı", "Đã hoàn thành", "Hoàn Thành", "مكتملة",
|
||||
"Завершено", "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", "Bitmiş",
|
||||
-> MangaState.FINISHED
|
||||
|
||||
else -> null
|
||||
},
|
||||
source = source,
|
||||
isNsfw = isNsfwSource,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -11,5 +11,4 @@ internal class AstralManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ASTRALMANGA, "astral-manga.fr", pageSize = 12) {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
|
||||
}
|
||||
|
||||
@@ -4,13 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("FRSCAN", "FrScan", "fr")
|
||||
internal class FrScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.FRSCAN, "fr-scan.com") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale.FRENCH
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +1,9 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.fr
|
||||
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.Manga
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.model.MangaState
|
||||
import org.koitharu.kotatsu.parsers.model.MangaTag
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import org.koitharu.kotatsu.parsers.util.domain
|
||||
import org.koitharu.kotatsu.parsers.util.mapNotNullToSet
|
||||
import org.koitharu.kotatsu.parsers.util.parseHtml
|
||||
import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl
|
||||
import org.koitharu.kotatsu.parsers.util.toTitleCase
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("HENTAISCANTRADVF", "Hentai-Scantrad", "fr")
|
||||
internal class HentaiScantradVf(context: MangaLoaderContext) :
|
||||
@@ -22,42 +11,4 @@ internal class HentaiScantradVf(context: MangaLoaderContext) :
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "d MMMM, yyyy"
|
||||
override val sourceLocale: Locale = Locale.FRENCH
|
||||
|
||||
override suspend fun getDetails(manga: Manga): Manga = coroutineScope {
|
||||
val fullUrl = manga.url.toAbsoluteUrl(domain)
|
||||
val doc = webClient.httpGet(fullUrl).parseHtml()
|
||||
|
||||
val chaptersDeferred = async { loadChapters(manga.url, doc) }
|
||||
|
||||
val stateselect = doc.body().select("div.summary-content").last()
|
||||
val state =
|
||||
stateselect?.let {
|
||||
when (it.text()) {
|
||||
in ongoing -> MangaState.ONGOING
|
||||
in finished -> MangaState.FINISHED
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
val desc = doc.body().selectFirst("div.description-summary div.summary__content")?.text()
|
||||
?: doc.body() .selectFirst("div.datas_synopsis")?.text()
|
||||
|
||||
manga.copy(
|
||||
tags = doc.body().select("div.genres-content a").mapNotNullToSet { a ->
|
||||
MangaTag(
|
||||
key = a.attr("href").removeSuffix("/").substringAfterLast('/'),
|
||||
title = a.text().toTitleCase(),
|
||||
source = source,
|
||||
)
|
||||
},
|
||||
description = desc,
|
||||
altTitle =
|
||||
doc.body().select(".post-content_item:contains(Alt) .summary-content").firstOrNull()?.tableValue()?.text()
|
||||
?.trim() ?: doc.body().select(".post-content_item:contains(Nomes alternativos: ) .summary-content")
|
||||
.firstOrNull()?.tableValue()?.text()?.trim(),
|
||||
state = state,
|
||||
chapters = chaptersDeferred.await(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,16 +6,12 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import org.koitharu.kotatsu.parsers.util.domain
|
||||
import org.koitharu.kotatsu.parsers.util.insertCookies
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@MangaSourceParser("HHENTAIFR", "HhentaiFr", "fr")
|
||||
internal class HhentaiFr(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HHENTAIFR, "hhentai.fr") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale.FRENCH
|
||||
|
||||
override val isNsfwSource = true
|
||||
|
||||
init {
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.fr
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("KARATCAMSCANS", "Karatcam Scans", "fr")
|
||||
internal class KaratcamScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.KARATCAMSCANS, "karatcam-scans.fr") {
|
||||
|
||||
override val tagPrefix = "webtoon-genre/"
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.fr
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGAHUB", "Manga Hub", "fr")
|
||||
internal class MangaHub(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGAHUB, "mangahub.fr") {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "d MMMM yyyy"
|
||||
}
|
||||
@@ -4,13 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("MANGA_SCANTRAD", "Manga Scantrad", "fr")
|
||||
internal class MangaScantrad(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGA_SCANTRAD, "manga-scantrad.io") {
|
||||
|
||||
override val datePattern = "d MMMM yyyy"
|
||||
override val sourceLocale: Locale = Locale.FRENCH
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.fr
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MANGASCANTRADUNOFFICIAL", "Manga Scantrad ( Unofficial )", "fr")
|
||||
internal class MangaScantradUnofficial(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGASCANTRADUNOFFICIAL, "www.mangascantrad.fr", 10) {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("MANGASORIGINES", "Mangas Origines", "fr")
|
||||
internal class MangasOrigines(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGASORIGINES, "mangas-origines.fr") {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
override val sourceLocale: Locale = Locale.FRENCH
|
||||
}
|
||||
|
||||
@@ -4,14 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("MANGASORIGINESUNOFFICIAL", "Mangas Origines ( unofficial )", "fr")
|
||||
internal class MangasOriginesUnofficial(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MANGASORIGINESUNOFFICIAL, "mangas-origines.xyz") {
|
||||
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale.FRENCH
|
||||
|
||||
}
|
||||
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("PANTHEONSCAN", "Pantheon Scan", "fr")
|
||||
internal class PantheonScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.PANTHEONSCAN, "pantheon-scan.com") {
|
||||
|
||||
override val datePattern = "d MMMM yyyy"
|
||||
override val sourceLocale: Locale = Locale.FRENCH
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.fr
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("RAIJINSCANS", "Raijin Scans", "fr")
|
||||
internal class RaijinScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.RAIJINSCANS, "raijinscans.fr") {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("SCANHENTAIMENU", "Scan Hentai Menu", "fr")
|
||||
internal class ScanHentaiMenu(context: MangaLoaderContext) :
|
||||
@@ -12,5 +11,4 @@ internal class ScanHentaiMenu(context: MangaLoaderContext) :
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale.FRENCH
|
||||
}
|
||||
|
||||
@@ -10,6 +10,5 @@ internal class ScantradVf(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.SCANTRADVF, "scantrad-vf.co") {
|
||||
|
||||
override val datePattern = "d MMMM yyyy"
|
||||
|
||||
override val tagPrefix = "genre/"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.fr
|
||||
|
||||
import org.jsoup.nodes.Document
|
||||
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.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl
|
||||
import org.koitharu.kotatsu.parsers.util.domain
|
||||
import org.koitharu.kotatsu.parsers.util.generateUid
|
||||
import org.koitharu.kotatsu.parsers.util.mapChapters
|
||||
import org.koitharu.kotatsu.parsers.util.parseHtml
|
||||
import org.koitharu.kotatsu.parsers.util.removeSuffix
|
||||
import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow
|
||||
import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl
|
||||
import java.text.SimpleDateFormat
|
||||
|
||||
@MangaSourceParser("TOONFR", "Toon Fr", "fr")
|
||||
internal class ToonFr(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.TOONFR, "toonfr.com") {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val tagPrefix = "webtoon-genre/"
|
||||
override val datePattern = "MMM d"
|
||||
|
||||
override suspend fun loadChapters(mangaUrl: String, document: Document): List<MangaChapter> {
|
||||
val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/"
|
||||
val dateFormat = SimpleDateFormat(datePattern, sourceLocale)
|
||||
val doc = webClient.httpPost(url, emptyMap()).parseHtml()
|
||||
|
||||
return doc.select("li.wp-manga-chapter").mapChapters(reversed = true) { i, li ->
|
||||
val a = li.selectFirstOrThrow("a")
|
||||
val href = a.attrAsRelativeUrl("href") + "?style=list"
|
||||
|
||||
// correct parse date missing a "."
|
||||
val date_org = li.selectFirst("span.chapter-release-date i")?.text() ?: "janv 1, 2000"
|
||||
val date_corect_parse = date_org
|
||||
.replace("Jan", "janv.")
|
||||
.replace("Févr", "févr.")
|
||||
.replace("Avr", "avr.")
|
||||
.replace("Juil", "juil.")
|
||||
.replace("Sept", "sept.")
|
||||
.replace("Nov", "nov.")
|
||||
.replace("Oct", "oct.")
|
||||
.replace("Déc", "déc.")
|
||||
MangaChapter(
|
||||
id = generateUid(href),
|
||||
url = href,
|
||||
name = a.text(),
|
||||
number = i + 1,
|
||||
branch = null,
|
||||
uploadDate = parseChapterDate(
|
||||
dateFormat,
|
||||
date_corect_parse,
|
||||
),
|
||||
scanlator = null,
|
||||
source = source,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.id
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("KLIKMANGA", "Klik Manga", "id")
|
||||
internal class KlikManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.KLIKMANGA, "klikmanga.id", 36) {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val tagPrefix = "genre/"
|
||||
override val datePattern = "MMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.id
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("MGKOMIK", "Mgkomik", "id")
|
||||
internal class Mgkomik(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MGKOMIK, "mgkomik.com", 20) {
|
||||
|
||||
override val tagPrefix = "genres/"
|
||||
override val datePattern = "dd MMM yy"
|
||||
override val sourceLocale: Locale = Locale.ENGLISH
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.id
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("POJOKMANGA", "PojokManga", "id")
|
||||
internal class PojokManga(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.POJOKMANGA, "pojokmanga.net") {
|
||||
|
||||
override val tagPrefix = "komik-genre/"
|
||||
override val datePattern = "MMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale.ENGLISH
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.id
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("SHINIGAMI", "Shinigami", "id")
|
||||
internal class Shinigami(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.SHINIGAMI, "shinigami.id", 10) {
|
||||
|
||||
override val tagPrefix = "genre/"
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale.ENGLISH
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.ko
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("RAWDEX", "Raw Dex", "ko")
|
||||
internal class RawDex(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.RAWDEX, "rawdex.net", 40) {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale.ENGLISH
|
||||
}
|
||||
@@ -4,14 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@MangaSourceParser("ARTHUR_SCAN", "Arthur Scan", "pt")
|
||||
internal class ArthurScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ARTHUR_SCAN, "arthurscan.xyz") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("pt", "PT")
|
||||
|
||||
}
|
||||
|
||||
@@ -5,11 +5,9 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
|
||||
@MangaSourceParser("ATLANTISSCAN", "Atlantisscan", "pt")
|
||||
internal class Atlantisscan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ATLANTISSCAN, "br.atlantisscan.com", pageSize = 50) {
|
||||
|
||||
override val datePattern = "dd/MM/yyyy"
|
||||
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
|
||||
@MangaSourceParser("CABAREDOWATAME", "Dessert Scan", "pt")
|
||||
internal class Cabaredowatame(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.CABAREDOWATAME, "cabaredowatame.site", 10) {
|
||||
|
||||
@@ -5,7 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
|
||||
@MangaSourceParser("CAFECOMYAOI", "Cafecom Yaoi", "pt")
|
||||
internal class CafecomYaoi(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.CAFECOMYAOI, "cafecomyaoi.com.br") {
|
||||
|
||||
@@ -4,13 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@MangaSourceParser("CERISE_SCANS", "Cerise Scans", "pt")
|
||||
internal class CeriseScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.CERISE_SCANS, "cerisescans.com") {
|
||||
|
||||
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||
override val sourceLocale: Locale = Locale("pt", "PT")
|
||||
}
|
||||
|
||||
@@ -4,14 +4,11 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@MangaSourceParser("FINALSCANS", "Final Scans", "pt")
|
||||
internal class FinalScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.FINALSCANS, "finalscans.com") {
|
||||
|
||||
override val datePattern: String = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("pt", "PT")
|
||||
override val isNsfwSource = true
|
||||
}
|
||||
|
||||
@@ -4,13 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@MangaSourceParser("FOXWHITE", "Fox White", "pt")
|
||||
internal class FoxWhite(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.FOXWHITE, "foxwhite.com.br") {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("pt", "PT")
|
||||
}
|
||||
|
||||
@@ -4,8 +4,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@MangaSourceParser("GEKKOU", "Gekkou", "pt")
|
||||
internal class Gekkou(context: MangaLoaderContext) :
|
||||
@@ -13,5 +11,4 @@ internal class Gekkou(context: MangaLoaderContext) :
|
||||
|
||||
override val tagPrefix = "genero/"
|
||||
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||
override val sourceLocale: Locale = Locale("pt", "PT")
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
|
||||
@MangaSourceParser("GOOFFANSUB", "Goof Fansub", "pt")
|
||||
internal class GoofFansub(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.GOOFFANSUB, "gooffansub.com") {
|
||||
|
||||
@@ -4,8 +4,6 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@MangaSourceParser("HENTAIGEKKOU", "Hentai Gekkou", "pt")
|
||||
internal class HentaiGekkou(context: MangaLoaderContext) :
|
||||
@@ -13,6 +11,5 @@ internal class HentaiGekkou(context: MangaLoaderContext) :
|
||||
|
||||
override val tagPrefix = "genero/"
|
||||
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||
override val sourceLocale: Locale = Locale("pt", "PT")
|
||||
override val isNsfwSource = true
|
||||
}
|
||||
|
||||
@@ -10,8 +10,6 @@ internal class Hentaiteca(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HENTAITECA, "hentaiteca.net", pageSize = 10) {
|
||||
|
||||
override val datePattern = "MM/dd/yyyy"
|
||||
|
||||
override val tagPrefix = "genero/"
|
||||
|
||||
override val isNsfwSource = true
|
||||
}
|
||||
|
||||
@@ -5,15 +5,11 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
|
||||
@MangaSourceParser("HIPERCOOL", "Hipercool", "pt")
|
||||
internal class Hipercool(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.HIPERCOOL, "hipercool.xyz", pageSize = 20) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
|
||||
override val tagPrefix = "manga-tag/"
|
||||
|
||||
override val isNsfwSource = true
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("ILLUSIONSCAN", "Illusion Scan", "pt")
|
||||
internal class IllusionScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ILLUSIONSCAN, "illusionscan.com") {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("IMPERIOSCANS", "Imperio Scans", "pt")
|
||||
internal class ImperioScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.IMPERIOSCANS, "imperioscans.com.br") {
|
||||
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("LEITORKAMISAMA", "Leitor Kamisama", "pt")
|
||||
internal class LeitorKamisama(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.LEITORKAMISAMA, "leitor.kamisama.com.br", 10) {
|
||||
|
||||
override val tagPrefix = "manga-tag/"
|
||||
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("LERYAOI", "LerYaoi", "pt")
|
||||
internal class LerYaoi(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.LERYAOI, "leryaoi.com", 10) {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val tagPrefix = "genero/"
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MOMONOHANASCAN", "Momonohana Scan", "pt")
|
||||
internal class MomonohanaScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MOMONOHANASCAN, "momonohanascan.com", 10) {
|
||||
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MOONLOVERSSCAN", "Moon Lovers Scan", "pt")
|
||||
internal class MoonLoversScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MOONLOVERSSCAN, "moonloversscan.com.br", 10) {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("MOONWITCHINLOVESCAN", "Moon Witchin Love Scan", "pt")
|
||||
internal class Moonwitchinlovescan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.MOONWITCHINLOVESCAN, "moonwitchinlovescan.com", 10) {
|
||||
|
||||
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||
}
|
||||
@@ -4,13 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@MangaSourceParser("NOCSUMMER", "Nocturne Summer", "pt")
|
||||
internal class Nocsummer(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.NOCSUMMER, "nocsummer.com.br", 18) {
|
||||
|
||||
override val datePattern = "dd 'de' MMMMM 'de' yyyy"
|
||||
override val sourceLocale: Locale = Locale("pt", "PT")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("NOINDEXSCAN", "Noindex Scan", "pt")
|
||||
internal class NoindexScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.NOINDEXSCAN, "noindexscan.com") {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("PEACHSCAN", "Peach Scan", "pt")
|
||||
internal class PeachScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.PEACHSCAN, "www.peachscan.com", 10) {
|
||||
|
||||
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("PIRULITOROSA", "Pirulitorosa", "pt")
|
||||
internal class Pirulitorosa(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.PIRULITOROSA, "pirulitorosa.site") {
|
||||
|
||||
override val postreq = true
|
||||
override val isNsfwSource = true
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("PORTALYAOI", "PortalYaoi", "pt")
|
||||
internal class PortalYaoi(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.PORTALYAOI, "portalyaoi.com", 10) {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val tagPrefix = "genero/"
|
||||
override val datePattern: String = "dd/MM"
|
||||
}
|
||||
@@ -4,12 +4,10 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
import java.util.Locale
|
||||
|
||||
@MangaSourceParser("PRISMA_HENTAI", "Prisma hentai", "pt")
|
||||
internal class Prismahentai(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.PRISMA_HENTAI, "prismahentai.com", 18) {
|
||||
|
||||
override val datePattern = "MMMM d, yyyy"
|
||||
override val sourceLocale: Locale = Locale("pt", "PT")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("PROJETOSCANLATOR", "Projeto Scanlator", "pt")
|
||||
internal class ProjetoScanlator(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.PROJETOSCANLATOR, "projetoscanlator.com", 10) {
|
||||
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("PSUNICORN", "Psunicorn", "pt")
|
||||
internal class Psunicorn(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.PSUNICORN, "psunicorn.com") {
|
||||
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern: String = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("RAINBOWFAIRYSCAN", "Rainbow Fairy Scan", "pt")
|
||||
internal class RainbowFairyScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.RAINBOWFAIRYSCAN, "rainbowfairyscan.com", 10) {
|
||||
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("RANDOMSCANS", "Random Scans", "pt")
|
||||
internal class RandomScans(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.RANDOMSCANS, "randomscans.com") {
|
||||
|
||||
override val datePattern: String = "MMMM d, yyyy"
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("ROGMANGAS", "Rog Mangas", "pt")
|
||||
internal class RogMangas(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.ROGMANGAS, "rogmangas.com", 51) {
|
||||
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("TANKOUHENTAI", "Tankou Hentai", "pt")
|
||||
internal class TankouHentai(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.TANKOUHENTAI, "tankouhentai.com", pageSize = 16) {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("THESUGARSCAN", "The Sugar Scan", "pt")
|
||||
internal class TheSugarScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.THESUGARSCAN, "thesugarscan.com", pageSize = 15) {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("VALKYRIESCAN", "Valkyrie Scan", "pt")
|
||||
internal class ValkyrieScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.VALKYRIESCAN, "valkyriescan.com", pageSize = 10) {
|
||||
|
||||
override val isNsfwSource = true
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("WINTERSCAN", "Winter Scan", "pt")
|
||||
internal class WinterScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.WINTERSCAN, "winterscan.com", pageSize = 20) {
|
||||
|
||||
override val datePattern: String = "dd 'de' MMMMM 'de' yyyy"
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package org.koitharu.kotatsu.parsers.site.madara.pt
|
||||
|
||||
|
||||
import org.koitharu.kotatsu.parsers.MangaLoaderContext
|
||||
import org.koitharu.kotatsu.parsers.MangaSourceParser
|
||||
import org.koitharu.kotatsu.parsers.model.MangaSource
|
||||
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
|
||||
|
||||
@MangaSourceParser("WONDERLANDSCAN", "Wonderland Scan", "pt")
|
||||
internal class WonderlandScan(context: MangaLoaderContext) :
|
||||
MadaraParser(context, MangaSource.WONDERLANDSCAN, "wonderlandscan.com") {
|
||||
|
||||
override val datePattern: String = "dd/MM/yyyy"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user