diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NitroManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NitroManga.kt new file mode 100644 index 00000000..d60d434a --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/NitroManga.kt @@ -0,0 +1,10 @@ +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("NITROMANGA", "NitroManga", "en") +internal class NitroManga(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.NITROMANGA, "nitromanga.com", pageSize = 18) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/GloryScansX.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/GloryScansX.kt new file mode 100644 index 00000000..de2fb730 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/GloryScansX.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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.site.madara.MadaraParser + +@MangaSourceParser("GLORYSCANSX", "GloryScansX", "fr", ContentType.HENTAI) +internal class GloryScansX(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.GLORYSCANSX, "x.gloryscans.fr") { + override val datePattern = "dd MMMM yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/KingOfShojo.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/KingOfShojo.kt new file mode 100644 index 00000000..fc4190c0 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/ar/KingOfShojo.kt @@ -0,0 +1,10 @@ +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.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("KINGOFSHOJO", "KingOfShojo", "ar") +internal class KingOfShojo(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.KINGOFSHOJO, "kingofshojo.com", pageSize = 30, searchPageSize = 10) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Edomae.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Edomae.kt new file mode 100644 index 00000000..f51a8bad --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/Edomae.kt @@ -0,0 +1,13 @@ +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.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("EDOMAE", "Edomae", "en") +internal class Edomae(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.EDOMAE, "edomae.co", pageSize = 20, searchPageSize = 10) { + override val encodedSrc = true + override val selectScript = "#content script" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RizzComic.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RizzComic.kt new file mode 100644 index 00000000..5c5eb31f --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/en/RizzComic.kt @@ -0,0 +1,50 @@ +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.model.Manga +import org.koitharu.kotatsu.parsers.model.MangaSource +import org.koitharu.kotatsu.parsers.model.MangaTag +import org.koitharu.kotatsu.parsers.model.SortOrder +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser +import org.koitharu.kotatsu.parsers.util.domain +import org.koitharu.kotatsu.parsers.util.oneOrThrowIfMany +import org.koitharu.kotatsu.parsers.util.parseHtml +import java.lang.IllegalArgumentException +import java.util.EnumSet + +@MangaSourceParser("RIZZCOMIC", "RizzComic", "en") +internal class RizzComic(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.RIZZCOMIC, "rizzcomic.com", pageSize = 50, searchPageSize = 20) { + override val datePattern = "dd MMM yyyy" + override val listUrl = "/series" + + override val sortOrders: Set + get() = EnumSet.of(SortOrder.ALPHABETICAL) + + override suspend fun getListPage( + page: Int, + query: String?, + tags: Set?, + sortOrder: SortOrder, + ): List { + val tag = tags.oneOrThrowIfMany() + if (page > 1) { + return emptyList() + } + if (!query.isNullOrEmpty()) { + throw IllegalArgumentException("Search is not supported by this source") + } + val url = if (!tags.isNullOrEmpty()) { + buildString { + append("https://") + append(domain) + append("/genre/") + append(tag?.key.orEmpty()) + } + } else { + "https://$domain$listUrl" + } + return parseMangaList(webClient.httpGet(url).parseHtml()) + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/GloryScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/GloryScans.kt new file mode 100644 index 00000000..9562be87 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/fr/GloryScans.kt @@ -0,0 +1,10 @@ +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.model.MangaSource +import org.koitharu.kotatsu.parsers.site.mangareader.MangaReaderParser + +@MangaSourceParser("GLORYSCANS", "GloryScans", "fr") +internal class GloryScans(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.GLORYSCANS, "gloryscans.fr", pageSize = 20, searchPageSize = 10)