diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiOrigines.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiOrigines.kt new file mode 100644 index 000000000..1a10bc906 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/fr/HentaiOrigines.kt @@ -0,0 +1,11 @@ +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("HENTAIORIGINES", "HentaiOrigines", "fr", ContentType.HENTAI) +internal class HentaiOrigines(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.HENTAIORIGINES, "hentai-origines.fr") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidSecret.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidSecret.kt new file mode 100644 index 000000000..b7586f18e --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MaidSecret.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("MAIDSECRET", "MaidSecret", "pt") +internal class MaidSecret(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MAIDSECRET, "maidsecret.com", 10) { + override val datePattern: String = "dd/MM/yyyy" +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MrBenne.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MrBenne.kt new file mode 100644 index 000000000..72e48837d --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/MrBenne.kt @@ -0,0 +1,42 @@ +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.ContentType +import org.koitharu.kotatsu.parsers.model.MangaSource +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.toTitleCase +import java.util.HashSet + +@MangaSourceParser("MRBENNE", "MrBenne", "pt", ContentType.HENTAI) +internal class MrBenne(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.MRBENNE, "mrbenne.com", 10) { + override val datePattern: String = "dd/MM/yyyy" + + override suspend fun getAvailableTags(): Set { + val doc = webClient.httpGet("https://$domain/?s=&post_type=wp-manga").parseHtml() + val body = doc.body() + val root = body.selectFirst("div.form-group.checkbox-group") + val list = root?.select("div.checkbox").orEmpty() + val keySet = HashSet(list.size) + return list.mapNotNullToSet { div -> + val input = div.selectFirst("input") ?: return@mapNotNullToSet null + val label = div.selectFirst("label") ?: return@mapNotNullToSet null + val tag = input.attr("value") + if (tag.isEmpty() || !keySet.add(tag)) { + return@mapNotNullToSet null + } + MangaTag( + key = tag, + title = label.ownText().ifEmpty { + tag + }.toTitleCase(sourceLocale), + source = source, + ) + } + } +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Norterose.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Norterose.kt new file mode 100644 index 000000000..d7ce724b2 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/pt/Norterose.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("NORTEROSE", "Norterose", "pt") +internal class Norterose(context: MangaLoaderContext) : + MadaraParser(context, MangaSource.NORTEROSE, "norterose.com.br", 10) { + override val datePattern: String = "dd/MM/yyyy" + override val withoutAjax = true +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt new file mode 100644 index 000000000..75f6e1596 --- /dev/null +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/MiHentai.kt @@ -0,0 +1,14 @@ +package org.koitharu.kotatsu.parsers.site.mangareader.id + +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.mangareader.MangaReaderParser + +@MangaSourceParser("MIHENTAI", "MiHentai", "id", ContentType.HENTAI) +internal class MiHentai(context: MangaLoaderContext) : + MangaReaderParser(context, MangaSource.MIHENTAI, "mihentai.com", pageSize = 30, searchPageSize = 10) { + override val datePattern = "MMM d, yyyy" + override val isTagsExclusionSupported = false +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/MmrcmsParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/MmrcmsParser.kt index 90e4f1897..776150d06 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/MmrcmsParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mmrcms/MmrcmsParser.kt @@ -24,6 +24,7 @@ internal abstract class MmrcmsParser( SortOrder.POPULARITY, SortOrder.UPDATED, SortOrder.ALPHABETICAL, + SortOrder.ALPHABETICAL_DESC, ) protected open val listUrl = "filterList" @@ -103,7 +104,7 @@ internal abstract class MmrcmsParser( } append("&sortBy=") when (filter.sortOrder) { - SortOrder.POPULARITY -> append("views&asc=true") + SortOrder.POPULARITY -> append("views&asc=false") SortOrder.ALPHABETICAL -> append("name&asc=true") SortOrder.ALPHABETICAL_DESC -> append("name&asc=false") else -> append("name")