From d05d5fa911b0de5d755cd8ea91a9a999d802d609 Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 1 Jul 2023 18:33:05 +0200 Subject: [PATCH 01/13] Add new source --- .../kotatsu/parsers/site/MangaInUaParser.kt | 14 +-- .../parsers/site/NicovideoSeigaParser.kt | 2 +- .../parsers/site/madara/MadaraParser.kt | 118 ++++++++++++++---- .../parsers/site/madara/ar/Azoranov.kt | 17 +++ .../parsers/site/madara/ar/MangaLek.kt | 2 +- .../parsers/site/madara/en/AnshScans.kt | 14 +++ .../parsers/site/madara/en/Babelwuxia.kt | 13 ++ .../parsers/site/madara/en/CmReader.kt | 13 ++ .../parsers/site/madara/en/CoffeeManga.kt | 13 ++ .../parsers/site/madara/en/ColoredManga.kt | 14 +++ .../parsers/site/madara/en/DarkScans.kt | 13 ++ .../parsers/site/madara/en/HariManga.kt | 2 +- .../parsers/site/madara/en/Hentai20.kt | 2 - .../kotatsu/parsers/site/madara/en/MangaCv.kt | 3 +- .../parsers/site/madara/en/MangaEffect.kt | 3 +- .../parsers/site/madara/en/MangaKomi.kt | 3 +- .../parsers/site/madara/en/MangaManhua.kt | 3 +- .../parsers/site/madara/en/MangaRock.kt | 3 +- .../parsers/site/madara/en/MangaWeebs.kt | 2 +- .../parsers/site/madara/en/Mangaclash.kt | 3 +- .../parsers/site/madara/en/ManhwaClan.kt | 3 +- .../parsers/site/madara/en/ManhwaKool.kt | 3 +- .../parsers/site/madara/en/Paragonscans.kt | 14 +++ .../parsers/site/madara/en/Stkissmanga.kt | 3 +- .../kotatsu/parsers/site/madara/en/Toonily.kt | 3 +- .../parsers/site/madara/en/TopManhua.kt | 3 +- .../parsers/site/madara/en/Zinmanga.kt | 3 +- .../site/madara/es/AiyuMangaScanlation.kt | 1 - .../parsers/site/madara/es/ApollComics.kt | 15 +++ .../parsers/site/madara/es/Copypastescan.kt | 15 +++ .../kotatsu/parsers/site/madara/es/Daprob.kt | 15 +++ .../parsers/site/madara/es/MundoManhwa.kt | 15 +++ .../parsers/site/madara/fr/MangasOrigines.kt | 17 +++ .../parsers/site/madara/id/Komiksay.kt | 16 +++ .../parsers/site/madara/id/Worldmanhwas.kt | 16 +++ .../parsers/site/madara/pt/ArthurScan.kt | 17 +++ .../parsers/site/madara/pt/Atlantisscan.kt | 2 +- .../parsers/site/madara/pt/CeriseScans.kt | 18 +++ .../parsers/site/madara/pt/Neoxscans.kt | 13 ++ .../site/madara/pt/PrismaScansParser.kt | 1 - .../parsers/site/madara/pt/Prismahentai.kt | 15 +++ .../kotatsu/parsers/site/madara/th/BakaMan.kt | 3 +- .../parsers/site/madara/tr/Mangakeyfi.kt | 17 +++ .../parsers/site/madara/tr/Mangasehri.kt | 13 ++ .../kotatsu/parsers/site/madara/tr/Mangawt.kt | 15 +++ .../parsers/site/madara/tr/Webtoonhatti.kt | 17 +++ .../parsers/site/madara/tr/Webtoontr.kt | 13 ++ .../site/mangareader/MangaReaderParser.kt | 56 ++++----- .../site/mangareader/ar/Galaxymanga.kt | 20 +++ .../site/mangareader/ar/Mangaatrend.kt | 20 +++ .../parsers/site/mangareader/en/LunarScan.kt | 23 ++++ .../parsers/site/mangareader/tr/Ayatoon.kt | 18 +++ 52 files changed, 592 insertions(+), 88 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Babelwuxia.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DarkScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Paragonscans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ApollComics.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Copypastescan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Daprob.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MundoManhwa.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Komiksay.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Worldmanhwas.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArthurScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CeriseScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Neoxscans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangakeyfi.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangasehri.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoonhatti.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Galaxymanga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Mangaatrend.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LunarScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Ayatoon.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaInUaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaInUaParser.kt index 5852ac4ad..58c808170 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaInUaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaInUaParser.kt @@ -32,13 +32,13 @@ class MangaInUaParser(context: MangaLoaderContext) : PagedMangaParser( ): List { val url = when { !query.isNullOrEmpty() -> ( - "/index.php?do=search" + - "&subaction=search" + - "&search_start=$page" + - "&full_search=1" + - "&story=$query" + - "&titleonly=3" - ).toAbsoluteUrl(domain) + "/index.php?do=search" + + "&subaction=search" + + "&search_start=$page" + + "&full_search=1" + + "&story=$query" + + "&titleonly=3" + ).toAbsoluteUrl(domain) tags.isNullOrEmpty() -> "/mangas/page/$page".toAbsoluteUrl(domain) tags.size == 1 -> "${tags.first().key}/page/$page" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NicovideoSeigaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NicovideoSeigaParser.kt index 96d4ddde8..2682fa9b7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NicovideoSeigaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NicovideoSeigaParser.kt @@ -48,7 +48,7 @@ class NicovideoSeigaParser(context: MangaLoaderContext) : !query.isNullOrEmpty() -> return if (offset == 0) getSearchList(query, page) else emptyList() tags.isNullOrEmpty() -> "https://$domain/manga/list?page=$page&sort=${getSortKey(sortOrder)}" tags.size == 1 -> "https://$domain/manga/list?category=${tags.first().key}&page=$page" + - "&sort=${getSortKey(sortOrder)}" + "&sort=${getSortKey(sortOrder)}" tags.size > 1 -> throw IllegalArgumentException("This source supports only 1 category") else -> "https://$domain/manga/list?page=$page&sort=${getSortKey(sortOrder)}" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index 786a8167d..bb87d2a22 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -50,14 +50,62 @@ internal abstract class MadaraParser( protected val ongoing: Array = 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", - "Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating", - "Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中",) + "مستمرة", + "En curso", + "En Curso", + "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 = arrayOf( - "Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", - "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结",) + "Completed", + "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( @@ -102,16 +150,17 @@ internal abstract class MadaraParser( }.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", + ?.lowercase()) { + "مستمرة", "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", "Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating", "Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中", -> MangaState.ONGOING + "Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", -> MangaState.FINISHED + else -> null }, source = source, @@ -152,25 +201,29 @@ internal abstract class MadaraParser( val testchekasync = doc.body().select("div.listing-chapters_wrap") - val chaptersDeferred = if(testchekasync.isNullOrEmpty()) - { + val chaptersDeferred = if (testchekasync.isNullOrEmpty()) { async { loadChapters(manga.url) } - }else - { + } else { 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.summary_content div.manga-excerpt") + 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 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.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() val state = @@ -182,7 +235,7 @@ internal abstract class MadaraParser( } } - manga.copy( + manga.copy( tags = doc.body().select("div.genres-content a").mapNotNullToSet { a -> MangaTag( key = a.attr("href").removeSuffix("/").substringAfterLast('/'), @@ -190,10 +243,12 @@ internal abstract class MadaraParser( 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 = - 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(), + 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(), ) @@ -281,6 +336,16 @@ internal abstract class MadaraParser( date.startsWith("il y a", ignoreCase = true) -> { 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 date.startsWith("year", ignoreCase = true) -> { Calendar.getInstance().apply { @@ -330,16 +395,17 @@ internal abstract class MadaraParser( "día", "dia", "day", + "d", ).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( Calendar.HOUR, -number, ) }.timeInMillis - WordSet("menit", "dakika", "min", "minute", "minuto").anyWordIn(date) -> cal.apply { + WordSet("menit", "dakika", "min", "minute", "minuto", "mins").anyWordIn(date) -> cal.apply { add( Calendar.MINUTE, -number, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt new file mode 100644 index 000000000..e0f90815e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt @@ -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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLek.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLek.kt index f98c56353..9687732bc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLek.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/MangaLek.kt @@ -9,5 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGALEK", "MangaLek", "ar") internal class MangaLek(context: MangaLoaderContext) : MadaraParser( context, MangaSource.MANGALEK, "mangalek.com", - pageSize = 10, + pageSize = 20, ) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt new file mode 100644 index 000000000..1b8463ae4 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt @@ -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/" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Babelwuxia.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Babelwuxia.kt new file mode 100644 index 000000000..b1e10039e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Babelwuxia.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt new file mode 100644 index 000000000..0ca8f526e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CmReader.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt new file mode 100644 index 000000000..87d7374dc --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt new file mode 100644 index 000000000..2e4d181b9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DarkScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DarkScans.kt new file mode 100644 index 000000000..1c25c75dd --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DarkScans.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt index 048e6c5e1..500676721 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HariManga.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HARIMANGA", "HariManga", "en") 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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt index 41f6df330..d11d0ba9a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai20.kt @@ -9,7 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("HENTAI20", "Hentai20", "en") internal class Hentai20(context: MangaLoaderContext) : MadaraParser(context, MangaSource.HENTAI20, "hentai20.io") { - override val tagPrefix = "manga-genre/" - override val isNsfwSource = true } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt index ff1b094fc..6ffa9e8e9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaCv.kt @@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt index 3f8e14bd7..de30fcb3b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaEffect.kt @@ -7,6 +7,7 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt index 2c87a12c9..92dfdd83f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaKomi.kt @@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManhua.kt index 114147f81..81f0e3f70 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManhua.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaManhua.kt @@ -8,7 +8,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGA_MANHUA", "Manga Manhua", "en") 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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt index e9299d1c8..64eed44fd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRock.kt @@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaWeebs.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaWeebs.kt index 1b7401a6b..b4d90165f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaWeebs.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaWeebs.kt @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("MANGAWEEBS", "MangaWeebs", "en") 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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaclash.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaclash.kt index 056a4d539..0b7836f53 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaclash.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Mangaclash.kt @@ -7,6 +7,7 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt index dd7b87f51..da78a895d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaClan.kt @@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt index b50b56c0e..e82994c57 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ManhwaKool.kt @@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Paragonscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Paragonscans.kt new file mode 100644 index 000000000..607fb56fb --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Paragonscans.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt index 0cd5c59d5..00f80f8fb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Stkissmanga.kt @@ -7,4 +7,5 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt index d70a1281f..89dde668c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Toonily.kt @@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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/" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TopManhua.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TopManhua.kt index 7e753c76a..ca6ab0398 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TopManhua.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/TopManhua.kt @@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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 datePattern = "MM/dd/yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt index f27d10679..8beaa82ac 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Zinmanga.kt @@ -7,7 +7,6 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt index 9711d45e2..862d43eb5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/AiyuMangaScanlation.kt @@ -9,6 +9,5 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class AiyuMangaScanlation(context: MangaLoaderContext) : MadaraParser(context, MangaSource.AIYUMANGASCANLATION, "aiyumangascanlation.com") { - override val tagPrefix = "manga-genre/" override val datePattern = "MM/dd/yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ApollComics.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ApollComics.kt new file mode 100644 index 000000000..d7b025aec --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/ApollComics.kt @@ -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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Copypastescan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Copypastescan.kt new file mode 100644 index 000000000..379a7dfca --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Copypastescan.kt @@ -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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Daprob.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Daprob.kt new file mode 100644 index 000000000..553d4d3a4 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Daprob.kt @@ -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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MundoManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MundoManhwa.kt new file mode 100644 index 000000000..efee4a557 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MundoManhwa.kt @@ -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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt new file mode 100644 index 000000000..2bc220319 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt @@ -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 + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Komiksay.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Komiksay.kt new file mode 100644 index 000000000..e24036bf2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Komiksay.kt @@ -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 +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Worldmanhwas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Worldmanhwas.kt new file mode 100644 index 000000000..881f15496 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Worldmanhwas.kt @@ -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 +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArthurScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArthurScan.kt new file mode 100644 index 000000000..a61e359e9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/ArthurScan.kt @@ -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") + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atlantisscan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atlantisscan.kt index ab1a103a8..3bc6594e9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atlantisscan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Atlantisscan.kt @@ -8,7 +8,7 @@ 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 = 10) { + MadaraParser(context, MangaSource.ATLANTISSCAN, "br.atlantisscan.com", pageSize = 50) { override val datePattern = "dd/MM/yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CeriseScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CeriseScans.kt new file mode 100644 index 000000000..74f487362 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CeriseScans.kt @@ -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") + + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Neoxscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Neoxscans.kt new file mode 100644 index 000000000..87061c7b4 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Neoxscans.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PrismaScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PrismaScansParser.kt index fb55202f2..d00b01c7c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PrismaScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/PrismaScansParser.kt @@ -9,7 +9,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class PrismaScansParser(context: MangaLoaderContext) : MadaraParser(context, MangaSource.PRISMA_SCANS, "prismascans.net", 10) { - override val tagPrefix = "manga-genre/" override val datePattern = "MMM dd, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt new file mode 100644 index 000000000..78c4118da --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Prismahentai.kt @@ -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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt index 9e0d7de1a..c40ee49a3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt @@ -7,7 +7,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @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 } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangakeyfi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangakeyfi.kt new file mode 100644 index 000000000..9f05e4193 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangakeyfi.kt @@ -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") + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangasehri.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangasehri.kt new file mode 100644 index 000000000..e2308e379 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangasehri.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt new file mode 100644 index 000000000..a4c6ad5c6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Mangawt.kt @@ -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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoonhatti.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoonhatti.kt new file mode 100644 index 000000000..7ba8ad389 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoonhatti.kt @@ -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") + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt new file mode 100644 index 000000000..35d7fc090 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt @@ -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" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt index f4ea4e9a1..3e13c1a74 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt @@ -14,7 +14,6 @@ import java.text.SimpleDateFormat import java.util.* - internal abstract class MangaReaderParser( context: MangaLoaderContext, source: MangaSource, @@ -61,38 +60,36 @@ internal abstract class MangaReaderParser( val tagMap = getOrCreateTagMap() - val selecttag = if(tablemode != null) - { + val selecttag = if (tablemode != null) { tablemode.select(".seriestugenre > a") - }else - { + } else { docs.select(".wd-full .mgen > a") } val tags = selecttag.mapNotNullToSet { tagMap[it.text()] } - val stateselect = if(tablemode != null) - { - tablemode.selectFirst(".infotable td:contains(Status)") ?: tablemode.selectFirst(".infotable td:contains(Statut)") - ?: tablemode.selectFirst(".infotable td:contains(حالة العمل)") ?: tablemode.selectFirst(".infotable td:contains(Estado)") - ?: docs.selectFirst(".infotable td:contains(สถานะ)") ?: tablemode.selectFirst(".infotable td:contains(Stato )") - ?: tablemode.selectFirst(".infotable td:contains(Durum)") ?: tablemode.selectFirst(".infotable td:contains(Statüsü)") + val stateselect = if (tablemode != null) { + tablemode.selectFirst(".infotable td:contains(Status)") + ?: tablemode.selectFirst(".infotable td:contains(Statut)") + ?: tablemode.selectFirst(".infotable td:contains(حالة العمل)") + ?: tablemode.selectFirst(".infotable td:contains(Estado)") + ?: 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(حالة العمل)") ?: docs.selectFirst(".tsinfo div:contains(Estado)") ?: docs.selectFirst(".tsinfo div:contains(สถานะ)") ?: docs.selectFirst(".tsinfo div:contains(Stato )") ?: 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() - }else - { + } else { stateselect?.lastElementChild() } @@ -104,28 +101,29 @@ internal abstract class MangaReaderParser( "Devam Ediyor", "Em Andamento", "In Corso", "Güncel", "Berjalan", "Продолжается", "Updating", "Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "连载中", -> MangaState.ONGOING + "Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", -> MangaState.FINISHED + else -> null } } - - val author = tablemode?.selectFirst(".infotable td:contains(Author)")?.lastElementSibling()?.text()?: - docs.selectFirst(".tsinfo div:contains(Author)")?.lastElementChild()?.text() ?: - docs.selectFirst(".tsinfo div:contains(Auteur)")?.lastElementChild()?.text() ?: - docs.selectFirst(".tsinfo div:contains(Artist)")?.lastElementChild()?.text() ?: - docs.selectFirst(".tsinfo div:contains(Durum)")?.lastElementChild()?.text() + val author = tablemode?.selectFirst(".infotable td:contains(Author)")?.lastElementSibling()?.text() + ?: docs.selectFirst(".tsinfo div:contains(Author)")?.lastElementChild()?.text() + ?: docs.selectFirst(".tsinfo div:contains(Auteur)")?.lastElementChild()?.text() + ?: docs.selectFirst(".tsinfo div:contains(Artist)")?.lastElementChild()?.text() + ?: docs.selectFirst(".tsinfo div:contains(Durum)")?.lastElementChild()?.text() val nsfw = docs.selectFirst(".restrictcontainer") != null || docs.selectFirst(".info-right .alr") != null || docs.selectFirst(".postbody .alr") != null return manga.copy( - description = tablemode?.selectFirst("div.entry-content")?.html() ?: - docs.selectFirst("div.entry-content")?.html(), + description = tablemode?.selectFirst("div.entry-content")?.html() ?: docs.selectFirst("div.entry-content") + ?.html(), state = mangaState, author = author, isNsfw = manga.isNsfw || nsfw, @@ -215,8 +213,7 @@ internal abstract class MangaReaderParser( val docs = webClient.httpGet(chapterUrl).parseHtml() val test = docs.select("script:containsData(ts_reader)") - if(test.isNullOrEmpty()) - { + if (test.isNullOrEmpty()) { return docs.select("div#readerarea img").map { img -> val url = img.imageUrl() MangaPage( @@ -226,8 +223,7 @@ internal abstract class MangaReaderParser( source = source, ) } - }else - { + } else { val script = docs.selectFirstOrThrow("script:containsData(ts_reader)") val images = JSONObject(script.data().substringAfter('(').substringBeforeLast(')')) .getJSONArray("sources") @@ -250,8 +246,6 @@ internal abstract class MangaReaderParser( } - - } override suspend fun getTags(): Set { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Galaxymanga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Galaxymanga.kt new file mode 100644 index 000000000..b4073c422 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Galaxymanga.kt @@ -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")) + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Mangaatrend.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Mangaatrend.kt new file mode 100644 index 000000000..75d6083d5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Mangaatrend.kt @@ -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")) + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LunarScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LunarScan.kt new file mode 100644 index 000000000..fb6cf7464 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/LunarScan.kt @@ -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) +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Ayatoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Ayatoon.kt new file mode 100644 index 000000000..2145155d1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Ayatoon.kt @@ -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")) +} From 1e98104ecae3b7e5f5c0908cbd7f58b6a87e539b Mon Sep 17 00:00:00 2001 From: devi Date: Sat, 1 Jul 2023 21:02:20 +0200 Subject: [PATCH 02/13] Add new source and add new scrapper for Chapter on theme madara --- .../parsers/site/madara/MadaraParser.kt | 23 +++++++++++++++---- .../parsers/site/madara/ar/Azoranov.kt | 2 +- .../parsers/site/madara/en/AdultWebtoon.kt | 18 +++++++++++++++ .../parsers/site/madara/en/AnshScans.kt | 3 ++- .../parsers/site/madara/en/Astrallibrary.kt | 16 +++++++++++++ .../parsers/site/madara/en/BlogManga.kt | 16 +++++++++++++ .../parsers/site/madara/en/BoysLove.kt | 18 +++++++++++++++ .../parsers/site/madara/en/CoffeeManga.kt | 3 ++- .../parsers/site/madara/en/ColoredManga.kt | 3 ++- .../parsers/site/madara/fr/Hentaizone.kt | 3 ++- .../parsers/site/madara/pt/CafecomYaoi.kt | 15 ++++++++++++ .../parsers/site/madara/ru/BestManga.kt | 16 +++++++++++++ .../kotatsu/parsers/site/madara/tr/Anikiga.kt | 19 +++++++++++++++ .../parsers/site/madara/tr/AnisaManga.kt | 17 ++++++++++++++ .../parsers/site/madara/tr/ArazNovel.kt | 18 +++++++++++++++ .../parsers/site/madara/tr/Webtoontr.kt | 3 ++- 16 files changed, 182 insertions(+), 11 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index bb87d2a22..eb3b0a334 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -33,6 +33,8 @@ internal abstract class MadaraParser( protected open val isNsfwSource = false protected open val datePattern = "MMMM dd, yyyy" + protected open val postreq = false + init { paginator.firstPage = 0 searchPaginator.firstPage = 0 @@ -202,8 +204,7 @@ internal abstract class MadaraParser( val testchekasync = doc.body().select("div.listing-chapters_wrap") val chaptersDeferred = if (testchekasync.isNullOrEmpty()) { - async { loadChapters(manga.url) } - + async { loadChapters(manga.url, doc) } } else { async { getChapters(manga, doc) } } @@ -277,10 +278,20 @@ internal abstract class MadaraParser( } } - protected open suspend fun loadChapters(mangaUrl: String): List { - val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" + protected open suspend fun loadChapters(mangaUrl: String, document: Document): List { + + val doc = if (postreq == false) { + val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" + webClient.httpPost(url, emptyMap()).parseHtml() + } else { + val mangaId = document.select("div#manga-chapters-holder").attr("data-id") + val url = "https://$domain/wp-admin/admin-ajax.php" + val postdata = "action=manga_get_chapters&manga=$mangaId" + + webClient.httpPost(url, postdata).parseHtml() + } 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.selectFirst("a") val href = a?.attrAsRelativeUrlOrNull("href") ?: li.parseFailed("Link is missing") @@ -340,9 +351,11 @@ internal abstract class MadaraParser( date.endsWith(" h", ignoreCase = true) -> { parseRelativeDate(date) } + date.endsWith(" d", ignoreCase = true) -> { parseRelativeDate(date) } + date.endsWith(" mins", ignoreCase = true) -> { parseRelativeDate(date) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt index e0f90815e..911cdcee3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/Azoranov.kt @@ -9,7 +9,7 @@ import java.util.Locale @MangaSourceParser("AZORANOV", "Azoranov", "ar") internal class Azoranov(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.AZORANOV, "azoranov.com", pageSize = 10,) { + MadaraParser(context, MangaSource.AZORANOV, "azoranov.com", pageSize = 10) { override val tagPrefix = "novel-genre/" override val datePattern = "MMMM d, yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt new file mode 100644 index 000000000..0a98cf756 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AdultWebtoon.kt @@ -0,0 +1,18 @@ +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("ADULT_WEBTOON", "Adult Webtoon", "en") +internal class AdultWebtoon(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ADULT_WEBTOON, "adultwebtoon.com") { + + override val isNsfwSource = true + override val tagPrefix = "adult-webtoon-genre/" + override val datePattern = "MMMM d, yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt index 1b8463ae4..32ef0bdad 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/AnshScans.kt @@ -7,7 +7,8 @@ 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){ +internal class AnshScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ANSHSCANS, "anshscans.org", 10) { override val tagPrefix = "genre/" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt new file mode 100644 index 000000000..5e3b40948 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Astrallibrary.kt @@ -0,0 +1,16 @@ +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("ASTRALLIBRARY", "Astrallibrary", "en") +internal class Astrallibrary(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ASTRALLIBRARY, "astrallibrary.net", 18) { + + override val datePattern = "dd MMM" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt new file mode 100644 index 000000000..7f8ca4aca --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BlogManga.kt @@ -0,0 +1,16 @@ +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("BLOG_MANGA", "Blog Manga", "en") +internal class BlogManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.BLOG_MANGA, "blogmanga.net") { + + override val datePattern = "MMMM d, yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt new file mode 100644 index 000000000..420cb1682 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/BoysLove.kt @@ -0,0 +1,18 @@ +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("BOYS_LOVE", "Boys Love", "en") +internal class BoysLove(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.BOYS_LOVE, "boyslove.me", 20) { + + override val isNsfwSource = true + override val tagPrefix = "boyslove-genre/" + override val datePattern = "MMMM d, yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt index 87d7374dc..03f680bc1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/CoffeeManga.kt @@ -7,7 +7,8 @@ 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") { +internal class CoffeeManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.COFFEE_MANGA, "coffeemanga.io") { override val datePattern = "MMMM d, yyyy" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt index 2e4d181b9..34e2e5370 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt @@ -7,7 +7,8 @@ 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") { +internal class ColoredManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.COLORED_MANGA, "coloredmanga.com") { override val tagPrefix = "manga-tag" override val datePattern = "dd-MMM" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt index 09a64cab2..eae757e67 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt @@ -1,5 +1,6 @@ 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 @@ -20,7 +21,7 @@ internal class Hentaizone(context: MangaLoaderContext) : override val isNsfwSource = true - override suspend fun loadChapters(mangaUrl: String): List { + override suspend fun loadChapters(mangaUrl: String, document: Document): List { val url = mangaUrl.toAbsoluteUrl(domain).removeSuffix('/') + "/ajax/chapters/" val dateFormat = SimpleDateFormat(datePattern, sourceLocale) val doc = webClient.httpPost(url, emptyMap()).parseHtml() diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt new file mode 100644 index 000000000..bcd5623d5 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CafecomYaoi.kt @@ -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("CAFECOMYAOI", "Cafecom Yaoi", "pt") +internal class CafecomYaoi(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.CAFECOMYAOI, "cafecomyaoi.com.br") { + + override val datePattern = "dd/MM/yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt new file mode 100644 index 000000000..41666ea25 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ru/BestManga.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.ru + + +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("BEST_MANGA", "best manga", "ru") +internal class BestManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.BEST_MANGA, "bestmanga.club") { + + override val datePattern = "dd.MM.yyyy" + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt new file mode 100644 index 000000000..041760691 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt @@ -0,0 +1,19 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale + + +@MangaSourceParser("ANIKIGA", "Anikiga", "tr") +internal class Anikiga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ANIKIGA, "anikiga.com") { + + override val tagPrefix = "manga-tur" + override val datePattern = "d MMMM yyyy" + override val sourceLocale: Locale = Locale("tr") + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt new file mode 100644 index 000000000..5fd765eb9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/AnisaManga.kt @@ -0,0 +1,17 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale + + +@MangaSourceParser("ANISA_MANGA", "Anisa Manga", "tr") +internal class AnisaManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ANISA_MANGA, "anisamanga.com") { + + override val datePattern = "MMMM d, yyyy" + override val sourceLocale: Locale = Locale("tr") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt new file mode 100644 index 000000000..bef1fafa3 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/ArazNovel.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale + + +@MangaSourceParser("ARAZNOVEL", "Araz Novel", "tr") +internal class ArazNovel(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ARAZNOVEL, "araznovel.com", 10) { + + override val datePattern = "d MMMM yyyy" + override val sourceLocale: Locale = Locale("tr") + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt index 35d7fc090..37d6a5cca 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Webtoontr.kt @@ -7,7 +7,8 @@ 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) { +internal class Webtoontr(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.WEBTOONTR, "webtoon-tr.com", 16) { override val tagPrefix = "webtoon-kategori/" override val datePattern = "dd/MM/yyyy" } From a9ebc372f646d226f2766dfe9c53b8cbca9ba7c2 Mon Sep 17 00:00:00 2001 From: devi Date: Sun, 2 Jul 2023 12:03:07 +0200 Subject: [PATCH 03/13] Add 10 new source --- .../parsers/site/madara/MadaraParser.kt | 6 ++++-- .../parsers/site/madara/ar/WebtoonEmpire.kt | 16 ++++++++++++++++ .../parsers/site/madara/en/DecadenceScans.kt | 15 +++++++++++++++ .../parsers/site/madara/en/DrakeScans.kt | 15 +++++++++++++++ .../parsers/site/madara/en/FreeMangaTop.kt | 12 ++++++++++++ .../parsers/site/madara/es/DokkoManga.kt | 15 +++++++++++++++ .../parsers/site/madara/es/EmperorScan.kt | 15 +++++++++++++++ .../kotatsu/parsers/site/madara/es/Eromiau.kt | 16 ++++++++++++++++ .../kotatsu/parsers/site/madara/th/BakaMan.kt | 5 +---- .../parsers/site/madara/tr/DiamondFansub.kt | 18 ++++++++++++++++++ .../kotatsu/parsers/site/madara/tr/EsoManga.kt | 15 +++++++++++++++ .../kotatsu/parsers/site/madara/tr/Manwe.kt | 16 ++++++++++++++++ 12 files changed, 158 insertions(+), 6 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/WebtoonEmpire.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DecadenceScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DrakeScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeMangaTop.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DokkoManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Eromiau.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DiamondFansub.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Manwe.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index eb3b0a334..714e1bde0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -84,6 +84,7 @@ internal abstract class MadaraParser( "En marcha", "Publicandose", "连载中", + "Devam ediyor", ) protected val finished: Array = arrayOf( @@ -107,6 +108,7 @@ internal abstract class MadaraParser( "Concluído", "Concluido", "已完结", + "Bitmiş", ) @@ -156,11 +158,11 @@ internal abstract class MadaraParser( "مستمرة", "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", "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", "连载中", "Devam ediyor", -> MangaState.ONGOING "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", "已完结", "Bitmiş", -> MangaState.FINISHED else -> null diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/WebtoonEmpire.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/WebtoonEmpire.kt new file mode 100644 index 000000000..4f78264cc --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/WebtoonEmpire.kt @@ -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 +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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DecadenceScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DecadenceScans.kt new file mode 100644 index 000000000..c496f7276 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DecadenceScans.kt @@ -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("DECADENCESCANS", "Decadence Scans", "en") +internal class DecadenceScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.DECADENCESCANS, "reader.decadencescans.com", 10) { + + override val datePattern = "MMMM d, yyyy" + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DrakeScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DrakeScans.kt new file mode 100644 index 000000000..cb66dcef9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/DrakeScans.kt @@ -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("DRAKESCANS", "Drake Scans", "en") +internal class DrakeScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.DRAKESCANS, "drakescans.com", 10) { + + override val datePattern = "dd/MM/yyyy" + override val tagPrefix = "series-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeMangaTop.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeMangaTop.kt new file mode 100644 index 000000000..99781ed6f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeMangaTop.kt @@ -0,0 +1,12 @@ +package org.koitharu.kotatsu.parsers.site.madara.pt + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("FREEMANGATOP", "Free Manga Top", "en") +internal class FreeMangaTop(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.FREEMANGATOP, "freemangatop.com") { + override val datePattern = "MM/dd/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DokkoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DokkoManga.kt new file mode 100644 index 000000000..194f9b0ac --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/DokkoManga.kt @@ -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("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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt new file mode 100644 index 000000000..7a7898cf2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/EmperorScan.kt @@ -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("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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Eromiau.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Eromiau.kt new file mode 100644 index 000000000..52f9cab40 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/Eromiau.kt @@ -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 +import java.util.Locale + +@MangaSourceParser("EROMIAU", "Eromiau", "es") +internal class Eromiau(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.EROMIAU, "www.eromiau.com", 10) { + + override val isNsfwSource = true + override val datePattern = "MMMM d, yyyy" + override val sourceLocale: Locale = Locale("es") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt index c40ee49a3..c47e4724a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/th/BakaMan.kt @@ -8,7 +8,4 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser @MangaSourceParser("BAKAMAN", "BakaMan", "th") internal class BakaMan(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.BAKAMAN, "bakaman.net", pageSize = 18) { - - override val isNsfwSource = false -} + MadaraParser(context, MangaSource.BAKAMAN, "bakaman.net", pageSize = 18) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DiamondFansub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DiamondFansub.kt new file mode 100644 index 000000000..1ab136f9d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/DiamondFansub.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale + + +@MangaSourceParser("DIAMONDFANSUB", "Diamond Fansub", "tr") +internal class DiamondFansub(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.DIAMONDFANSUB, "diamondfansub.com", 10) { + + override val datePattern = "d MMMM" + override val sourceLocale: Locale = Locale("tr") + override val tagPrefix = "seri-turu/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt new file mode 100644 index 000000000..bfc61a9b1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/EsoManga.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("ESOMANGA", "Eso Manga", "tr") +internal class EsoManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.ESOMANGA, "esomanga.com", 10) { + + override val postreq = true + override val datePattern = "dd/MM/yyyy" + override val tagPrefix = "manga-kategoriler/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Manwe.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Manwe.kt new file mode 100644 index 000000000..bedb11f2f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Manwe.kt @@ -0,0 +1,16 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale + +@MangaSourceParser("MANWE", "Manwe", "tr") +internal class Manwe(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANWE, "manwe.pro", 20) { + + override val datePattern = "MMMM d, yyyy" + override val sourceLocale: Locale = Locale("tr") + +} From 5ec7227886e905b3b6d9b668faa594bfc9b7651e Mon Sep 17 00:00:00 2001 From: devi Date: Sun, 2 Jul 2023 15:30:52 +0200 Subject: [PATCH 04/13] Add ScantradUnion --- .../kotatsu/parsers/site/ScantradUnion.kt | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt new file mode 100644 index 000000000..96e2cbcdc --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt @@ -0,0 +1,191 @@ +package org.koitharu.kotatsu.parsers.site + +import okhttp3.Headers +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.PagedMangaParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.model.* +import org.koitharu.kotatsu.parsers.network.UserAgents +import org.koitharu.kotatsu.parsers.util.* +import java.text.SimpleDateFormat +import java.util.* + +@MangaSourceParser("SCANTRADUNION", "Scantrad Union", "fr") +internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.SCANTRADUNION, 10) { + + override val sortOrders: Set = EnumSet.of( + SortOrder.ALPHABETICAL, + SortOrder.UPDATED, + ) + + override val configKeyDomain = ConfigKey.Domain("scantrad-union.com") + + override val headers: Headers = Headers.Builder() + .add("User-Agent", UserAgents.CHROME_DESKTOP) + .build() + + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + val url = buildString { + append("https://") + append(domain) + when { + !query.isNullOrEmpty() -> { + append("/page/") + append(page.toString()) + append("/?s=") + append(query.urlEncoded()) + + } + + !tags.isNullOrEmpty() -> { + append("/tag/") + for (tag in tags) { + append(tag.key) + append(',') + } + append("/page/") + append(page.toString()) + } + + else -> { + + if (sortOrder == SortOrder.ALPHABETICAL) { + append("/manga/") + append("/page/") + append(page.toString()) + } + + if (sortOrder == SortOrder.UPDATED) { + append("") + } + + } + } + } + val doc = webClient.httpGet(url).parseHtml() + if (doc.getElementById("dernierschapitres") != null) { + val root = doc.requireElementById("dernierschapitres") + return root.select("div.colonne") + .map { article -> + val href = article.selectFirstOrThrow("a.index-top4-a").attrAsAbsoluteUrl("href") + Manga( + id = generateUid(href), + title = article.select(".carteinfos a").text(), + altTitle = null, + url = href, + publicUrl = href.toAbsoluteUrl(domain), + rating = RATING_UNKNOWN, + isNsfw = false, + coverUrl = article.selectFirstOrThrow("img.attachment-thumbnail").attrAsAbsoluteUrl("src"), + tags = setOf(), + state = null, + author = null, + source = source, + ) + } + }else + { + val root = doc.requireElementById("main") + return root.select("article.post-outer") + .map { article -> + val href = article.selectFirstOrThrow("a.thumb-link").attrAsAbsoluteUrl("href") + Manga( + id = generateUid(href), + title = article.select(".index-post-header a").text(), + altTitle = null, + url = href, + publicUrl = href.toAbsoluteUrl(domain), + rating = RATING_UNKNOWN, + isNsfw = false, + coverUrl = article.selectFirstOrThrow("img").attrAsAbsoluteUrl("src"), + tags = setOf(), + state = null, + author = null, + source = source, + ) + } + } + + + } + + override suspend fun getDetails(manga: Manga): Manga { + val root = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml().requireElementById("main") + val dateFormat = SimpleDateFormat("dd-MM-yyyy", Locale.FRANCE) + + return manga.copy( + altTitle = root.select(".divider2:contains(Noms associés :)").firstOrNull()?.text(), + state = when (root.select(".label.label-primary")[2].text()) { + "En cours" -> MangaState.ONGOING + "Terminé", "Abondonné", "One Shot", -> MangaState.FINISHED + else -> null + }, + tags = root.select("div.project-details a[href*=tag]").mapNotNullToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix("/").substringAfterLast('/'), + title = a.text().toTitleCase(), + source = source, + ) + }, + author = root.select("div.project-details a[href*=auteur]").text(), + description = root.selectFirst("p.sContent")?.html(), + chapters = root.select("div.chapter-list li") + .mapChapters(reversed = true) { i, li -> + + val href = li.getElementsByTag("a").firstNotNullOf { a -> + a.attrAsAbsoluteUrlOrNull("href")?.takeIf { it.contains("https://$domain/read/") } + } + val name = li.select(".chapter-name").text() + val date = li.select(".name-chapter").first()!!.children().elementAt(2).text() + MangaChapter( + id = generateUid(href), + name = name, + number = i, + url = href, + scanlator = null, + uploadDate = dateFormat.tryParse(date), + branch = null, + source = source, + ) + }, + ) + } + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + val root = doc.body().selectFirst("#webtoon") + ?: throw ParseException("Root not found", fullUrl) + return root.select("img").map { img -> + val url = img.attr("data-src") ?: img.attr("src") ?: img.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } + + override suspend fun getTags(): Set { + val doc = webClient.httpGet("https://$domain/").parseHtml() + val body = doc.body() + val root = body.select(".asp_gochosen")[1] + val list = root?.select("option").orEmpty() + return list.mapNotNullToSet { li -> + + MangaTag( + key = li.text(), + title = li.text(), + source = source, + ) + } + } +} From 4192ffdbfe90f07d577143e734c1835d0bcc440e Mon Sep 17 00:00:00 2001 From: devi Date: Sun, 2 Jul 2023 15:31:24 +0200 Subject: [PATCH 05/13] Add ScantradUnion --- .../org/koitharu/kotatsu/parsers/site/ScantradUnion.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt index 96e2cbcdc..ef1aced60 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt @@ -90,8 +90,7 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con source = source, ) } - }else - { + } else { val root = doc.requireElementById("main") return root.select("article.post-outer") .map { article -> @@ -124,7 +123,7 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con altTitle = root.select(".divider2:contains(Noms associés :)").firstOrNull()?.text(), state = when (root.select(".label.label-primary")[2].text()) { "En cours" -> MangaState.ONGOING - "Terminé", "Abondonné", "One Shot", -> MangaState.FINISHED + "Terminé", "Abondonné", "One Shot" -> MangaState.FINISHED else -> null }, tags = root.select("div.project-details a[href*=tag]").mapNotNullToSet { a -> From 1998ceac5aa582414a9890211eeea821993e7525 Mon Sep 17 00:00:00 2001 From: devi Date: Sun, 2 Jul 2023 23:01:37 +0200 Subject: [PATCH 06/13] Add 3 new sources --- .../kotatsu/parsers/site/AnibelParser.kt | 11 ++- .../kotatsu/parsers/site/BentomangaParser.kt | 30 +++++- .../kotatsu/parsers/site/BlogTruyenParser.kt | 26 ++++- .../kotatsu/parsers/site/CloneMangaParser.kt | 20 +++- .../kotatsu/parsers/site/ComickFunParser.kt | 29 +++++- .../kotatsu/parsers/site/DesuMeParser.kt | 23 ++++- .../kotatsu/parsers/site/DoujinDesuParser.kt | 26 ++++- .../kotatsu/parsers/site/ExHentaiParser.kt | 30 +++++- .../kotatsu/parsers/site/HoneyMangaParser.kt | 21 +++- .../kotatsu/parsers/site/JapScanParser.kt | 31 +++++- .../kotatsu/parsers/site/MangaDexParser.kt | 30 +++++- .../kotatsu/parsers/site/MangaInUaParser.kt | 28 +++++- .../kotatsu/parsers/site/MangaTownParser.kt | 32 +++++- .../kotatsu/parsers/site/Manhwa18Parser.kt | 31 +++++- .../kotatsu/parsers/site/NHentaiParser.kt | 29 +++++- .../kotatsu/parsers/site/NetTruyenParser.kt | 29 +++++- .../parsers/site/NicovideoSeigaParser.kt | 34 ++++++- .../kotatsu/parsers/site/NineMangaParser.kt | 31 +++++- .../kotatsu/parsers/site/NudeMoonParser.kt | 25 ++++- .../kotatsu/parsers/site/RemangaParser.kt | 33 ++++++- .../kotatsu/parsers/site/ScantradUnion.kt | 34 ++++++- .../parsers/site/TruyentranhLHParser.kt | 25 ++++- .../kotatsu/parsers/site/UnionMangasParser.kt | 32 +++++- .../parsers/site/grouple/GroupleParser.kt | 33 ++++++- .../parsers/site/madara/MadaraParser.kt | 30 +++++- .../parsers/site/madara/en/MangaDistrict.kt | 11 ++- .../parsers/site/madara/en/MangaRead.kt | 19 +++- .../parsers/site/madara/fr/Hentaizone.kt | 9 +- .../parsers/site/madara/pt/Fbsquads.kt | 15 +++ .../parsers/site/madara/pt/FinalScans.kt | 17 ++++ .../site/mangareader/MangaReaderParser.kt | 25 ++++- .../site/mangareader/ar/Galaxymanga.kt | 2 +- .../site/mangareader/ar/Mangaatrend.kt | 2 +- .../parsers/site/mangareader/ar/Ozulscans.kt | 2 +- .../parsers/site/mangareader/ar/SwaTeam.kt | 97 +++++++++++++++++++ .../site/mangareader/es/CartelDeManhwas.kt | 2 +- .../mangareader/es/DragonTranslationParser.kt | 2 +- .../site/mangareader/es/GREMORYMANGAS.kt | 2 +- .../parsers/site/mangareader/es/MiauScan.kt | 2 +- .../parsers/site/mangareader/es/Raikiscan.kt | 2 +- .../site/mangareader/es/Senpaiediciones.kt | 2 +- .../site/mangareader/es/Shadowmangas.kt | 2 +- .../parsers/site/mangareader/fr/BananaScan.kt | 2 +- .../site/mangareader/fr/EpsilonscanParser.kt | 2 +- .../site/mangareader/fr/LegacyScansParser.kt | 2 +- .../site/mangareader/fr/PhenixscansParser.kt | 2 +- .../parsers/site/mangareader/fr/SushiScan.kt | 2 +- .../parsers/site/mangareader/id/Boosei.kt | 2 +- .../parsers/site/mangareader/id/Dojing.kt | 2 +- .../parsers/site/mangareader/id/Duniakomik.kt | 2 +- .../site/mangareader/id/KiryuuParser.kt | 2 +- .../site/mangareader/id/KomikIndoParser.kt | 2 +- .../site/mangareader/id/KomikManhwa.kt | 2 +- .../site/mangareader/id/KomikTapParser.kt | 2 +- .../parsers/site/mangareader/id/Komiku.kt | 2 +- .../parsers/site/mangareader/id/Lianscans.kt | 2 +- .../site/mangareader/id/MangaTaleParser.kt | 2 +- .../site/mangareader/id/ManhwaIndoParser.kt | 2 +- .../site/mangareader/id/ManhwalistParser.kt | 2 +- .../parsers/site/mangareader/id/Melokomik.kt | 2 +- .../parsers/site/mangareader/id/Mirrordesu.kt | 2 +- .../site/mangareader/id/SekaikomikParser.kt | 2 +- .../site/mangareader/id/Sektedoujin.kt | 2 +- .../parsers/site/mangareader/id/Sheakomik.kt | 2 +- .../site/mangareader/id/WestmangaParser.kt | 2 +- .../site/mangareader/it/Walpurgiscan.kt | 2 +- .../site/mangareader/pt/FranxxMangas.kt | 2 +- .../parsers/site/mangareader/pt/Mangaschan.kt | 2 +- .../site/mangareader/pt/Mundomangakun.kt | 2 +- .../site/mangareader/pt/Origamiorpheans.kt | 2 +- .../site/mangareader/pt/Silencescan.kt | 2 +- .../parsers/site/mangareader/pt/Tsundoku.kt | 2 +- .../site/mangareader/tr/AsuraTRParser.kt | 2 +- .../parsers/site/mangareader/tr/Ayatoon.kt | 2 +- .../parsers/site/mangareader/tr/Mangacim.kt | 2 +- .../mangareader/tr/TempestfansubParser.kt | 2 +- .../site/mangareader/tr/TurktoonParser.kt | 2 +- .../parsers/site/multichan/ChanParser.kt | 30 +++++- .../parsers/site/multichan/HenChanParser.kt | 9 +- .../parsers/site/multichan/YaoiChanParser.kt | 8 +- .../parsers/site/rulib/MangaLibParser.kt | 25 ++++- 81 files changed, 917 insertions(+), 141 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Fbsquads.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FinalScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/AnibelParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/AnibelParser.kt index 37be70e99..8841bf069 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/AnibelParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/AnibelParser.kt @@ -7,7 +7,14 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaParser import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.util.domain import org.koitharu.kotatsu.parsers.util.generateUid import org.koitharu.kotatsu.parsers.util.getDomain @@ -16,7 +23,7 @@ import org.koitharu.kotatsu.parsers.util.json.mapJSONIndexed import org.koitharu.kotatsu.parsers.util.json.mapJSONNotNull import org.koitharu.kotatsu.parsers.util.json.stringIterator import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl -import java.util.* +import java.util.EnumSet @MangaSourceParser("ANIBEL", "Anibel", "be") internal class AnibelParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.ANIBEL) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BentomangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BentomangaParser.kt index d05404726..9d63f27d1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BentomangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BentomangaParser.kt @@ -10,10 +10,34 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.assertNotNull +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.concatUrl +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.flattenTo +import org.koitharu.kotatsu.parsers.util.generateUid import org.koitharu.kotatsu.parsers.util.json.getIntOrDefault -import java.util.* +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.ownTextOrNull +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.textOrNull +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.urlBuilder +import java.util.Calendar +import java.util.EnumSet @MangaSourceParser("BENTOMANGA", "Bentomanga", "fr") internal class BentomangaParser(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.BENTOMANGA, 10) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BlogTruyenParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BlogTruyenParser.kt index 3f23e2134..18aac9b1b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BlogTruyenParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/BlogTruyenParser.kt @@ -10,10 +10,30 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +import 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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +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.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.oneOrThrowIfMany +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.selectLast +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale @MangaSourceParser("BLOGTRUYEN", "BlogTruyen", "vi") class BlogTruyenParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/CloneMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/CloneMangaParser.kt index 6603d0b46..48b8a9467 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/CloneMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/CloneMangaParser.kt @@ -5,9 +5,23 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaParser import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import java.util.* +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.MangaTag +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.styleValueOrNull +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import java.util.Collections @MangaSourceParser("CLONEMANGA", "CloneManga", "en") internal class CloneMangaParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.CLONEMANGA) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ComickFunParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ComickFunParser.kt index 92faac4bd..96c89aa13 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ComickFunParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ComickFunParser.kt @@ -7,11 +7,32 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaParser import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import org.koitharu.kotatsu.parsers.util.json.* +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.util.ChaptersListBuilder +import org.koitharu.kotatsu.parsers.util.appendAll +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.json.JSONIterator +import org.koitharu.kotatsu.parsers.util.json.asIterable +import org.koitharu.kotatsu.parsers.util.json.getDoubleOrDefault +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull +import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.json.mapJSONToSet +import org.koitharu.kotatsu.parsers.util.json.toJSONList +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.parseJsonArray +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale /** * https://api.comick.fun/docs/static/index.html diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/DesuMeParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/DesuMeParser.kt index e978da85b..20fec615b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/DesuMeParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/DesuMeParser.kt @@ -7,13 +7,30 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* +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.network.UserAgents -import org.koitharu.kotatsu.parsers.util.* +import org.koitharu.kotatsu.parsers.util.SuspendLazy +import org.koitharu.kotatsu.parsers.util.appendAll +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid import org.koitharu.kotatsu.parsers.util.json.mapJSON import org.koitharu.kotatsu.parsers.util.json.mapJSONIndexed import org.koitharu.kotatsu.parsers.util.json.mapJSONToSet -import java.util.* +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.parseJson +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import java.util.EnumSet @MangaSourceParser("DESUME", "Desu.me", "ru") internal class DesuMeParser(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.DESUME, 20) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/DoujinDesuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/DoujinDesuParser.kt index 60b5b2503..64e58bcab 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/DoujinDesuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/DoujinDesuParser.kt @@ -4,10 +4,30 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +import 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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +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.mapToSet +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.selectLast +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlBuilder +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet @MangaSourceParser("DOUJINDESU", "DoujinDesu", "id") class DoujinDesuParser(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.DOUJINDESU, pageSize = 18) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ExHentaiParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ExHentaiParser.kt index 8d3091f9c..46aacb9bb 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ExHentaiParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ExHentaiParser.kt @@ -10,9 +10,33 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.AuthRequiredException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import java.util.* +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.MangaTag +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.ChaptersListBuilder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.copyCookies +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.getCookies +import org.koitharu.kotatsu.parsers.util.insertCookies +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.styleValueOrNull +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.urlEncoded +import java.util.Collections import kotlin.math.pow private const val DOMAIN_UNAUTHORIZED = "e-hentai.org" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/HoneyMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/HoneyMangaParser.kt index 919530d25..3f57673bd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/HoneyMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/HoneyMangaParser.kt @@ -9,13 +9,28 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +import 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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid import org.koitharu.kotatsu.parsers.util.json.getStringOrNull import org.koitharu.kotatsu.parsers.util.json.mapJSON import org.koitharu.kotatsu.parsers.util.json.mapJSONIndexed +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.parseJsonArray +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale private const val PAGE_SIZE = 20 diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/JapScanParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/JapScanParser.kt index e2da92203..069c481fc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/JapScanParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/JapScanParser.kt @@ -8,13 +8,38 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.network.UserAgents -import org.koitharu.kotatsu.parsers.util.* +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +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.json.getStringOrNull import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.ownTextOrNull +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.parseJsonArray +import org.koitharu.kotatsu.parsers.util.parseRaw +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlBuilder +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale @MangaSourceParser("JAPSCAN", "JapScan", "fr") internal class JapScanParser(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.JAPSCAN, 30) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaDexParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaDexParser.kt index 55aa1cc04..ccf41f156 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaDexParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaDexParser.kt @@ -10,11 +10,33 @@ import org.koitharu.kotatsu.parsers.MangaParser import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import org.koitharu.kotatsu.parsers.util.json.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.ChaptersListBuilder +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.json.associateByKey +import org.koitharu.kotatsu.parsers.util.json.getFloatOrDefault +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull +import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.json.mapJSONToSet +import org.koitharu.kotatsu.parsers.util.json.toJSONList +import org.koitharu.kotatsu.parsers.util.json.values +import org.koitharu.kotatsu.parsers.util.nextOrNull +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.toIntUp +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale private const val PAGE_SIZE = 20 private const val CHAPTERS_FIRST_PAGE_SIZE = 120 diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaInUaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaInUaParser.kt index 58c808170..5c0e13340 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaInUaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaInUaParser.kt @@ -4,10 +4,32 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +import 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.MangaTag +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +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.mapToSet +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.styleValueOrNull +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.tryParse import java.text.SimpleDateFormat -import java.util.* +import java.util.Collections +import java.util.Locale private const val DEF_BRANCH_NAME = "Основний переклад" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaTownParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaTownParser.kt index c1ff0b0b7..350810299 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaTownParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/MangaTownParser.kt @@ -4,11 +4,37 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaParser import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +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.getDomain +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.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.selectOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.DateFormat import java.text.SimpleDateFormat -import java.util.* +import java.util.Calendar +import java.util.EnumSet +import java.util.Locale @MangaSourceParser("MANGATOWN", "MangaTown", "en") internal class MangaTownParser(context: MangaLoaderContext) : MangaParser(context, MangaSource.MANGATOWN) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/Manhwa18Parser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/Manhwa18Parser.kt index 590f96242..fd949c735 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/Manhwa18Parser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/Manhwa18Parser.kt @@ -5,9 +5,34 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import java.util.* +import org.koitharu.kotatsu.parsers.model.Favicon +import org.koitharu.kotatsu.parsers.model.Favicons +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.SuspendLazy +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toRelativeUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.urlEncoded +import java.util.Calendar +import java.util.EnumSet +import java.util.Locale @MangaSourceParser("MANHWA18", "Manhwa18", "en") class Manhwa18Parser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NHentaiParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NHentaiParser.kt index da782400f..e40539117 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NHentaiParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NHentaiParser.kt @@ -9,10 +9,33 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +import 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.MangaTag +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.flattenTo +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.selectLastOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toCamelCase +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale @MangaSourceParser("NHENTAI", "N-Hentai") class NHentaiParser(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.NHENTAI, pageSize = 25) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NetTruyenParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NetTruyenParser.kt index a551485cd..12a3a2213 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NetTruyenParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NetTruyenParser.kt @@ -9,10 +9,33 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.NotFoundException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.model.WordSet +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toRelativeUrl +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.Calendar +import java.util.EnumSet +import java.util.Locale @MangaSourceParser("NETTRUYEN", "NetTruyen", "vi") class NetTruyenParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NicovideoSeigaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NicovideoSeigaParser.kt index 2682fa9b7..4225bd25a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NicovideoSeigaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NicovideoSeigaParser.kt @@ -1,11 +1,37 @@ package org.koitharu.kotatsu.parsers.site -import org.koitharu.kotatsu.parsers.* +import org.koitharu.kotatsu.parsers.InternalParsersApi +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaParser +import org.koitharu.kotatsu.parsers.MangaParserAuthProvider +import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.AuthRequiredException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* -import java.util.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.getCookies +import org.koitharu.kotatsu.parsers.util.getDomain +import org.koitharu.kotatsu.parsers.util.host +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.selectOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toIntUp +import java.util.EnumSet private const val STATUS_ONGOING = "連載" private const val STATUS_FINISHED = "完結" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NineMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NineMangaParser.kt index 4634819b6..e6a54c3e7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NineMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NineMangaParser.kt @@ -7,10 +7,35 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +import 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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +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.insertCookies +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.substringBetween +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toCamelCase +import org.koitharu.kotatsu.parsers.util.toRelativeUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.Calendar +import java.util.Collections +import java.util.Locale internal abstract class NineMangaParser( context: MangaLoaderContext, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt index 5b2d4b206..0f66bf5c9 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/NudeMoonParser.kt @@ -6,10 +6,29 @@ import org.koitharu.kotatsu.parsers.MangaParserAuthProvider import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.AuthRequiredException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +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.MangaTag +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +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.getCookies +import org.koitharu.kotatsu.parsers.util.insertCookies +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.substringBetweenFirst +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale private const val MAX_THUMB_INDEX = 19 diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/RemangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/RemangaParser.kt index adb163111..89592f51a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/RemangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/RemangaParser.kt @@ -11,14 +11,39 @@ import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.ContentUnavailableException import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.network.UserAgents -import org.koitharu.kotatsu.parsers.util.* -import org.koitharu.kotatsu.parsers.util.json.* +import org.koitharu.kotatsu.parsers.util.copyCookies +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.find +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.getCookies +import org.koitharu.kotatsu.parsers.util.getDomain +import org.koitharu.kotatsu.parsers.util.json.getBooleanOrDefault +import org.koitharu.kotatsu.parsers.util.json.getIntOrDefault +import org.koitharu.kotatsu.parsers.util.json.getStringOrNull +import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.json.mapJSONTo +import org.koitharu.kotatsu.parsers.util.json.mapJSONToSet +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.net.URLDecoder import java.text.DateFormat import java.text.SimpleDateFormat -import java.util.* +import java.util.Date +import java.util.EnumSet +import java.util.Locale private const val PAGE_SIZE = 30 private const val STATUS_ONGOING = 1 diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt index ef1aced60..edc2b68aa 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt @@ -6,11 +6,32 @@ import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.network.UserAgents -import org.koitharu.kotatsu.parsers.util.* +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +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.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale @MangaSourceParser("SCANTRADUNION", "Scantrad Union", "fr") internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.SCANTRADUNION, 10) { @@ -141,7 +162,12 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con val href = li.getElementsByTag("a").firstNotNullOf { a -> a.attrAsAbsoluteUrlOrNull("href")?.takeIf { it.contains("https://$domain/read/") } } - val name = li.select(".chapter-name").text() + + val name = if (li.select(".chapter-name").isNullOrEmpty()) { + li.select(".chapter-name").text() + } else { + "Chapter $i" + } val date = li.select(".name-chapter").first()!!.children().elementAt(2).text() MangaChapter( id = generateUid(href), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/TruyentranhLHParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/TruyentranhLHParser.kt index e2671b4fa..0af1b15de 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/TruyentranhLHParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/TruyentranhLHParser.kt @@ -8,10 +8,29 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +import 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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlBuilder import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale @MangaSourceParser("TRUYENTRANHLH", "TruyentranhLH", "vi") class TruyentranhLHParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/UnionMangasParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/UnionMangasParser.kt index 9df669315..32cb84e2a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/UnionMangasParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/UnionMangasParser.kt @@ -5,12 +5,38 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +import 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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +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.json.getStringOrNull import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.oneOrThrowIfMany +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.parseJson +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.selectLast +import org.koitharu.kotatsu.parsers.util.selectLastOrThrow +import org.koitharu.kotatsu.parsers.util.selectOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlBuilder import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale @MangaSourceParser("UNION_MANGAS", "Union Mangás", "pt") class UnionMangasParser(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.UNION_MANGAS, 40) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/GroupleParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/GroupleParser.kt index 630810c38..b92ce6fb5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/GroupleParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/grouple/GroupleParser.kt @@ -16,11 +16,38 @@ import org.koitharu.kotatsu.parsers.MangaParserAuthProvider import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.AuthRequiredException import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.concatUrl +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.getCookies import org.koitharu.kotatsu.parsers.util.json.mapJSON +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.runCatchingCancellable +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.selectFirstParent +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toRelativeUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.upBy +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale private const val PAGE_SIZE = 70 private const val PAGE_SIZE_SEARCH = 50 diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index 714e1bde0..9641c4fa3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -8,11 +8,35 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.PagedMangaParser import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +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.model.WordSet +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.oneOrThrowIfMany +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.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toMutableMap +import org.koitharu.kotatsu.parsers.util.toRelativeUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.DateFormat import java.text.SimpleDateFormat -import java.util.* +import java.util.Calendar +import java.util.EnumSet internal abstract class MadaraParser( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDistrict.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDistrict.kt index 229e12a3b..3fd08c3ca 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDistrict.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDistrict.kt @@ -7,9 +7,16 @@ import org.koitharu.kotatsu.parsers.model.Manga 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.* +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.removeSuffix +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow import java.text.SimpleDateFormat -import java.util.* +import java.util.Locale @MangaSourceParser("MANGA_DISTRICT", "Manga District", "en") internal class MangaDistrict(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt index 351a28819..d016418a3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaRead.kt @@ -5,10 +5,23 @@ import org.jsoup.nodes.Element import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.site.madara.MadaraParser -import org.koitharu.kotatsu.parsers.util.* -import java.util.* +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapToSet +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.selectLastOrThrow +import org.koitharu.kotatsu.parsers.util.urlBuilder +import java.util.EnumSet @MangaSourceParser("MANGAREAD", "MangaRead", "en") internal class MangaRead(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt index eae757e67..8b9626130 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/Hentaizone.kt @@ -6,7 +6,14 @@ 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.* +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 import java.util.Locale diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Fbsquads.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Fbsquads.kt new file mode 100644 index 000000000..7c6247135 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Fbsquads.kt @@ -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("FBSQUADS", "Fbsquads", "pt") +internal class Fbsquads(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.FBSQUADS, "fbsquads.com") { + + override val tagPrefix = "manga-tag/" + override val datePattern: String = "dd/MM/yyyy" + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FinalScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FinalScans.kt new file mode 100644 index 000000000..c96525da7 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FinalScans.kt @@ -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("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 +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt index 3e13c1a74..7db92c1e2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/MangaReaderParser.kt @@ -8,10 +8,29 @@ import org.jsoup.nodes.Document import org.jsoup.nodes.Element import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.PagedMangaParser -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +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.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +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.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale internal abstract class MangaReaderParser( diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Galaxymanga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Galaxymanga.kt index b4073c422..00c08244d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Galaxymanga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Galaxymanga.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("GALAXYMANGA", "Galaxymanga", "ar") internal class Galaxymanga(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Mangaatrend.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Mangaatrend.kt index 75d6083d5..b88289136 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Mangaatrend.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Mangaatrend.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MANGAATREND", "Mangaatrend", "ar") internal class Mangaatrend(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Ozulscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Ozulscans.kt index 63742d6be..30d9d4f7c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Ozulscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/Ozulscans.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("OZULSCANS", "Ozulscans", "ar") internal class Ozulscans(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt new file mode 100644 index 000000000..7b51b6274 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt @@ -0,0 +1,97 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.ar + +import org.jsoup.nodes.Document +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.Manga +import org.koitharu.kotatsu.parsers.model.MangaChapter +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.mangareader.MangaReaderParser +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.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("SWATEAM", "Swa Team", "ar") +internal class SwaTeam(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.SWATEAM, pageSize = 42, searchPageSize = 39) { + + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("swateam.me") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("dd-MM-yyyy", Locale("ar", "AR")) + + + override suspend fun getDetails(manga: Manga): Manga { + val docs = webClient.httpGet(manga.url.toAbsoluteUrl(domain)).parseHtml() + val chapters = docs.select("div.bixbox li").mapChapters(reversed = true) { index, element -> + val url = element.selectFirst("a")?.attrAsRelativeUrl("href") ?: return@mapChapters null + MangaChapter( + id = generateUid(url), + name = element.selectFirst("a")?.text() ?: "Chapter ${index + 1}", + url = url, + number = index + 1, + scanlator = null, + uploadDate = chapterDateFormat.tryParse(element.selectFirst(".chapterdate")?.text()), + branch = null, + source = source, + ) + } + return parseInfo(docs, manga, chapters) + } + + override suspend fun parseInfo(docs: Document, manga: Manga, chapters: List): Manga { + + /// set if is table + + val states = docs.selectFirst("div.spe span:contains(Ongoing)")?.text() + + val state = if (states.isNullOrEmpty()) { + "Completed" + } else { + "Ongoing" + } + + val mangaState = state.let { + when (it) { + "Ongoing" -> MangaState.ONGOING + + "Completed" -> MangaState.FINISHED + + else -> null + } + } + + + val author = docs.selectFirst("span.author i")?.text() + + val nsfw = docs.selectFirst(".restrictcontainer") != null + || docs.selectFirst(".info-right .alr") != null + || docs.selectFirst(".postbody .alr") != null + + return manga.copy( + description = docs.selectFirst("span.desc")?.html(), + state = mangaState, + author = author, + isNsfw = manga.isNsfw || nsfw, + tags = docs.select("div.spe a[rel*=tag]").mapNotNullToSet { a -> + MangaTag( + key = a.attr("href").removeSuffix("/").substringAfterLast('/'), + title = a.text().toTitleCase(), + source = source, + ) + }, + chapters = chapters, + ) + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CartelDeManhwas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CartelDeManhwas.kt index 402ad9b3b..db1866dcc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CartelDeManhwas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/CartelDeManhwas.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("CARTELDEMANHWAS", "Cartel De Manhwas", "es") internal class CartelDeManhwas(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt index 203b224de..a9b8b51ca 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/DragonTranslationParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("DRAGONTRANSLATION", "DragonTranslation", "es") internal class DragonTranslationParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/GREMORYMANGAS.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/GREMORYMANGAS.kt index 7f6c67cbc..aed5b8e80 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/GREMORYMANGAS.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/GREMORYMANGAS.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("GREMORYMANGAS", "Gremory Mangas", "es") internal class GREMORYMANGAS(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt index 124670540..713def6fa 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/MiauScan.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MIAUSCAN", "Miau Scan", "es") internal class MiauScan(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Raikiscan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Raikiscan.kt index bc33ad4c2..ff047c027 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Raikiscan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Raikiscan.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("RAIKISCAN", "Raikiscan", "es") internal class Raikiscan(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Senpaiediciones.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Senpaiediciones.kt index d253956b8..291d43024 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Senpaiediciones.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Senpaiediciones.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("SENPAIEDICIONES", "Senpaiediciones", "es") internal class Senpaiediciones(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Shadowmangas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Shadowmangas.kt index 8132b0267..27fd37c8b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Shadowmangas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/es/Shadowmangas.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("SHADOWMANGAS", "Shadowmangas", "es") internal class Shadowmangas(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/BananaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/BananaScan.kt index 0fb8e72a7..95c156cd1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/BananaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/BananaScan.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("BANANASCAN", "Banana Scan", "fr") internal class BananaScan(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EpsilonscanParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EpsilonscanParser.kt index 64b3d283c..60265022d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EpsilonscanParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/EpsilonscanParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("EPSILONSCAN", "Epsilonscan", "fr") internal class EpsilonscanParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LegacyScansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LegacyScansParser.kt index bc1506a53..fd34dd741 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LegacyScansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LegacyScansParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("LEGACY_SCANS", "Legacy Scans", "fr") internal class LegacyScansParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/PhenixscansParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/PhenixscansParser.kt index 97f84ec34..5858812c4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/PhenixscansParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/PhenixscansParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("PHENIXSCANS", "Phenixscans", "fr") internal class PhenixscansParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt index d5f033feb..9af96d377 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScan.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("SUSHISCAN", "SushiScan", "fr") internal class SushiScan(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt index 9827930fd..ef6c864a0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Boosei.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("BOOSEI", "Boosei", "id") internal class Boosei(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Dojing.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Dojing.kt index eab61c81a..ecda0b23d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Dojing.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Dojing.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("DOJING", "Dojing", "id") internal class Dojing(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Duniakomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Duniakomik.kt index daa6b0c48..f67b1b062 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Duniakomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Duniakomik.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("DUNIAKOMIK", "Duniakomik", "id") internal class Duniakomik(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KiryuuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KiryuuParser.kt index 9f49e6969..ed4e06cb5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KiryuuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KiryuuParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("KIRYUU", "Kiryuu", "id") internal class KiryuuParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt index ef5907ba5..60d6b010f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikIndoParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("KOMIKINDO", "KomikIndo", "id") internal class KomikIndoParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt index f2eb116af..056d38fb1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikManhwa.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("KOMIKMANHWA", "Komik Manhwa", "id") internal class KomikManhwa(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikTapParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikTapParser.kt index 12f207242..664ff2a32 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikTapParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikTapParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("KOMIKTAP", "KomikTap", "id") internal class KomikTapParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komiku.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komiku.kt index 113edcce9..492792fda 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komiku.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komiku.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("KOMIKU", "Komiku", "id") internal class Komiku(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Lianscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Lianscans.kt index 542d28284..0f470a6c3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Lianscans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Lianscans.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("LIANSCANS", "Lianscans", "id") internal class Lianscans(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt index b1e424fca..108806a03 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MangaTaleParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MANGATALE", "MangaTale", "id") internal class MangaTaleParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoParser.kt index 2cc6aca2b..6b414aedc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwaIndoParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MANHWAINDO", "Manhwaindo", "id") internal class ManhwaIndoParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwalistParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwalistParser.kt index 57ca366e0..3fec2e6f7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwalistParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/ManhwalistParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MANHWALIST", "Manhwalist", "id") internal class ManhwalistParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Melokomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Melokomik.kt index e2d3efa31..bfc9d3c29 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Melokomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Melokomik.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MELOKOMIK", "Melokomik", "id") internal class Melokomik(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mirrordesu.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mirrordesu.kt index 653b11bbc..f23b84a72 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mirrordesu.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Mirrordesu.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MIRRORDESU", "Mirrordesu", "id") internal class Mirrordesu(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SekaikomikParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SekaikomikParser.kt index 5ab0ce442..152659d73 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SekaikomikParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/SekaikomikParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("SEKAIKOMIK", "Sekaikomik", "id") internal class SekaikomikParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sektedoujin.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sektedoujin.kt index e3cc23e84..eb071a55c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sektedoujin.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sektedoujin.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("SEKTEDOUJIN", "Sektedoujin", "id") internal class Sektedoujin(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sheakomik.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sheakomik.kt index 71ec0c9be..32211c8fa 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sheakomik.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Sheakomik.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("SHEAKOMIK", "Sheakomik", "id") internal class Sheakomik(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/WestmangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/WestmangaParser.kt index 31bd2e9a2..5ac30d4b3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/WestmangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/WestmangaParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("WESTMANGA", "Westmanga", "id") internal class WestmangaParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/it/Walpurgiscan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/it/Walpurgiscan.kt index 6122c3a46..2d123ef20 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/it/Walpurgiscan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/it/Walpurgiscan.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("WALPURGISCAN", "Walpurgiscan", "it") internal class Walpurgiscan(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/FranxxMangas.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/FranxxMangas.kt index 95e887d65..3c5e937dc 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/FranxxMangas.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/FranxxMangas.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("FRANXXMANGAS", "Franxx Mangas", "pt") internal class FranxxMangas(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mangaschan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mangaschan.kt index 91335677f..0015baeef 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mangaschan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mangaschan.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MANGASCHAN", "Mangaschan", "pt") internal class Mangaschan(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mundomangakun.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mundomangakun.kt index f66ddfef1..ed9540b36 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mundomangakun.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Mundomangakun.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MUNDOMANGAKUN", "Mundomangakun", "pt") internal class Mundomangakun(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Origamiorpheans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Origamiorpheans.kt index 48b9c5669..52abfbc37 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Origamiorpheans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Origamiorpheans.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("ORIGAMIORPHEANS", "Origami orpheans", "pt") internal class Origamiorpheans(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Silencescan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Silencescan.kt index 7ec165308..23d0fed79 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Silencescan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Silencescan.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("SILENCESCAN", "Silencescan", "pt") internal class Silencescan(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Tsundoku.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Tsundoku.kt index c7c6d1f1b..34d42a27d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Tsundoku.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/pt/Tsundoku.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("TSUNDOKU", "Tsundoku", "pt") internal class Tsundoku(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsuraTRParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsuraTRParser.kt index 4c490fed5..2aec1c2e1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsuraTRParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/AsuraTRParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("ASURATR", "Asura Scans (tr)", "tr") internal class AsuraTRParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Ayatoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Ayatoon.kt index 2145155d1..3ee3889f6 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Ayatoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Ayatoon.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("AYATOON", "Ayatoon", "tr") internal class Ayatoon(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangacim.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangacim.kt index b8fc34206..61c1b8eed 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangacim.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/Mangacim.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("MANGACIM", "Mangacim", "tr") internal class Mangacim(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt index 245fbaa55..b8c1d8f83 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TempestfansubParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("TEMPESTFANSUB", "Tempestfansub", "tr") internal class TempestfansubParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TurktoonParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TurktoonParser.kt index d27881526..16cd7080a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TurktoonParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/tr/TurktoonParser.kt @@ -6,7 +6,7 @@ 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.* +import java.util.Locale @MangaSourceParser("TURKTOON", "Turktoon", "tr") internal class TurktoonParser(context: MangaLoaderContext) : diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/ChanParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/ChanParser.kt index 2d3fae0b0..07374f492 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/ChanParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/ChanParser.kt @@ -4,10 +4,34 @@ import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaParser import org.koitharu.kotatsu.parsers.MangaParserAuthProvider import org.koitharu.kotatsu.parsers.exception.AuthRequiredException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +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.MangaTag +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrl +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.getCookies +import org.koitharu.kotatsu.parsers.util.host +import org.koitharu.kotatsu.parsers.util.mapChapters +import org.koitharu.kotatsu.parsers.util.mapToSet +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.removeSurrounding +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toRelativeUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse +import org.koitharu.kotatsu.parsers.util.urlEncoded import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale internal abstract class ChanParser( context: MangaLoaderContext, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/HenChanParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/HenChanParser.kt index 14c60dd34..a3dbce3c1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/HenChanParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/HenChanParser.kt @@ -7,7 +7,14 @@ import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaSource import org.koitharu.kotatsu.parsers.model.MangaTag -import org.koitharu.kotatsu.parsers.util.* +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.mapToSet +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase @MangaSourceParser("HENCHAN", "Хентай-тян", "ru") internal class HenChanParser(context: MangaLoaderContext) : ChanParser(context, MangaSource.HENCHAN) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/YaoiChanParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/YaoiChanParser.kt index 6f74a6ead..4ca61c9ed 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/YaoiChanParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/multichan/YaoiChanParser.kt @@ -6,7 +6,13 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.model.Manga import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaSource -import org.koitharu.kotatsu.parsers.util.* +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.requireElementById +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl @MangaSourceParser("YAOICHAN", "Яой-тян", "ru") internal class YaoiChanParser(context: MangaLoaderContext) : ChanParser(context, MangaSource.YAOICHAN) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/rulib/MangaLibParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/rulib/MangaLibParser.kt index aeb617a70..5a7f795ad 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/rulib/MangaLibParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/rulib/MangaLibParser.kt @@ -12,13 +12,32 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey import org.koitharu.kotatsu.parsers.exception.AuthRequiredException import org.koitharu.kotatsu.parsers.exception.NotFoundException import org.koitharu.kotatsu.parsers.exception.ParseException -import org.koitharu.kotatsu.parsers.model.* -import org.koitharu.kotatsu.parsers.util.* +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.MangaTag +import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.util.ChaptersListBuilder +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.getCookies +import org.koitharu.kotatsu.parsers.util.host import org.koitharu.kotatsu.parsers.util.json.JSONIterator import org.koitharu.kotatsu.parsers.util.json.getStringOrNull import org.koitharu.kotatsu.parsers.util.json.mapJSON +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.parseJsonArray +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toTitleCase +import org.koitharu.kotatsu.parsers.util.tryParse import java.text.SimpleDateFormat -import java.util.* +import java.util.EnumSet +import java.util.Locale internal open class MangaLibParser( context: MangaLoaderContext, From a15d54fe11f041f983cd1e5cc1e71e48dbb20b31 Mon Sep 17 00:00:00 2001 From: devi Date: Mon, 3 Jul 2023 17:26:46 +0200 Subject: [PATCH 07/13] Add 10 new source --- .../kotatsu/parsers/site/madara/MadaraParser.kt | 2 ++ .../kotatsu/parsers/site/madara/ar/GateManga.kt | 17 +++++++++++++++++ .../parsers/site/madara/en/FreeWebtoonCoins.kt | 14 ++++++++++++++ .../kotatsu/parsers/site/madara/en/GdScans.kt | 14 ++++++++++++++ .../kotatsu/parsers/site/madara/fr/BlueSolo.kt | 15 +++++++++++++++ .../parsers/site/madara/fr/HentaiScantradVf.kt | 16 ++++++++++++++++ .../parsers/site/madara/fr/PantheonScan.kt | 15 +++++++++++++++ .../parsers/site/madara/fr/ScanHentaiMenu.kt | 16 ++++++++++++++++ .../parsers/site/madara/pt/Cabaredowatame.kt | 14 ++++++++++++++ .../kotatsu/parsers/site/madara/pt/FoxWhite.kt | 16 ++++++++++++++++ .../kotatsu/parsers/site/madara/pt/Nocsummer.kt | 16 ++++++++++++++++ 11 files changed, 155 insertions(+) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeWebtoonCoins.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GdScans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/BlueSolo.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiScantradVf.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/PantheonScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentaiMenu.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Cabaredowatame.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FoxWhite.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Nocsummer.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index 9641c4fa3..d8f05b8e2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -86,6 +86,7 @@ internal abstract class MadaraParser( "En Cours", "En cours", "En cours \uD83D\uDFE2", + "En cours de publication", "Đang tiến hành", "Em lançamento", "em lançamento", @@ -116,6 +117,7 @@ internal abstract class MadaraParser( "Completo", "Complété", "Fini", + "Achevé", "Terminé", "Terminé ⚫", "Tamamlandı", diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt new file mode 100644 index 000000000..13138babf --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/ar/GateManga.kt @@ -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("GATEMANGA", "Gate Manga", "ar") +internal class GateManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.GATEMANGA, "gatemanga.com") { + + override val postreq = true + override val datePattern = "d MMMM، yyyy" + override val sourceLocale: Locale = Locale("ar", "AR") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeWebtoonCoins.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeWebtoonCoins.kt new file mode 100644 index 000000000..d737491a0 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FreeWebtoonCoins.kt @@ -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("FREEWEBTOONCOINS", "Free Webtoon Coins", "en") +internal class FreeWebtoonCoins(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.FREEWEBTOONCOINS, "freewebtooncoins.com") { + + override val datePattern = "MMMM d, yyyy" + override val tagPrefix = "webtoon-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GdScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GdScans.kt new file mode 100644 index 000000000..caa01acaf --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/GdScans.kt @@ -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("GDSCANS", "GdScans", "en") +internal class GdScans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.GDSCANS, "gdscans.com", 10) { + + override val datePattern = "MMMM d, yyyy" + override val tagPrefix = "webtoon-genre/" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/BlueSolo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/BlueSolo.kt new file mode 100644 index 000000000..f8e407ee4 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/BlueSolo.kt @@ -0,0 +1,15 @@ +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("BLUESOLO", "Blue Solo", "fr") +internal class BlueSolo(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.BLUESOLO, "www1.bluesolo.org", 10) { + + override val datePattern = "d MMMM yyyy" + override val sourceLocale: Locale = Locale.FRENCH +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiScantradVf.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiScantradVf.kt new file mode 100644 index 000000000..be049c50b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiScantradVf.kt @@ -0,0 +1,16 @@ +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("HENTAISCANTRADVF", "Hentai-Scantrad", "fr") +internal class HentaiScantradVf(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAISCANTRADVF, "hentai.scantrad-vf.cc") { + + override val isNsfwSource = true + override val datePattern = "d MMMM, yyyy" + override val sourceLocale: Locale = Locale.FRENCH +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/PantheonScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/PantheonScan.kt new file mode 100644 index 000000000..5b21186be --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/PantheonScan.kt @@ -0,0 +1,15 @@ +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("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 +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentaiMenu.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentaiMenu.kt new file mode 100644 index 000000000..e76bc9b20 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ScanHentaiMenu.kt @@ -0,0 +1,16 @@ +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("SCANHENTAIMENU", "Scan Hentai Menu", "fr") +internal class ScanHentaiMenu(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.SCANHENTAIMENU, "scan.hentai.menu") { + + override val isNsfwSource = true + override val datePattern = "MMMM d, yyyy" + override val sourceLocale: Locale = Locale.FRENCH +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Cabaredowatame.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Cabaredowatame.kt new file mode 100644 index 000000000..0d6fb1e47 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Cabaredowatame.kt @@ -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("CABAREDOWATAME", "Dessert Scan", "pt") +internal class Cabaredowatame(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.CABAREDOWATAME, "cabaredowatame.site", 10) { + + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FoxWhite.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FoxWhite.kt new file mode 100644 index 000000000..53c29bcc9 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/FoxWhite.kt @@ -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 +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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Nocsummer.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Nocsummer.kt new file mode 100644 index 000000000..b02ba378b --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Nocsummer.kt @@ -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 +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") +} From c3bed26739f66204f6d27004f044a7ac6c626263 Mon Sep 17 00:00:00 2001 From: devi Date: Mon, 3 Jul 2023 18:05:30 +0200 Subject: [PATCH 08/13] Add 3 new source "fr" --- .../parsers/site/madara/fr/ShadowTrad.kt | 13 +++++ .../parsers/site/mangareader/fr/LelManga.kt | 51 +++++++++++++++++++ .../site/mangareader/fr/SushiScanFR.kt | 18 +++++++ 3 files changed, 82 insertions(+) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ShadowTrad.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScanFR.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ShadowTrad.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ShadowTrad.kt new file mode 100644 index 000000000..9663e827d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/ShadowTrad.kt @@ -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("SHADOWTRAD", "Shadow Trad", "fr") +internal class ShadowTrad(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.SHADOWTRAD, "shadowtrad.net", 10) { + + override val datePattern = "MMMM d, yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt new file mode 100644 index 000000000..7cdd4d92c --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt @@ -0,0 +1,51 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.fr + +import org.jsoup.nodes.Element +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.config.ConfigKey +import org.koitharu.kotatsu.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toRelativeUrl +import java.text.SimpleDateFormat +import java.util.Locale + +@MangaSourceParser("LELMANGA", "LelManga", "fr") +internal class LelManga(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.LELMANGA, pageSize = 21, searchPageSize = 20) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("www.lelmanga.com") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH) + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + val root = doc.body().selectFirst("div.maincontent")?.selectFirst("div#readerarea") + ?: throw ParseException("Root not found", fullUrl) + return root.select("img").map { img -> + val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } + + protected fun Element.src(): String? { + var result = absUrl("data-src") + if (result.isEmpty()) result = absUrl("data-cfsrc") + if (result.isEmpty()) result = absUrl("src") + return result.ifEmpty { null } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScanFR.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScanFR.kt new file mode 100644 index 000000000..2a6675a33 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/SushiScanFR.kt @@ -0,0 +1,18 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.fr + +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("SUSHISCANFR", "Sushi Scan FR", "fr") +internal class SushiScanFR(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.SUSHISCANFR, pageSize = 36, searchPageSize = 10) { + override val configKeyDomain: ConfigKey.Domain + get() = ConfigKey.Domain("sushiscan.fr") + + override val chapterDateFormat: SimpleDateFormat = SimpleDateFormat("MMMM d, yyyy", Locale.FRENCH) +} From b9eb6363b757d1ac7e989c0f11fccca855a684a0 Mon Sep 17 00:00:00 2001 From: devi Date: Mon, 3 Jul 2023 19:31:59 +0200 Subject: [PATCH 09/13] Add 5 new source --- .../parsers/site/madara/MadaraParser.kt | 14 ++++++++------ .../parsers/site/madara/pt/CeriseScans.kt | 2 -- .../kotatsu/parsers/site/madara/pt/Gekkou.kt | 17 +++++++++++++++++ .../parsers/site/madara/pt/GoofFansub.kt | 15 +++++++++++++++ .../parsers/site/madara/pt/HentaiGekkou.kt | 18 ++++++++++++++++++ .../parsers/site/madara/tr/GloryManga.kt | 15 +++++++++++++++ .../parsers/site/madara/tr/GuncelManga.kt | 15 +++++++++++++++ 7 files changed, 88 insertions(+), 8 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Gekkou.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GoofFansub.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HentaiGekkou.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GloryManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GuncelManga.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index d8f05b8e2..569aa56c5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -108,6 +108,7 @@ internal abstract class MadaraParser( "Curso", "En marcha", "Publicandose", + "Publicando", "连载中", "Devam ediyor", ) @@ -181,14 +182,15 @@ 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", "Đ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", "连载中", "Devam ediyor", + "مستمرة", "En curso", "En Curso", "Ongoing", "OnGoing", "On going", "Ativo", "En Cours", "En cours", + "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", + "Lançando", "In Arrivo", "Emision", "En emision", "مستمر", "Curso", "En marcha", "Publicandose", "Publicando", "连载中", + "Devam ediyor", -> MangaState.ONGOING - "Completed", "Completo", "Complété", "Fini", "Terminé", "Tamamlandı", "Đã hoàn thành", "مكتملة", "Завершено", - "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", "Bitmiş", + "Completed", "Completo", "Complété", "Fini", "Achevé", "Terminé", "Terminé ⚫", "Tamamlandı", "Đã hoàn thành", "مكتملة", + "Завершено", "Finished", "Finalizado", "Completata", "One-Shot", "Bitti", "Tamat", "Completado", "Concluído", "Concluido", "已完结", "Bitmiş", -> MangaState.FINISHED else -> null diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CeriseScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CeriseScans.kt index 74f487362..61ec391db 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CeriseScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/CeriseScans.kt @@ -13,6 +13,4 @@ internal class CeriseScans(context: MangaLoaderContext) : override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" override val sourceLocale: Locale = Locale("pt", "PT") - - } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Gekkou.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Gekkou.kt new file mode 100644 index 000000000..7b0864dd1 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Gekkou.kt @@ -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("GEKKOU", "Gekkou", "pt") +internal class Gekkou(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.GEKKOU, "gekkou.com.br", 10) { + + override val tagPrefix = "genero/" + override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" + override val sourceLocale: Locale = Locale("pt", "PT") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GoofFansub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GoofFansub.kt new file mode 100644 index 000000000..0eaa95ea0 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/GoofFansub.kt @@ -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("GOOFFANSUB", "Goof Fansub", "pt") +internal class GoofFansub(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.GOOFFANSUB, "gooffansub.com") { + + override val datePattern: String = "dd/MM/yyyy" + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HentaiGekkou.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HentaiGekkou.kt new file mode 100644 index 000000000..81da2eab4 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/HentaiGekkou.kt @@ -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("HENTAIGEKKOU", "Hentai Gekkou", "pt") +internal class HentaiGekkou(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAIGEKKOU, "hentai.gekkouscans.com.br", 10) { + + override val tagPrefix = "genero/" + override val datePattern: String = "dd 'de' MMMMM 'de' yyyy" + override val sourceLocale: Locale = Locale("pt", "PT") + override val isNsfwSource = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GloryManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GloryManga.kt new file mode 100644 index 000000000..2082e3f4d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GloryManga.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale + +@MangaSourceParser("GLORYMANGA", "Glory Manga", "tr") +internal class GloryManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.GLORYMANGA, "glorymanga.com", 18) { + + override val datePattern = "dd/MM/yyyy" + override val sourceLocale: Locale = Locale("tr") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GuncelManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GuncelManga.kt new file mode 100644 index 000000000..5c7b2e1fc --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/GuncelManga.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import java.util.Locale + +@MangaSourceParser("GUNCEL_MANGA", "Guncel Manga", "tr") +internal class GuncelManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.GUNCEL_MANGA, "guncelmanga.net") { + + override val datePattern = "d MMMM yyyy" + override val sourceLocale: Locale = Locale("tr") +} From 141bca517d6e600d26faa4a345416f54622007bd Mon Sep 17 00:00:00 2001 From: devi Date: Tue, 4 Jul 2023 15:49:50 +0200 Subject: [PATCH 10/13] Add Koitharu optimization, and rename Manga origines --- .../org/koitharu/kotatsu/parsers/site/ScantradUnion.kt | 7 +++++-- .../fr/{MangasOrigines.kt => MangasOriginesUnofficial.kt} | 6 +++--- .../kotatsu/parsers/site/mangareader/ar/SwaTeam.kt | 4 ++-- .../kotatsu/parsers/site/mangareader/fr/LelManga.kt | 6 +++--- 4 files changed, 13 insertions(+), 10 deletions(-) rename src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/{MangasOrigines.kt => MangasOriginesUnofficial.kt} (62%) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt index edc2b68aa..383c35096 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ScantradUnion.kt @@ -17,10 +17,12 @@ import org.koitharu.kotatsu.parsers.model.SortOrder import org.koitharu.kotatsu.parsers.network.UserAgents import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrl import org.koitharu.kotatsu.parsers.util.attrAsAbsoluteUrlOrNull +import org.koitharu.kotatsu.parsers.util.attrAsRelativeUrlOrNull import org.koitharu.kotatsu.parsers.util.domain import org.koitharu.kotatsu.parsers.util.generateUid import org.koitharu.kotatsu.parsers.util.mapChapters import org.koitharu.kotatsu.parsers.util.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.mapToSet import org.koitharu.kotatsu.parsers.util.parseFailed import org.koitharu.kotatsu.parsers.util.parseHtml import org.koitharu.kotatsu.parsers.util.requireElementById @@ -189,7 +191,8 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con val root = doc.body().selectFirst("#webtoon") ?: throw ParseException("Root not found", fullUrl) return root.select("img").map { img -> - val url = img.attr("data-src") ?: img.attr("src") ?: img.parseFailed("Image src not found") + val url = img.attrAsRelativeUrlOrNull("data-src") ?: img.attrAsRelativeUrlOrNull("src") + ?: img.parseFailed("Image src not found") MangaPage( id = generateUid(url), url = url, @@ -204,7 +207,7 @@ internal class ScantradUnion(context: MangaLoaderContext) : PagedMangaParser(con val body = doc.body() val root = body.select(".asp_gochosen")[1] val list = root?.select("option").orEmpty() - return list.mapNotNullToSet { li -> + return list.mapToSet { li -> MangaTag( key = li.text(), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOriginesUnofficial.kt similarity index 62% rename from src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt rename to src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOriginesUnofficial.kt index 2bc220319..06ecbc40a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOriginesUnofficial.kt @@ -6,9 +6,9 @@ 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") { +@MangaSourceParser("MANGASORIGINESUNOFFICIAL", "Mangas Origines ( unofficial )", "fr") +internal class MangasOriginesUnofficial(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGASORIGINESUNOFFICIAL, "mangas-origines.xyz") { override val datePattern = "MMMM d, yyyy" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt index 7b51b6274..a86b6c5c0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/SwaTeam.kt @@ -14,7 +14,7 @@ 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.mapNotNullToSet +import org.koitharu.kotatsu.parsers.util.mapToSet import org.koitharu.kotatsu.parsers.util.parseHtml import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl import org.koitharu.kotatsu.parsers.util.toTitleCase @@ -84,7 +84,7 @@ internal class SwaTeam(context: MangaLoaderContext) : state = mangaState, author = author, isNsfw = manga.isNsfw || nsfw, - tags = docs.select("div.spe a[rel*=tag]").mapNotNullToSet { a -> + tags = docs.select("div.spe a[rel*=tag]").mapToSet { a -> MangaTag( key = a.attr("href").removeSuffix("/").substringAfterLast('/'), title = a.text().toTitleCase(), diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt index 7cdd4d92c..fdc87e8c7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/LelManga.kt @@ -4,7 +4,6 @@ import org.jsoup.nodes.Element import org.koitharu.kotatsu.parsers.MangaLoaderContext import org.koitharu.kotatsu.parsers.MangaSourceParser import org.koitharu.kotatsu.parsers.config.ConfigKey -import org.koitharu.kotatsu.parsers.exception.ParseException import org.koitharu.kotatsu.parsers.model.MangaChapter import org.koitharu.kotatsu.parsers.model.MangaPage import org.koitharu.kotatsu.parsers.model.MangaSource @@ -13,6 +12,8 @@ import org.koitharu.kotatsu.parsers.util.domain import org.koitharu.kotatsu.parsers.util.generateUid import org.koitharu.kotatsu.parsers.util.parseFailed import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.requireElementById +import org.koitharu.kotatsu.parsers.util.selectFirstOrThrow import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl import org.koitharu.kotatsu.parsers.util.toRelativeUrl import java.text.SimpleDateFormat @@ -29,8 +30,7 @@ internal class LelManga(context: MangaLoaderContext) : override suspend fun getPages(chapter: MangaChapter): List { val fullUrl = chapter.url.toAbsoluteUrl(domain) val doc = webClient.httpGet(fullUrl).parseHtml() - val root = doc.body().selectFirst("div.maincontent")?.selectFirst("div#readerarea") - ?: throw ParseException("Root not found", fullUrl) + val root = doc.body().selectFirstOrThrow("div.maincontent").requireElementById("readerarea") return root.select("img").map { img -> val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") MangaPage( From 74a4a3a8b446f50c9a1d5a0868579a8f51513c97 Mon Sep 17 00:00:00 2001 From: devi Date: Tue, 4 Jul 2023 16:01:10 +0200 Subject: [PATCH 11/13] And official Manga Origines --- .../parsers/site/madara/fr/MangasOrigines.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt new file mode 100644 index 000000000..2e67e8711 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/MangasOrigines.kt @@ -0,0 +1,15 @@ +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.fr") { + + override val datePattern = "dd/MM/yyyy" + override val sourceLocale: Locale = Locale.FRENCH +} From c8335639070fba1c5841b3bd592eaabf2bded00d Mon Sep 17 00:00:00 2001 From: devi Date: Tue, 4 Jul 2023 18:21:46 +0200 Subject: [PATCH 12/13] add 10 new source --- .../parsers/site/madara/MadaraParser.kt | 9 +++- .../parsers/site/madara/en/ColoredManga.kt | 2 +- .../kotatsu/parsers/site/madara/en/HManhwa.kt | 18 ++++++++ .../parsers/site/madara/en/HentaiManga.kt | 16 +++++++ .../parsers/site/madara/en/HentaiWebtoon.kt | 17 ++++++++ .../parsers/site/madara/en/HentaixComic.kt | 16 +++++++ .../parsers/site/madara/en/HentaixYuri.kt | 16 +++++++ .../kotatsu/parsers/site/madara/en/Hscans.kt | 15 +++++++ .../parsers/site/madara/es/HerenScan.kt | 15 +++++++ .../parsers/site/madara/es/MangaReaderpro.kt | 13 ++++++ .../kotatsu/parsers/site/madara/tr/Anikiga.kt | 2 +- .../parsers/site/madara/tr/Hayalistic.kt | 15 +++++++ .../parsers/site/madara/vi/HentaiCube.kt | 43 +++++++++++++++++++ 13 files changed, 193 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hscans.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HerenScan.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaReaderpro.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Hayalistic.kt create mode 100644 src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt index 569aa56c5..f3eaf703c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/MadaraParser.kt @@ -123,6 +123,7 @@ internal abstract class MadaraParser( "Terminé ⚫", "Tamamlandı", "Đã hoàn thành", + "Hoàn Thành", "مكتملة", "Завершено", "Finished", @@ -189,7 +190,7 @@ internal abstract class MadaraParser( "Devam ediyor", -> MangaState.ONGOING - "Completed", "Completo", "Complété", "Fini", "Achevé", "Terminé", "Terminé ⚫", "Tamamlandı", "Đã hoàn thành", "مكتملة", + "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 @@ -373,6 +374,10 @@ internal abstract class MadaraParser( date.endsWith(" önce", ignoreCase = true) -> { parseRelativeDate(date) } + // Handle translated 'ago' in Viêt Nam. + date.endsWith(" trước", ignoreCase = true) -> { + parseRelativeDate(date) + } // Handle translated 'ago' in french. date.startsWith("il y a", ignoreCase = true) -> { parseRelativeDate(date) @@ -448,7 +453,7 @@ internal abstract class MadaraParser( ) }.timeInMillis - WordSet("menit", "dakika", "min", "minute", "minuto", "mins").anyWordIn(date) -> cal.apply { + WordSet("menit", "dakika", "min", "minute", "minuto", "mins", "phút").anyWordIn(date) -> cal.apply { add( Calendar.MINUTE, -number, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt index 34e2e5370..f6d5b2b62 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/ColoredManga.kt @@ -10,6 +10,6 @@ import org.koitharu.kotatsu.parsers.site.madara.MadaraParser internal class ColoredManga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.COLORED_MANGA, "coloredmanga.com") { - override val tagPrefix = "manga-tag" + override val tagPrefix = "manga-tag/" override val datePattern = "dd-MMM" } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt new file mode 100644 index 000000000..aae49b711 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HManhwa.kt @@ -0,0 +1,18 @@ +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("HMANHWA", "HManhwa", "en") +internal class HManhwa(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HMANHWA, "hmanhwa.com") { + + override val tagPrefix = "manhwa-genre/" + + override val isNsfwSource = true + override val datePattern = "dd MMM" + override val postreq = true + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt new file mode 100644 index 000000000..0e7d4479a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiManga.kt @@ -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("HENTAIMANGA", "Hentai Manga", "en") +internal class HentaiManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAIMANGA, "hentaimanga.me", 36) { + + override val datePattern = "MMMM d, yyyy" + override val isNsfwSource = true + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt new file mode 100644 index 000000000..4adcbd25d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaiWebtoon.kt @@ -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("HENTAIWEBTOON", "Hentai Webtoon", "en") +internal class HentaiWebtoon(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAIWEBTOON, "hentaiwebtoon.com") { + + override val datePattern = "MMMM d, yyyy" + override val isNsfwSource = true + override val postreq = true + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt new file mode 100644 index 000000000..5c9cb86fe --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixComic.kt @@ -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("HENTAIXCOMIC", "Hentai x Comic", "en") +internal class HentaixComic(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAIXCOMIC, "hentaixcomic.com", 16) { + + override val datePattern = "MMMM d, yyyy" + override val isNsfwSource = true + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt new file mode 100644 index 000000000..8f9533ca8 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/HentaixYuri.kt @@ -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("HENTAIXYURI", "Hentai x Yuri", "en") +internal class HentaixYuri(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAIXYURI, "hentaixyuri.com", 16) { + + override val datePattern = "MMMM d, yyyy" + override val isNsfwSource = true + override val postreq = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hscans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hscans.kt new file mode 100644 index 000000000..4f0fe9187 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hscans.kt @@ -0,0 +1,15 @@ +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("HSCANS", "Hscans", "en") +internal class Hscans(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HSCANS, "hscans.com", 10) { + + override val tagPrefix = "manga-tag/" + override val datePattern = "dd/MM/yyyy" + +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HerenScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HerenScan.kt new file mode 100644 index 000000000..bc4785ee6 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/HerenScan.kt @@ -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("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") +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaReaderpro.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaReaderpro.kt new file mode 100644 index 000000000..add9d77c2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/es/MangaReaderpro.kt @@ -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("MANGAREADERPRO", "Manga Reader Pro", "es") +internal class MangaReaderpro(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MANGAREADERPRO, "mangareaderpro.com", 10) { + + override val datePattern = "MM/dd/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt index 041760691..262b993ce 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Anikiga.kt @@ -12,7 +12,7 @@ import java.util.Locale internal class Anikiga(context: MangaLoaderContext) : MadaraParser(context, MangaSource.ANIKIGA, "anikiga.com") { - override val tagPrefix = "manga-tur" + override val tagPrefix = "manga-tur/" override val datePattern = "d MMMM yyyy" override val sourceLocale: Locale = Locale("tr") override val postreq = true diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Hayalistic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Hayalistic.kt new file mode 100644 index 000000000..f18dba30e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/tr/Hayalistic.kt @@ -0,0 +1,15 @@ +package org.koitharu.kotatsu.parsers.site.madara.tr + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + + +@MangaSourceParser("HAYALISTIC", "Hayalistic", "vi") +internal class Hayalistic(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HAYALISTIC, "hayalistic.com", 24) { + + override val datePattern = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt new file mode 100644 index 000000000..55eb83581 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/HentaiCube.kt @@ -0,0 +1,43 @@ +package org.koitharu.kotatsu.parsers.site.madara.vi + + +import org.koitharu.kotatsu.parsers.MangaLoaderContext +import org.koitharu.kotatsu.parsers.MangaSourceParser +import org.koitharu.kotatsu.parsers.exception.ParseException +import org.koitharu.kotatsu.parsers.model.MangaChapter +import org.koitharu.kotatsu.parsers.model.MangaPage +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.generateUid +import org.koitharu.kotatsu.parsers.util.parseFailed +import org.koitharu.kotatsu.parsers.util.parseHtml +import org.koitharu.kotatsu.parsers.util.toAbsoluteUrl +import org.koitharu.kotatsu.parsers.util.toRelativeUrl + + +@MangaSourceParser("HENTAICUBE", "Hentai Cube", "vi") +internal class HentaiCube(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAICUBE, "hentaicube.net") { + + override val isNsfwSource = true + override val datePattern = "dd/MM/yyyy" + override val tagPrefix = "the-loai/" + override val postreq = true + + override suspend fun getPages(chapter: MangaChapter): List { + val fullUrl = chapter.url.toAbsoluteUrl(domain) + val doc = webClient.httpGet(fullUrl).parseHtml() + val root = doc.body().selectFirst("div.main-col-inner")?.selectFirst("div.reading-content") + ?: throw ParseException("Root not found", fullUrl) + return root.select("img").map { img -> + val url = img.src()?.toRelativeUrl(domain) ?: img.parseFailed("Image src not found") + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } + } +} From 31476a55f90c883d67b863e9bce8bcdc5e90a8eb Mon Sep 17 00:00:00 2001 From: devi Date: Tue, 4 Jul 2023 21:20:42 +0200 Subject: [PATCH 13/13] Fix small bug parse on desc --- .../site/madara/fr/HentaiScantradVf.kt | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiScantradVf.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiScantradVf.kt index be049c50b..ca79a96c7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiScantradVf.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiScantradVf.kt @@ -1,9 +1,19 @@ 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") @@ -13,4 +23,41 @@ 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(), + ) + } }