From c8335639070fba1c5841b3bd592eaabf2bded00d Mon Sep 17 00:00:00 2001 From: devi Date: Tue, 4 Jul 2023 18:21:46 +0200 Subject: [PATCH] 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 569aa56c..f3eaf703 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 34e2e537..f6d5b2b6 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 00000000..aae49b71 --- /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 00000000..0e7d4479 --- /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 00000000..4adcbd25 --- /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 00000000..5c9cb86f --- /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 00000000..8f9533ca --- /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 00000000..4f0fe918 --- /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 00000000..bc4785ee --- /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 00000000..add9d77c --- /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 04176069..262b993c 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 00000000..f18dba30 --- /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 00000000..55eb8358 --- /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, + ) + } + } +}