Add new source

pull/203/head
devi 3 years ago
parent 07df5a81cf
commit d05d5fa911

@ -50,14 +50,62 @@ internal abstract class MadaraParser(
protected val ongoing: Array<String> = arrayOf( protected val ongoing: Array<String> = arrayOf(
"مستمرة", "En curso", "En Curso","Ongoing", "OnGoing","On going", "مستمرة",
"Ativo", "En Cours", "En cours", "Đang tiến hành", "Em lançamento", "em lançamento", "Em Lançamento", "Онгоінг", "Publishing", "En curso",
"Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating", "En Curso",
"Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中",) "Ongoing",
"OnGoing",
"On going",
"Ativo",
"En Cours",
"En cours",
"En cours \uD83D\uDFE2",
"Đ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",
"Lançando",
"In Arrivo",
"Emision",
"En emision",
"مستمر",
"Curso",
"En marcha",
"Publicandose",
"连载中",
)
protected val finished: Array<String> = arrayOf( protected val finished: Array<String> = arrayOf(
"Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", "Completed",
"Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结",) "Completo",
"Complété",
"Fini",
"Terminé",
"Terminé ⚫",
"Tamamlandı",
"Đã hoàn thành",
"مكتملة",
"Завершено",
"Finished",
"Finalizado",
"Completata",
"One-Shot",
"Bitti",
"Tamat",
"Completado",
"Concluído",
"Concluido",
"已完结",
)
override suspend fun getListPage( override suspend fun getListPage(
@ -102,16 +150,17 @@ internal abstract class MadaraParser(
}.orEmpty(), }.orEmpty(),
author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(),
state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()?.trim() state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()?.trim()
?.lowercase()) ?.lowercase()) {
{ "مستمرة", "En curso", "En Curso", "Ongoing", "OnGoing", "On going",
"مستمرة", "En curso", "En Curso","Ongoing", "OnGoing","On going",
"Ativo", "En Cours", "En cours", "Đang tiến hành", "Em lançamento", "em lançamento", "Em Lançamento", "Онгоінг", "Publishing", "Ativo", "En Cours", "En cours", "Đ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", "Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating",
"Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中", "Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中",
-> MangaState.ONGOING -> MangaState.ONGOING
"Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", "Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено",
"Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结",
-> MangaState.FINISHED -> MangaState.FINISHED
else -> null else -> null
}, },
source = source, source = source,
@ -152,25 +201,29 @@ internal abstract class MadaraParser(
val testchekasync = doc.body().select("div.listing-chapters_wrap") val testchekasync = doc.body().select("div.listing-chapters_wrap")
val chaptersDeferred = if(testchekasync.isNullOrEmpty()) val chaptersDeferred = if (testchekasync.isNullOrEmpty()) {
{
async { loadChapters(manga.url) } async { loadChapters(manga.url) }
}else } else {
{
async { getChapters(manga, doc) } async { getChapters(manga, doc) }
} }
val desc = doc.body().selectFirst("div.description-summary div.summary__content") ?: val desc = doc.body().selectFirst("div.description-summary div.summary__content") ?: doc.body()
doc.body().selectFirst("div.summary_content div.post-content_item > h5 + div") ?: .selectFirst("div.summary_content div.post-content_item > h5 + div") ?: doc.body()
doc.body().selectFirst("div.summary_content div.manga-excerpt") .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 stateselect = 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(Status) > div.summary-content").last() ?: doc.body()
?: 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() .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(Stato) > div.summary-content").last() ?: doc.body().select("div.post-content_item:contains(حالة العمل) > 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(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() ?: doc.body().select("div.summary-content").last()
val state = val state =
@ -190,10 +243,12 @@ internal abstract class MadaraParser(
source = source, source = source,
) )
}, },
description = desc?.select("p")?.filterNot { it.ownText().startsWith("A brief description") }?.joinToString { it.text() }, description = desc?.select("p")?.filterNot { it.ownText().startsWith("A brief description") }
?.joinToString { it.text() },
altTitle = altTitle =
doc.body().select(".post-content_item:contains(Alt) .summary-content").firstOrNull()?.tableValue()?.text()?.trim() ?: doc.body().select(".post-content_item:contains(Alt) .summary-content").firstOrNull()?.tableValue()?.text()
doc.body().select(".post-content_item:contains(Nomes alternativos: ) .summary-content").firstOrNull()?.tableValue()?.text()?.trim(), ?.trim() ?: doc.body().select(".post-content_item:contains(Nomes alternativos: ) .summary-content")
.firstOrNull()?.tableValue()?.text()?.trim(),
state = state, state = state,
chapters = chaptersDeferred.await(), chapters = chaptersDeferred.await(),
) )
@ -281,6 +336,16 @@ internal abstract class MadaraParser(
date.startsWith("il y a", ignoreCase = true) -> { date.startsWith("il y a", ignoreCase = true) -> {
parseRelativeDate(date) parseRelativeDate(date)
} }
// Handle translated short 'ago'
date.endsWith(" h", ignoreCase = true) -> {
parseRelativeDate(date)
}
date.endsWith(" d", ignoreCase = true) -> {
parseRelativeDate(date)
}
date.endsWith(" mins", ignoreCase = true) -> {
parseRelativeDate(date)
}
// Handle 'yesterday' and 'today', using midnight // Handle 'yesterday' and 'today', using midnight
date.startsWith("year", ignoreCase = true) -> { date.startsWith("year", ignoreCase = true) -> {
Calendar.getInstance().apply { Calendar.getInstance().apply {
@ -330,16 +395,17 @@ internal abstract class MadaraParser(
"día", "día",
"dia", "dia",
"day", "day",
"d",
).anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis ).anyWordIn(date) -> cal.apply { add(Calendar.DAY_OF_MONTH, -number) }.timeInMillis
WordSet("jam", "saat", "heure", "hora", "hour").anyWordIn(date) -> cal.apply { WordSet("jam", "saat", "heure", "hora", "hour", "h").anyWordIn(date) -> cal.apply {
add( add(
Calendar.HOUR, Calendar.HOUR,
-number, -number,
) )
}.timeInMillis }.timeInMillis
WordSet("menit", "dakika", "min", "minute", "minuto").anyWordIn(date) -> cal.apply { WordSet("menit", "dakika", "min", "minute", "minuto", "mins").anyWordIn(date) -> cal.apply {
add( add(
Calendar.MINUTE, Calendar.MINUTE,
-number, -number,

@ -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("AZORANOV", "Azoranov", "ar")
internal class Azoranov(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.AZORANOV, "azoranov.com", pageSize = 10,) {
override val tagPrefix = "novel-genre/"
override val datePattern = "MMMM d, yyyy"
override val sourceLocale: Locale = Locale("ar", "AR")
}

@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGALEK", "MangaLek", "ar") @MangaSourceParser("MANGALEK", "MangaLek", "ar")
internal class MangaLek(context: MangaLoaderContext) : MadaraParser( internal class MangaLek(context: MangaLoaderContext) : MadaraParser(
context, MangaSource.MANGALEK, "mangalek.com", context, MangaSource.MANGALEK, "mangalek.com",
pageSize = 10, 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("ANSHSCANS", "Ansh Scans", "en")
internal class AnshScans(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ANSHSCANS, "anshscans.org", 10){
override val tagPrefix = "genre/"
}

@ -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("BABELWUXIA", "Babelwuxia", "en")
internal class Babelwuxia(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.BABELWUXIA, "read.babelwuxia.com") {
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("CM_READER", "Cm Reader", "en")
internal class CmReader(context: MangaLoaderContext) : MadaraParser(context, MangaSource.CM_READER, "cmreader.info") {
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("COFFEE_MANGA", "Coffee Manga", "en")
internal class CoffeeManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.COFFEE_MANGA, "coffeemanga.io") {
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("COLORED_MANGA", "Colored Manga", "en")
internal class ColoredManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.COLORED_MANGA, "coloredmanga.com") {
override val tagPrefix = "manga-tag"
override val datePattern = "dd-MMM"
}

@ -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("DARK_SCANS", "DarkScans", "en")
internal class DarkScans(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.DARK_SCANS, "darkscans.com", 18) {
override val datePattern = "MMMM d, yyyy"
}

@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("HARIMANGA", "HariManga", "en") @MangaSourceParser("HARIMANGA", "HariManga", "en")
internal class HariManga(context: MangaLoaderContext) : internal class HariManga(context: MangaLoaderContext) :
MadaraParser( context, MangaSource.HARIMANGA, "harimanga.com", pageSize = 10,) { MadaraParser(context, MangaSource.HARIMANGA, "harimanga.com", pageSize = 10) {
override val datePattern = "MMMM d, yyyy" override val datePattern = "MMMM d, yyyy"
} }

@ -9,7 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("HENTAI20", "Hentai20", "en") @MangaSourceParser("HENTAI20", "Hentai20", "en")
internal class Hentai20(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAI20, "hentai20.io") { internal class Hentai20(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAI20, "hentai20.io") {
override val tagPrefix = "manga-genre/"
override val isNsfwSource = true override val isNsfwSource = true
} }

@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGACV", "Manga Cv", "en") @MangaSourceParser("MANGACV", "Manga Cv", "en")
internal class MangaCv(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGACV, "mangacv.com", pageSize = 10,) internal class MangaCv(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGACV, "mangacv.com", pageSize = 10)

@ -7,6 +7,7 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGAEFFECT", "MangaEffect", "en") @MangaSourceParser("MANGAEFFECT", "MangaEffect", "en")
internal class MangaEffect(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAEFFECT, "mangaeffect.com") { internal class MangaEffect(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGAEFFECT, "mangaeffect.com") {
override val datePattern = "dd.MM.yyyy" override val datePattern = "dd.MM.yyyy"
} }

@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGA_KOMI", "MangaKomi", "en") @MangaSourceParser("MANGA_KOMI", "MangaKomi", "en")
internal class MangaKomi(context: MangaLoaderContext) : MadaraParser( context, MangaSource.MANGA_KOMI, "mangakomi.io", pageSize = 18,) internal class MangaKomi(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGA_KOMI, "mangakomi.io", pageSize = 18)

@ -8,7 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGA_MANHUA", "Manga Manhua", "en") @MangaSourceParser("MANGA_MANHUA", "Manga Manhua", "en")
internal class MangaManhua(context: MangaLoaderContext) : internal class MangaManhua(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGA_MANHUA, "mangamanhua.online", pageSize = 10) MadaraParser(context, MangaSource.MANGA_MANHUA, "mangamanhua.online", pageSize = 10) {
{
override val datePattern = "d MMMM، yyyy" override val datePattern = "d MMMM، yyyy"
} }

@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGAROCK", "MangaRock", "en") @MangaSourceParser("MANGAROCK", "MangaRock", "en")
internal class MangaRock(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAROCK, "mangarockteam.com") internal class MangaRock(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGAROCK, "mangarockteam.com")

@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGAWEEBS", "MangaWeebs", "en") @MangaSourceParser("MANGAWEEBS", "MangaWeebs", "en")
internal class MangaWeebs(context: MangaLoaderContext) : internal class MangaWeebs(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGAWEEBS, "mangaweebs.in", pageSize = 20,) { MadaraParser(context, MangaSource.MANGAWEEBS, "mangaweebs.in", pageSize = 20) {
override val datePattern = "dd MMMM HH:mm" override val datePattern = "dd MMMM HH:mm"
} }

@ -7,6 +7,7 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANGACLASH", "Mangaclash", "en") @MangaSourceParser("MANGACLASH", "Mangaclash", "en")
internal class Mangaclash(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGACLASH, "mangaclash.com", pageSize = 18,) { internal class Mangaclash(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGACLASH, "mangaclash.com", pageSize = 18) {
override val datePattern = "MM/dd/yyyy" override val datePattern = "MM/dd/yyyy"
} }

@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANHWACLAN", "ManhwaClan", "en") @MangaSourceParser("MANHWACLAN", "ManhwaClan", "en")
internal class ManhwaClan(context: MangaLoaderContext) : MadaraParser( context, MangaSource.MANHWACLAN, "manhwaclan.com", pageSize = 10,) internal class ManhwaClan(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANHWACLAN, "manhwaclan.com", pageSize = 10)

@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("MANHWAKOOL", "Manhwa Kool", "en") @MangaSourceParser("MANHWAKOOL", "Manhwa Kool", "en")
internal class ManhwaKool(context: MangaLoaderContext) : MadaraParser( context, MangaSource.MANHWAKOOL, "manhwakool.com", pageSize = 10,) { internal class ManhwaKool(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANHWAKOOL, "manhwakool.com", pageSize = 10) {
override val datePattern: String = "MMMM d, yyyy" override val datePattern: String = "MMMM d, yyyy"
} }

@ -0,0 +1,14 @@
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.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("PARAGONSCANS", "Paragonscans", "en")
internal class Paragonscans(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.PARAGONSCANS, "paragonscans.com", pageSize = 50) {
override val datePattern = "MM/dd/yyyy"
}

@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("STKISSMANGA", "Stkissmanga", "en") @MangaSourceParser("STKISSMANGA", "Stkissmanga", "en")
internal class Stkissmanga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.STKISSMANGA, "1stkissmanga.me") internal class Stkissmanga(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.STKISSMANGA, "1stkissmanga.me")

@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("TOONILY", "Toonily", "en") @MangaSourceParser("TOONILY", "Toonily", "en")
internal class Toonily(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TOONILY, "toonily.com", pageSize = 18,) { internal class Toonily(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.TOONILY, "toonily.com", pageSize = 18) {
override val tagPrefix = "webtoon-genre/" override val tagPrefix = "webtoon-genre/"

@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("TOPMANHUA", "Top Manhua", "en") @MangaSourceParser("TOPMANHUA", "Top Manhua", "en")
internal class TopManhua(context: MangaLoaderContext) : MadaraParser(context, MangaSource.TOPMANHUA, "www.topmanhua.com") { internal class TopManhua(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.TOPMANHUA, "www.topmanhua.com") {
override val tagPrefix = "manhua-genre/" override val tagPrefix = "manhua-genre/"
override val datePattern = "MM/dd/yyyy" override val datePattern = "MM/dd/yyyy"

@ -7,7 +7,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("ZINMANGA", "ZINMANGA", "en") @MangaSourceParser("ZINMANGA", "ZINMANGA", "en")
internal class Zinmanga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ZINMANGA, "zinmanga.com") internal class Zinmanga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ZINMANGA, "zinmanga.com") {
{
override val datePattern = "MM/dd/yyyy" override val datePattern = "MM/dd/yyyy"
} }

@ -9,6 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
internal class AiyuMangaScanlation(context: MangaLoaderContext) : internal class AiyuMangaScanlation(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.AIYUMANGASCANLATION, "aiyumangascanlation.com") { MadaraParser(context, MangaSource.AIYUMANGASCANLATION, "aiyumangascanlation.com") {
override val tagPrefix = "manga-genre/"
override val datePattern = "MM/dd/yyyy" override val datePattern = "MM/dd/yyyy"
} }

@ -0,0 +1,15 @@
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
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")
}

@ -0,0 +1,15 @@
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
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")
}

@ -0,0 +1,15 @@
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
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")
}

@ -0,0 +1,15 @@
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
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,17 @@
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
import java.util.Locale
@MangaSourceParser("MANGASORIGINES", "Mangas Origines", "fr")
internal class MangasOrigines(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGASORIGINES, "mangas-origines.xyz") {
override val datePattern = "MMMM d, yyyy"
override val sourceLocale: Locale = Locale.FRENCH
}

@ -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("KOMIKSA", "Komiksay", "id")
internal class Komiksay(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.KOMIKSA, "komiksay.site") {
override val tagPrefix = "komik-genre/"
override val datePattern = "MMMM d"
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("WORLDMANHWAS", "Worldmanhwas", "id")
internal class Worldmanhwas(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.WORLDMANHWAS, "worldmanhwas.bar", 10) {
override val tagPrefix = "komik-genre/"
override val datePattern = "MMMM d, yyyy"
override val sourceLocale: Locale = Locale.ENGLISH
}

@ -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("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")
}

@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("ATLANTISSCAN", "Atlantisscan", "pt") @MangaSourceParser("ATLANTISSCAN", "Atlantisscan", "pt")
internal class Atlantisscan(context: MangaLoaderContext) : internal class Atlantisscan(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.ATLANTISSCAN, "br.atlantisscan.com", pageSize = 10) { MadaraParser(context, MangaSource.ATLANTISSCAN, "br.atlantisscan.com", pageSize = 50) {
override val datePattern = "dd/MM/yyyy" override val datePattern = "dd/MM/yyyy"

@ -0,0 +1,18 @@
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("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")
}

@ -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("NEOX_SCANS", "Neox scans", "pt")
internal class Neoxscans(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.NEOX_SCANS, "neoxscans.net", 18) {
override val datePattern = "dd/MM/yyyy"
}

@ -9,7 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
internal class PrismaScansParser(context: MangaLoaderContext) : internal class PrismaScansParser(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.PRISMA_SCANS, "prismascans.net", 10) { MadaraParser(context, MangaSource.PRISMA_SCANS, "prismascans.net", 10) {
override val tagPrefix = "manga-genre/"
override val datePattern = "MMM dd, yyyy" override val datePattern = "MMM dd, 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
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")
}

@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.site.madara.MadaraParser
@MangaSourceParser("BAKAMAN", "BakaMan", "th") @MangaSourceParser("BAKAMAN", "BakaMan", "th")
internal class BakaMan(context: MangaLoaderContext) : MadaraParser( context, MangaSource.BAKAMAN, "bakaman.net", pageSize = 18,) { internal class BakaMan(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.BAKAMAN, "bakaman.net", pageSize = 18) {
override val isNsfwSource = false override val isNsfwSource = false
} }

@ -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("MANGAKEYFI", "Mangakeyfi", "tr")
internal class Mangakeyfi(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGAKEYFI, "mangakeyfi.net", 20) {
override val tagPrefix = "mangalar-genre/"
override val datePattern = "d MMMM yyyy"
override val sourceLocale: Locale = Locale("tr")
}

@ -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("MANGASEHRI", "Mangasehri", "tr")
internal class Mangasehri(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.MANGASEHRI, "mangasehri.com", 18) {
override val datePattern = "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
import java.util.Locale
@MangaSourceParser("MANGAWT", "Mangawt", "tr")
internal class Mangawt(context: MangaLoaderContext) : MadaraParser(context, MangaSource.MANGAWT, "mangawt.com") {
override val datePattern = "MMMM d, yyyy"
override val sourceLocale: Locale = Locale("tr")
}

@ -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("WEBTOONHATTI", "Webtoonhatti", "tr")
internal class Webtoonhatti(context: MangaLoaderContext) :
MadaraParser(context, MangaSource.WEBTOONHATTI, "webtoonhatti.com", 20) {
override val tagPrefix = "webtoon-tur/"
override val datePattern = "d MMMM"
override val sourceLocale: Locale = Locale("tr")
}

@ -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("WEBTOONTR", "Webtoontr", "tr")
internal class Webtoontr(context: MangaLoaderContext) : MadaraParser(context, MangaSource.WEBTOONTR, "webtoon-tr.com", 16) {
override val tagPrefix = "webtoon-kategori/"
override val datePattern = "dd/MM/yyyy"
}

@ -14,7 +14,6 @@ import java.text.SimpleDateFormat
import java.util.* import java.util.*
internal abstract class MangaReaderParser( internal abstract class MangaReaderParser(
context: MangaLoaderContext, context: MangaLoaderContext,
source: MangaSource, source: MangaSource,
@ -61,38 +60,36 @@ internal abstract class MangaReaderParser(
val tagMap = getOrCreateTagMap() val tagMap = getOrCreateTagMap()
val selecttag = if(tablemode != null) val selecttag = if (tablemode != null) {
{
tablemode.select(".seriestugenre > a") tablemode.select(".seriestugenre > a")
}else } else {
{
docs.select(".wd-full .mgen > a") docs.select(".wd-full .mgen > a")
} }
val tags = selecttag.mapNotNullToSet { tagMap[it.text()] } val tags = selecttag.mapNotNullToSet { tagMap[it.text()] }
val stateselect = if(tablemode != null) val stateselect = if (tablemode != null) {
{ tablemode.selectFirst(".infotable td:contains(Status)")
tablemode.selectFirst(".infotable td:contains(Status)") ?: tablemode.selectFirst(".infotable td:contains(Statut)") ?: tablemode.selectFirst(".infotable td:contains(Statut)")
?: tablemode.selectFirst(".infotable td:contains(حالة العمل)") ?: tablemode.selectFirst(".infotable td:contains(Estado)") ?: tablemode.selectFirst(".infotable td:contains(حالة العمل)")
?: docs.selectFirst(".infotable td:contains(สถานะ)") ?: tablemode.selectFirst(".infotable td:contains(Stato )") ?: tablemode.selectFirst(".infotable td:contains(Estado)")
?: tablemode.selectFirst(".infotable td:contains(Durum)") ?: tablemode.selectFirst(".infotable td:contains(Statüsü)") ?: docs.selectFirst(".infotable td:contains(สถานะ)")
?: tablemode.selectFirst(".infotable td:contains(Stato )")
?: tablemode.selectFirst(".infotable td:contains(Durum)")
?: tablemode.selectFirst(".infotable td:contains(Statüsü)")
}else } else {
{
docs.selectFirst(".tsinfo div:contains(Status)") ?: docs.selectFirst(".tsinfo div:contains(Statut)") docs.selectFirst(".tsinfo div:contains(Status)") ?: docs.selectFirst(".tsinfo div:contains(Statut)")
?: docs.selectFirst(".tsinfo div:contains(حالة العمل)") ?: docs.selectFirst(".tsinfo div:contains(Estado)") ?: docs.selectFirst(".tsinfo div:contains(حالة العمل)") ?: docs.selectFirst(".tsinfo div:contains(Estado)")
?: docs.selectFirst(".tsinfo div:contains(สถานะ)") ?: docs.selectFirst(".tsinfo div:contains(Stato )") ?: docs.selectFirst(".tsinfo div:contains(สถานะ)") ?: docs.selectFirst(".tsinfo div:contains(Stato )")
?: docs.selectFirst(".tsinfo div:contains(Durum)") ?: docs.selectFirst(".tsinfo div:contains(Statüsü)") ?: docs.selectFirst(".tsinfo div:contains(Durum)") ?: docs.selectFirst(".tsinfo div:contains(Statüsü)")
} }
val state = if(tablemode != null) val state = if (tablemode != null) {
{
stateselect?.lastElementSibling() stateselect?.lastElementSibling()
}else } else {
{
stateselect?.lastElementChild() stateselect?.lastElementChild()
} }
@ -104,28 +101,29 @@ internal abstract class MangaReaderParser(
"Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating", "Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating",
"Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中", "Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中",
-> MangaState.ONGOING -> MangaState.ONGOING
"Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", "Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено",
"Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结",
-> MangaState.FINISHED -> MangaState.FINISHED
else -> null else -> null
} }
} }
val author = tablemode?.selectFirst(".infotable td:contains(Author)")?.lastElementSibling()?.text()
val author = tablemode?.selectFirst(".infotable td:contains(Author)")?.lastElementSibling()?.text()?: ?: docs.selectFirst(".tsinfo div:contains(Author)")?.lastElementChild()?.text()
docs.selectFirst(".tsinfo div:contains(Author)")?.lastElementChild()?.text() ?: ?: docs.selectFirst(".tsinfo div:contains(Auteur)")?.lastElementChild()?.text()
docs.selectFirst(".tsinfo div:contains(Auteur)")?.lastElementChild()?.text() ?: ?: docs.selectFirst(".tsinfo div:contains(Artist)")?.lastElementChild()?.text()
docs.selectFirst(".tsinfo div:contains(Artist)")?.lastElementChild()?.text() ?: ?: docs.selectFirst(".tsinfo div:contains(Durum)")?.lastElementChild()?.text()
docs.selectFirst(".tsinfo div:contains(Durum)")?.lastElementChild()?.text()
val nsfw = docs.selectFirst(".restrictcontainer") != null val nsfw = docs.selectFirst(".restrictcontainer") != null
|| docs.selectFirst(".info-right .alr") != null || docs.selectFirst(".info-right .alr") != null
|| docs.selectFirst(".postbody .alr") != null || docs.selectFirst(".postbody .alr") != null
return manga.copy( return manga.copy(
description = tablemode?.selectFirst("div.entry-content")?.html() ?: description = tablemode?.selectFirst("div.entry-content")?.html() ?: docs.selectFirst("div.entry-content")
docs.selectFirst("div.entry-content")?.html(), ?.html(),
state = mangaState, state = mangaState,
author = author, author = author,
isNsfw = manga.isNsfw || nsfw, isNsfw = manga.isNsfw || nsfw,
@ -215,8 +213,7 @@ internal abstract class MangaReaderParser(
val docs = webClient.httpGet(chapterUrl).parseHtml() val docs = webClient.httpGet(chapterUrl).parseHtml()
val test = docs.select("script:containsData(ts_reader)") val test = docs.select("script:containsData(ts_reader)")
if(test.isNullOrEmpty()) if (test.isNullOrEmpty()) {
{
return docs.select("div#readerarea img").map { img -> return docs.select("div#readerarea img").map { img ->
val url = img.imageUrl() val url = img.imageUrl()
MangaPage( MangaPage(
@ -226,8 +223,7 @@ internal abstract class MangaReaderParser(
source = source, source = source,
) )
} }
}else } else {
{
val script = docs.selectFirstOrThrow("script:containsData(ts_reader)") val script = docs.selectFirstOrThrow("script:containsData(ts_reader)")
val images = JSONObject(script.data().substringAfter('(').substringBeforeLast(')')) val images = JSONObject(script.data().substringAfter('(').substringBeforeLast(')'))
.getJSONArray("sources") .getJSONArray("sources")
@ -250,8 +246,6 @@ internal abstract class MangaReaderParser(
} }
} }
override suspend fun getTags(): Set<MangaTag> { override suspend fun getTags(): Set<MangaTag> {

@ -0,0 +1,20 @@
package org.koitharu.kotatsu.parsers.site.mangareader.ar
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.text.SimpleDateFormat
import java.util.*
@MangaSourceParser("GALAXYMANGA", "Galaxymanga", "ar")
internal class Galaxymanga(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.GALAXYMANGA, pageSize = 40, searchPageSize = 30) {
override val configKeyDomain: ConfigKey.Domain
get() = ConfigKey.Domain("galaxymanga.org")
override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("ar", "AR"))
}

@ -0,0 +1,20 @@
package org.koitharu.kotatsu.parsers.site.mangareader.ar
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.text.SimpleDateFormat
import java.util.*
@MangaSourceParser("MANGAATREND", "Mangaatrend", "ar")
internal class Mangaatrend(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.MANGAATREND, pageSize = 40, searchPageSize = 20) {
override val configKeyDomain: ConfigKey.Domain
get() = ConfigKey.Domain("mangaatrend.net")
override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("ar", "AR"))
}

@ -0,0 +1,23 @@
package org.koitharu.kotatsu.parsers.site.mangareader.en
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.text.SimpleDateFormat
import java.util.Locale
@MangaSourceParser("LUNAR_SCAN", "Lunar Scan", "en")
internal class LunarScan(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.LUNAR_SCAN, pageSize = 20, searchPageSize = 20) {
override val configKeyDomain: ConfigKey.Domain
get() = ConfigKey.Domain("lunarscan.org")
override val listUrl = "/series"
override val isNsfwSource: Boolean = true
override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM dd, yyyy", Locale.ENGLISH)
}

@ -0,0 +1,18 @@
package org.koitharu.kotatsu.parsers.site.mangareader.tr
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaSourceParser
import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser
import java.text.SimpleDateFormat
import java.util.*
@MangaSourceParser("AYATOON", "Ayatoon", "tr")
internal class Ayatoon(context: MangaLoaderContext) :
MangaReaderParser(context, MangaSource.AYATOON, pageSize = 20, searchPageSize = 20) {
override val configKeyDomain: ConfigKey.Domain
get() = ConfigKey.Domain("ayatoon.com")
override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale("tr"))
}
Loading…
Cancel
Save