From 078b59b1e236115c922dac1174d62b25d3f0d9aa Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 15 May 2024 19:46:48 +0300 Subject: [PATCH] [Madara] Migrate to ScatterSet and add UserAgent config option --- .../parsers/site/madara/MadaraParser.kt | 24 ++++++++++++++----- .../parsers/site/madara/en/FireScans.kt | 7 +++++- .../parsers/site/madara/en/Hentai4Free.kt | 11 ++------- .../site/madara/en/IsekaiScanEuParser.kt | 2 +- .../parsers/site/madara/en/MangaDass.kt | 2 +- .../parsers/site/madara/en/MangaDna.kt | 2 +- .../kotatsu/parsers/site/madara/en/Manhwaz.kt | 2 +- .../parsers/site/madara/id/ManhwaHub.kt | 2 +- .../parsers/site/madara/id/Shinigami.kt | 7 ------ .../parsers/site/madara/vi/Saytruyenhay.kt | 2 +- .../koitharu/kotatsu/parsers/MangaSources.kt | 2 +- 11 files changed, 33 insertions(+), 30 deletions(-) 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 a95c2943..08394ffb 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 @@ -1,5 +1,6 @@ package org.koitharu.kotatsu.parsers.site.madara +import androidx.collection.scatterSetOf import kotlinx.coroutines.async import kotlinx.coroutines.coroutineScope import org.json.JSONObject @@ -22,6 +23,7 @@ internal abstract class MadaraParser( ) : PagedMangaParser(context, source, pageSize) { override val configKeyDomain = ConfigKey.Domain(domain) + private val userAgentKey = ConfigKey.UserAgent(context.getDefaultUserAgent()) override val isMultipleTagsSupported = false @@ -58,7 +60,7 @@ internal abstract class MadaraParser( } @JvmField - protected val ongoing: Set = hashSetOf( + protected val ongoing = scatterSetOf( "مستمرة", "En curso", "En Curso", @@ -100,7 +102,7 @@ internal abstract class MadaraParser( ) @JvmField - protected val finished: Set = hashSetOf( + protected val finished = scatterSetOf( "Completed", "Complete", "Completo", @@ -131,7 +133,7 @@ internal abstract class MadaraParser( ) @JvmField - protected val abandoned: Set = hashSetOf( + protected val abandoned = scatterSetOf( "Canceled", "Cancelled", "Cancelado", @@ -144,7 +146,7 @@ internal abstract class MadaraParser( ) @JvmField - protected val paused: Set = hashSetOf( + protected val paused = scatterSetOf( "Hiatus", "On Hold", "Pausado", @@ -154,7 +156,7 @@ internal abstract class MadaraParser( ) @JvmField - protected val upcoming: Set = hashSetOf( + protected val upcoming = scatterSetOf( "Upcoming", "upcoming", "لم تُنشَر بعد", @@ -342,7 +344,12 @@ internal abstract class MadaraParser( ) }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), - state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()) { + state = when ( + summary?.selectFirst(".mg_status") + ?.selectFirst(".summary-content") + ?.ownText() + .orEmpty() + ) { in ongoing -> MangaState.ONGOING in finished -> MangaState.FINISHED in abandoned -> MangaState.ABANDONED @@ -642,6 +649,11 @@ internal abstract class MadaraParser( } } + override fun onCreateConfig(keys: MutableCollection>) { + super.onCreateConfig(keys) + keys.add(userAgentKey) + } + // Parses dates in this form: // 21 hours ago private fun parseRelativeDate(date: String): Long { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FireScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FireScans.kt index 4643bc1d..38b5bc13 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FireScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/FireScans.kt @@ -35,7 +35,12 @@ internal class FireScans(context: MangaLoaderContext) : ) }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), - state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText()) { + state = when ( + summary?.selectFirst(".mg_status") + ?.selectFirst(".summary-content") + ?.ownText() + .orEmpty() + ) { in ongoing -> MangaState.ONGOING in finished -> MangaState.FINISHED in abandoned -> MangaState.ABANDONED diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt index ee7acf6b..154359f7 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Hentai4Free.kt @@ -3,14 +3,7 @@ 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.ContentRating -import org.koitharu.kotatsu.parsers.model.ContentType -import org.koitharu.kotatsu.parsers.model.Manga -import org.koitharu.kotatsu.parsers.model.MangaListFilter -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.* import org.koitharu.kotatsu.parsers.site.madara.MadaraParser import org.koitharu.kotatsu.parsers.util.* @@ -135,7 +128,7 @@ internal class Hentai4Free(context: MangaLoaderContext) : }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText() - ?.lowercase()) { + ?.lowercase().orEmpty()) { in ongoing -> MangaState.ONGOING in finished -> MangaState.FINISHED else -> null diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt index 7252717a..faa03117 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/IsekaiScanEuParser.kt @@ -121,7 +121,7 @@ internal class IsekaiScanEuParser(context: MangaLoaderContext) : }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText() - ?.lowercase()) { + ?.lowercase().orEmpty()) { in ongoing -> MangaState.ONGOING in finished -> MangaState.FINISHED else -> null diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt index 95405107..9fb679e1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDass.kt @@ -99,7 +99,7 @@ internal class MangaDass(context: MangaLoaderContext) : }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText() - ?.lowercase()) { + ?.lowercase().orEmpty()) { in ongoing -> MangaState.ONGOING in finished -> MangaState.FINISHED else -> null diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt index 84d56d17..c5bccd15 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/MangaDna.kt @@ -89,7 +89,7 @@ internal class MangaDna(context: MangaLoaderContext) : }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText() - ?.lowercase()) { + ?.lowercase().orEmpty()) { in ongoing -> MangaState.ONGOING in finished -> MangaState.FINISHED else -> null diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwaz.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwaz.kt index 4a118380..78129fc3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwaz.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/en/Manhwaz.kt @@ -102,7 +102,7 @@ internal class Manhwaz(context: MangaLoaderContext) : }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText() - ?.lowercase()) { + ?.lowercase().orEmpty()) { in ongoing -> MangaState.ONGOING in finished -> MangaState.FINISHED else -> null diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ManhwaHub.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ManhwaHub.kt index b704c822..5cf93d8e 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ManhwaHub.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/ManhwaHub.kt @@ -86,7 +86,7 @@ internal class ManhwaHub(context: MangaLoaderContext) : }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText() - ?.lowercase()) { + ?.lowercase().orEmpty()) { in ongoing -> MangaState.ONGOING in finished -> MangaState.FINISHED else -> null diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt index 3326d6e8..86201c56 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/id/Shinigami.kt @@ -12,14 +12,7 @@ import java.util.* internal class Shinigami(context: MangaLoaderContext) : MadaraParser(context, MangaSource.SHINIGAMI, "shinigamitoon.com", 10) { - private val userAgentKey = ConfigKey.UserAgent(context.getDefaultUserAgent()) override val tagPrefix = "genre/" override val listUrl = "series/" override val sourceLocale: Locale = Locale.ENGLISH - - override fun onCreateConfig(keys: MutableCollection>) { - super.onCreateConfig(keys) - keys.add(userAgentKey) - } - } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Saytruyenhay.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Saytruyenhay.kt index ccbc57c7..1d181c9a 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Saytruyenhay.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madara/vi/Saytruyenhay.kt @@ -93,7 +93,7 @@ internal class Saytruyenhay(context: MangaLoaderContext) : }.orEmpty(), author = summary?.selectFirst(".mg_author")?.selectFirst("a")?.ownText(), state = when (summary?.selectFirst(".mg_status")?.selectFirst(".summary-content")?.ownText() - ?.lowercase()) { + ?.lowercase().orEmpty()) { in ongoing -> MangaState.ONGOING in finished -> MangaState.FINISHED else -> null diff --git a/src/test/kotlin/org/koitharu/kotatsu/parsers/MangaSources.kt b/src/test/kotlin/org/koitharu/kotatsu/parsers/MangaSources.kt index 8c5e1904..ef660faa 100644 --- a/src/test/kotlin/org/koitharu/kotatsu/parsers/MangaSources.kt +++ b/src/test/kotlin/org/koitharu/kotatsu/parsers/MangaSources.kt @@ -3,5 +3,5 @@ package org.koitharu.kotatsu.parsers import org.junit.jupiter.params.provider.EnumSource import org.koitharu.kotatsu.parsers.model.MangaSource -@EnumSource(MangaSource::class, names = ["MANGADEX"], mode = EnumSource.Mode.INCLUDE) +@EnumSource(MangaSource::class, names = ["LOCAL", "DUMMY"], mode = EnumSource.Mode.EXCLUDE) internal annotation class MangaSources