From 392e9af9440ce963736f33d18db5bd6518b59fbd Mon Sep 17 00:00:00 2001 From: devi Date: Tue, 26 Dec 2023 15:17:40 +0100 Subject: [PATCH] New SortOrder.ALPHABETICAL_DESC New MangaState.UPCOMING --- .../koitharu/kotatsu/parsers/model/MangaState.kt | 2 +- .../koitharu/kotatsu/parsers/model/SortOrder.kt | 5 +++-- .../kotatsu/parsers/site/all/BatoToParser.kt | 1 + .../kotatsu/parsers/site/all/ComickFunParser.kt | 4 +++- .../kotatsu/parsers/site/all/ExHentaiParser.kt | 2 +- .../kotatsu/parsers/site/all/MangaDexParser.kt | 5 ++++- .../kotatsu/parsers/site/all/MangaPark.kt | 2 ++ .../parsers/site/animebootstrap/fr/PapScan.kt | 4 +++- .../kotatsu/parsers/site/ar/FlixScans.kt | 1 + .../kotatsu/parsers/site/en/Manhwa18Parser.kt | 1 + .../parsers/site/es/TuMangaOnlineParser.kt | 14 +++++++------- .../parsers/site/fmreader/FmreaderParser.kt | 4 +++- .../parsers/site/fmreader/en/Manhwa18Com.kt | 1 + .../parsers/site/fmreader/es/OlimpoScans.kt | 3 ++- .../kotatsu/parsers/site/fr/BentomangaParser.kt | 8 ++++++-- .../kotatsu/parsers/site/fr/LugnicaScans.kt | 4 +++- .../kotatsu/parsers/site/heancms/HeanCms.kt | 16 +++++++++------- .../parsers/site/heancms/es/YugenMangasEs.kt | 13 +++++++------ .../kotatsu/parsers/site/madara/MadaraParser.kt | 14 ++++++++++++++ .../kotatsu/parsers/site/madara/en/FireScans.kt | 2 +- .../parsers/site/madara/en/Hentai4Free.kt | 1 + .../parsers/site/madara/en/IsekaiScanEuParser.kt | 2 ++ .../kotatsu/parsers/site/madara/en/MangaDass.kt | 1 + .../parsers/site/madtheme/MadthemeParser.kt | 1 + .../parsers/site/madtheme/en/ManhuaScan.kt | 1 + .../site/mangareader/MangaReaderParser.kt | 9 ++++++++- .../parsers/site/mangareader/ar/SwaTeam.kt | 1 + .../parsers/site/mangareader/id/KomikSan.kt | 1 + .../parsers/site/mangareader/id/Komikcast.kt | 1 + .../kotatsu/parsers/site/mmrcms/MmrcmsParser.kt | 7 ++++--- .../koitharu/kotatsu/parsers/site/pt/LerManga.kt | 9 ++++++++- .../parsers/site/ru/grouple/GroupleParser.kt | 1 + .../kotatsu/parsers/site/tr/TrWebtoon.kt | 3 ++- .../koitharu/kotatsu/parsers/site/vi/LxManga.kt | 2 ++ .../parsers/site/vi/TruyentranhLHParser.kt | 1 + .../kotatsu/parsers/site/zmanga/ZMangaParser.kt | 1 + 36 files changed, 109 insertions(+), 39 deletions(-) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/model/MangaState.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/model/MangaState.kt index 1d964722..3801ff04 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/model/MangaState.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/model/MangaState.kt @@ -1,5 +1,5 @@ package org.koitharu.kotatsu.parsers.model enum class MangaState { - ONGOING, FINISHED, ABANDONED, PAUSED + ONGOING, FINISHED, ABANDONED, PAUSED, UPCOMING } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/model/SortOrder.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/model/SortOrder.kt index 3c9a9091..7ef35ddd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/model/SortOrder.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/model/SortOrder.kt @@ -5,5 +5,6 @@ enum class SortOrder { POPULARITY, RATING, NEWEST, - ALPHABETICAL -} \ No newline at end of file + ALPHABETICAL, + ALPHABETICAL_DESC +} diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/BatoToParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/BatoToParser.kt index 6d422c83..7b8f90f2 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/BatoToParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/BatoToParser.kt @@ -93,6 +93,7 @@ internal class BatoToParser(context: MangaLoaderContext) : PagedMangaParser( MangaState.FINISHED -> "completed" MangaState.ABANDONED -> "cancelled" MangaState.PAUSED -> "hiatus" + MangaState.UPCOMING -> "pending" }, ) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ComickFunParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ComickFunParser.kt index 7155c62a..e3551a7c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ComickFunParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ComickFunParser.kt @@ -31,7 +31,8 @@ internal class ComickFunParser(context: MangaLoaderContext) : PagedMangaParser(c SortOrder.RATING, ) - override val availableStates: Set = EnumSet.allOf(MangaState::class.java) + override val availableStates: Set = + EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED, MangaState.ABANDONED) @Volatile private var cachedTags: SparseArrayCompat? = null @@ -75,6 +76,7 @@ internal class ComickFunParser(context: MangaLoaderContext) : PagedMangaParser(c MangaState.FINISHED -> "2" MangaState.ABANDONED -> "3" MangaState.PAUSED -> "4" + else -> "" }, ) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ExHentaiParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ExHentaiParser.kt index 5b540760..91fae31b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ExHentaiParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/ExHentaiParser.kt @@ -272,7 +272,7 @@ internal class ExHentaiParser( return getOrCreateTagMap().values.toSet() } - protected suspend fun getOrCreateTagMap(): Map = mutex.withLock { + private suspend fun getOrCreateTagMap(): Map = mutex.withLock { tagCache?.let { return@withLock it } val tagMap = ArrayMap() val tagElements = tags.split(",") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt index e1039ae4..1862bd30 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaDexParser.kt @@ -32,7 +32,8 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context override val availableSortOrders: EnumSet = EnumSet.allOf(SortOrder::class.java) - override val availableStates: Set = EnumSet.allOf(MangaState::class.java) + override val availableStates: Set = + EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED, MangaState.ABANDONED) override suspend fun getList(offset: Int, filter: MangaListFilter?): List { @@ -66,6 +67,7 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context SortOrder.UPDATED -> "[latestUploadedChapter]=desc" SortOrder.RATING -> "[rating]=desc" SortOrder.ALPHABETICAL -> "[title]=asc" + SortOrder.ALPHABETICAL_DESC -> "[title]=desc" SortOrder.NEWEST -> "[createdAt]=desc" SortOrder.POPULARITY -> "[followedCount]=desc" }, @@ -77,6 +79,7 @@ internal class MangaDexParser(context: MangaLoaderContext) : MangaParser(context MangaState.FINISHED -> append("completed") MangaState.ABANDONED -> append("cancelled") MangaState.PAUSED -> append("hiatus") + else -> append("") } } filter.locale?.let { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaPark.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaPark.kt index 20eb19b0..b3acfff1 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaPark.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/all/MangaPark.kt @@ -55,6 +55,7 @@ internal class MangaPark(context: MangaLoaderContext) : MangaState.FINISHED -> "completed" MangaState.PAUSED -> "hiatus" MangaState.ABANDONED -> "cancelled" + MangaState.UPCOMING -> "pending" }, ) } @@ -67,6 +68,7 @@ internal class MangaPark(context: MangaLoaderContext) : SortOrder.NEWEST -> "field_create" SortOrder.ALPHABETICAL -> "field_name" SortOrder.RATING -> "field_score" + else -> "" }, ) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/animebootstrap/fr/PapScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/animebootstrap/fr/PapScan.kt index 667cc56a..940ac7b3 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/animebootstrap/fr/PapScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/animebootstrap/fr/PapScan.kt @@ -25,6 +25,7 @@ internal class PapScan(context: MangaLoaderContext) : override val availableSortOrders: Set = EnumSet.of( SortOrder.POPULARITY, SortOrder.ALPHABETICAL, + SortOrder.ALPHABETICAL_DESC, ) override suspend fun getListPage(page: Int, filter: MangaListFilter?): List { @@ -50,7 +51,8 @@ internal class PapScan(context: MangaLoaderContext) : append("&sortBy=") when (filter.sortOrder) { SortOrder.POPULARITY -> append("views") - SortOrder.ALPHABETICAL -> append("name") + SortOrder.ALPHABETICAL_DESC -> append("name&asc=false") + SortOrder.ALPHABETICAL -> append("name&asc=true") else -> append("updated") } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/FlixScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/FlixScans.kt index 90bb9c45..a4491c46 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/FlixScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ar/FlixScans.kt @@ -59,6 +59,7 @@ internal class FlixScans(context: MangaLoaderContext) : PagedMangaParser(context MangaState.FINISHED -> "completed" MangaState.ABANDONED -> "droped" MangaState.PAUSED -> "onhold" + MangaState.UPCOMING -> "soon" }, ) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/Manhwa18Parser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/Manhwa18Parser.kt index 27b1d5e9..2e2b2634 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/Manhwa18Parser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/en/Manhwa18Parser.kt @@ -68,6 +68,7 @@ class Manhwa18Parser(context: MangaLoaderContext) : append( when (filter.sortOrder) { SortOrder.ALPHABETICAL -> "az" + SortOrder.ALPHABETICAL_DESC -> "za" SortOrder.POPULARITY -> "top" SortOrder.UPDATED -> "update" SortOrder.NEWEST -> "new" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/es/TuMangaOnlineParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/es/TuMangaOnlineParser.kt index 02ba7388..3a0c64bd 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/es/TuMangaOnlineParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/es/TuMangaOnlineParser.kt @@ -26,6 +26,7 @@ class TuMangaOnlineParser(context: MangaLoaderContext) : PagedMangaParser( override val availableSortOrders: Set = EnumSet.of( SortOrder.ALPHABETICAL, + SortOrder.ALPHABETICAL_DESC, SortOrder.UPDATED, SortOrder.NEWEST, SortOrder.POPULARITY, @@ -48,15 +49,14 @@ class TuMangaOnlineParser(context: MangaLoaderContext) : PagedMangaParser( append("?order_item=") append( when (filter.sortOrder) { - SortOrder.POPULARITY -> "likes_count" - SortOrder.UPDATED -> "release_date" - SortOrder.NEWEST -> "creation" - SortOrder.ALPHABETICAL -> "alphabetically" - SortOrder.RATING -> "score" - + SortOrder.POPULARITY -> "likes_count&order_dir=desc" + SortOrder.UPDATED -> "release_date&order_dir=desc" + SortOrder.NEWEST -> "creation&order_dir=desc" + SortOrder.ALPHABETICAL -> "alphabetically&order_dir=asc" + SortOrder.ALPHABETICAL_DESC -> "alphabetically&order_dir=desc" + SortOrder.RATING -> "score&order_dir=desc" }, ) - append("&order_dir=desc") append("&filter_by=title") if (filter.tags.isNotEmpty()) { for (tag in filter.tags) { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/FmreaderParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/FmreaderParser.kt index 7fa7a03d..1ae78131 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/FmreaderParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/FmreaderParser.kt @@ -25,6 +25,7 @@ internal abstract class FmreaderParser( SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.ALPHABETICAL, + SortOrder.ALPHABETICAL_DESC, ) override val availableStates: Set = EnumSet.of( @@ -85,7 +86,8 @@ internal abstract class FmreaderParser( when (filter.sortOrder) { SortOrder.POPULARITY -> append("views") SortOrder.UPDATED -> append("last_update") - SortOrder.ALPHABETICAL -> append("name") + SortOrder.ALPHABETICAL -> append("name&sort_type=ASC") + SortOrder.ALPHABETICAL_DESC -> append("name&sort_type=DESC") else -> append("last_update") } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/en/Manhwa18Com.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/en/Manhwa18Com.kt index 676c5564..d2c963f4 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/en/Manhwa18Com.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/en/Manhwa18Com.kt @@ -48,6 +48,7 @@ internal class Manhwa18Com(context: MangaLoaderContext) : append( when (filter.sortOrder) { SortOrder.ALPHABETICAL -> "az" + SortOrder.ALPHABETICAL_DESC -> "za" SortOrder.POPULARITY -> "top" SortOrder.UPDATED -> "update" SortOrder.NEWEST -> "new" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/es/OlimpoScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/es/OlimpoScans.kt index 2ed70663..5c8521b5 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/es/OlimpoScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fmreader/es/OlimpoScans.kt @@ -44,7 +44,8 @@ internal class OlimpoScans(context: MangaLoaderContext) : when (filter.sortOrder) { SortOrder.POPULARITY -> append("views") SortOrder.UPDATED -> append("last_update") - SortOrder.ALPHABETICAL -> append("name") + SortOrder.ALPHABETICAL -> append("name&sort_type=ASC") + SortOrder.ALPHABETICAL_DESC -> append("name&sort_type=DESC") else -> append("last_update") } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt index ae86a442..f8d9186c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/BentomangaParser.kt @@ -24,11 +24,13 @@ internal class BentomangaParser(context: MangaLoaderContext) : PagedMangaParser( SortOrder.RATING, SortOrder.NEWEST, SortOrder.ALPHABETICAL, + SortOrder.ALPHABETICAL_DESC, ) override val configKeyDomain = ConfigKey.Domain("bentomanga.com", "www.bentomanga.com") - override val availableStates: Set = EnumSet.allOf(MangaState::class.java) + override val availableStates: Set = + EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED, MangaState.ABANDONED) init { paginator.firstPage = 0 @@ -54,7 +56,8 @@ internal class BentomangaParser(context: MangaLoaderContext) : PagedMangaParser( SortOrder.POPULARITY -> "views" SortOrder.RATING -> "top" SortOrder.NEWEST -> "create" - SortOrder.ALPHABETICAL -> "name" + SortOrder.ALPHABETICAL -> "name&order=asc" + SortOrder.ALPHABETICAL_DESC -> "name&order=desc" }, ) @@ -70,6 +73,7 @@ internal class BentomangaParser(context: MangaLoaderContext) : PagedMangaParser( MangaState.FINISHED -> "2" MangaState.PAUSED -> "3" MangaState.ABANDONED -> "5" + else -> "1" }, ) } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/LugnicaScans.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/LugnicaScans.kt index 0af98d46..a2553816 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/LugnicaScans.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/fr/LugnicaScans.kt @@ -22,7 +22,8 @@ internal class LugnicaScans(context: MangaLoaderContext) : PagedMangaParser(cont SortOrder.UPDATED, ) - override val availableStates: Set = EnumSet.allOf(MangaState::class.java) + override val availableStates: Set = + EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED, MangaState.ABANDONED) override val configKeyDomain = ConfigKey.Domain("lugnica-scans.com") @@ -68,6 +69,7 @@ internal class LugnicaScans(context: MangaLoaderContext) : PagedMangaParser(cont MangaState.FINISHED -> append("1") MangaState.PAUSED -> append("4") MangaState.ABANDONED -> append("3") + else -> append("") } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt index 70bea32a..d7e3c676 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/HeanCms.kt @@ -27,7 +27,8 @@ internal abstract class HeanCms( SortOrder.POPULARITY, ) - override val availableStates: Set = EnumSet.allOf(MangaState::class.java) + override val availableStates: Set = + EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED, MangaState.ABANDONED) override val headers: Headers = Headers.Builder() .add("User-Agent", UserAgents.CHROME_DESKTOP) @@ -56,18 +57,19 @@ internal abstract class HeanCms( MangaState.FINISHED -> "Completed" MangaState.ABANDONED -> "Dropped" MangaState.PAUSED -> "Hiatus" + else -> "" }, ) } - append("&order=desc") append("&orderBy=") when (filter.sortOrder) { - SortOrder.POPULARITY -> append("total_views") - SortOrder.UPDATED -> append("latest") - SortOrder.NEWEST -> append("created_at") - SortOrder.ALPHABETICAL -> append("title") - else -> append("latest") + SortOrder.POPULARITY -> append("total_views&order=desc") + SortOrder.UPDATED -> append("latest&order=desc") + SortOrder.NEWEST -> append("created_at&order=desc") + SortOrder.ALPHABETICAL -> append("title&order=desc") + SortOrder.ALPHABETICAL_DESC -> append("title&order=asc") + else -> append("latest&order=desc") } append("&series_type=Comic&perPage=12") append("&tags_ids=") diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/es/YugenMangasEs.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/es/YugenMangasEs.kt index 64b7349a..0b73d6a0 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/es/YugenMangasEs.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/heancms/es/YugenMangasEs.kt @@ -33,18 +33,19 @@ internal class YugenMangasEs(context: MangaLoaderContext) : MangaState.FINISHED -> "Completed" MangaState.ABANDONED -> "Dropped" MangaState.PAUSED -> "Hiatus" + else -> "" }, ) } - append("&order=desc") append("&orderBy=") when (filter.sortOrder) { - SortOrder.POPULARITY -> append("total_views") - SortOrder.UPDATED -> append("latest") - SortOrder.NEWEST -> append("created_at") - SortOrder.ALPHABETICAL -> append("title") - else -> append("latest") + SortOrder.POPULARITY -> append("total_views&order=desc") + SortOrder.UPDATED -> append("latest&order=desc") + SortOrder.NEWEST -> append("created_at&order=desc") + SortOrder.ALPHABETICAL -> append("title&order=desc") + SortOrder.ALPHABETICAL_DESC -> append("title&order=asc") + else -> append("latest&order=desc") } append("&series_type=Comic&perPage=12") append("&tags_ids=") 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 c6a18378..4cdf67d6 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 @@ -151,6 +151,15 @@ internal abstract class MadaraParser( "En attente", ) + @JvmField + protected val upcoming: Set = hashSetOf( + "Upcoming", + "upcoming", + "لم تُنشَر بعد", + "Prochainement", + "À venir", + ) + // Change these values only if the site does not support manga listings via ajax protected open val withoutAjax = false @@ -203,6 +212,7 @@ internal abstract class MadaraParser( MangaState.FINISHED -> append("end") MangaState.ABANDONED -> append("canceled") MangaState.PAUSED -> append("on-hold") + MangaState.UPCOMING -> append("upcoming") } } append("&") @@ -215,6 +225,7 @@ internal abstract class MadaraParser( SortOrder.NEWEST -> append("new-manga") SortOrder.ALPHABETICAL -> append("alphabet") SortOrder.RATING -> append("rating") + else -> append("latest") } } @@ -255,6 +266,7 @@ internal abstract class MadaraParser( } SortOrder.RATING -> {} + else -> payload["vars[meta_key]"] = "_latest_update" } filter.states.forEach { @@ -264,6 +276,7 @@ internal abstract class MadaraParser( MangaState.FINISHED -> "end" MangaState.ABANDONED -> "canceled" MangaState.PAUSED -> "on-hold" + MangaState.UPCOMING -> "upcoming" } } } @@ -310,6 +323,7 @@ internal abstract class MadaraParser( in finished -> MangaState.FINISHED in abandoned -> MangaState.ABANDONED in paused -> MangaState.PAUSED + in upcoming -> MangaState.UPCOMING else -> null }, source = source, 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 633b2170..4643bc1d 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 @@ -75,7 +75,7 @@ internal class FireScans(context: MangaLoaderContext) : } } - fun String.decodeHex(): ByteArray { + private fun String.decodeHex(): ByteArray { check(length % 2 == 0) { "Must have an even length" } return chunked(2).map { it.toInt(16).toByte() }.toByteArray() 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 fdca0963..815850b1 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 @@ -68,6 +68,7 @@ internal class Hentai4Free(context: MangaLoaderContext) : SortOrder.NEWEST -> append("new-manga") SortOrder.ALPHABETICAL -> append("alphabet") SortOrder.RATING -> append("rating") + else -> append("latest") } } 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 c5b561e3..d89eb5cc 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 @@ -61,6 +61,7 @@ internal class IsekaiScanEuParser(context: MangaLoaderContext) : MangaState.FINISHED -> append("end") MangaState.ABANDONED -> append("canceled") MangaState.PAUSED -> append("on-hold") + MangaState.UPCOMING -> append("upcoming") } } append("&") @@ -73,6 +74,7 @@ internal class IsekaiScanEuParser(context: MangaLoaderContext) : SortOrder.NEWEST -> append("new-manga") SortOrder.ALPHABETICAL -> append("alphabet") SortOrder.RATING -> append("rating") + else -> append("latest") } } 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 d17a4199..d32a89e2 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 @@ -62,6 +62,7 @@ internal class MangaDass(context: MangaLoaderContext) : SortOrder.NEWEST -> append("new-manga") SortOrder.ALPHABETICAL -> append("alphabet") SortOrder.RATING -> append("rating") + else -> append("latest") } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/MadthemeParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/MadthemeParser.kt index 0c7d3665..7fc91319 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/MadthemeParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/MadthemeParser.kt @@ -76,6 +76,7 @@ internal abstract class MadthemeParser( SortOrder.ALPHABETICAL -> append("name") // On some sites without tags or searches, the alphabetical option is empty. SortOrder.NEWEST -> append("created_at") SortOrder.RATING -> append("rating") + else -> append("updated_at") } if (filter.tags.isNotEmpty()) { filter.tags.forEach { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/ManhuaScan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/ManhuaScan.kt index da959f84..2200ee6c 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/ManhuaScan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/madtheme/en/ManhuaScan.kt @@ -35,6 +35,7 @@ internal class ManhuaScan(context: MangaLoaderContext) : SortOrder.ALPHABETICAL -> append("name") SortOrder.NEWEST -> append("created_at") SortOrder.RATING -> append("rating") + else -> append("updated_at") } if (filter.tags.isNotEmpty()) { filter.tags.forEach { 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 861de4eb..67e2317f 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 @@ -30,7 +30,13 @@ internal abstract class MangaReaderParser( override val configKeyDomain = ConfigKey.Domain(domain) override val availableSortOrders: Set - get() = EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.ALPHABETICAL, SortOrder.NEWEST) + get() = EnumSet.of( + SortOrder.UPDATED, + SortOrder.POPULARITY, + SortOrder.ALPHABETICAL, + SortOrder.ALPHABETICAL_DESC, + SortOrder.NEWEST, + ) override val availableStates: Set get() = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED, MangaState.PAUSED) @@ -63,6 +69,7 @@ internal abstract class MangaReaderParser( append( when (filter.sortOrder) { SortOrder.ALPHABETICAL -> "title" + SortOrder.ALPHABETICAL_DESC -> "titlereverse" SortOrder.NEWEST -> "latest" SortOrder.POPULARITY -> "popular" SortOrder.UPDATED -> "update" 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 f672d1c5..0a055730 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 @@ -36,6 +36,7 @@ internal class SwaTeam(context: MangaLoaderContext) : append( when (filter.sortOrder) { SortOrder.ALPHABETICAL -> "a-z" + SortOrder.ALPHABETICAL_DESC -> "z-a" SortOrder.NEWEST -> "added" SortOrder.POPULARITY -> "popular" SortOrder.UPDATED -> "update" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikSan.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikSan.kt index 9074f62c..5d2f385d 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikSan.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/KomikSan.kt @@ -41,6 +41,7 @@ internal class KomikSan(context: MangaLoaderContext) : append( when (filter.sortOrder) { SortOrder.ALPHABETICAL -> "title" + SortOrder.ALPHABETICAL_DESC -> "titlereverse" SortOrder.NEWEST -> "latest" SortOrder.POPULARITY -> "popular" SortOrder.UPDATED -> "update" diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikcast.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikcast.kt index eb91b5ac..f6ba0c98 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikcast.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangareader/id/Komikcast.kt @@ -44,6 +44,7 @@ internal class Komikcast(context: MangaLoaderContext) : append( when (filter.sortOrder) { SortOrder.ALPHABETICAL -> "&orderby=titleasc" + SortOrder.ALPHABETICAL_DESC -> "&orderby=titledesc" SortOrder.POPULARITY -> "&orderby=popular" SortOrder.UPDATED -> "" // To get the Updated list, you don't need "orderby" in the url. else -> "" 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 9d025b62..921dc68c 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 @@ -97,14 +97,15 @@ internal abstract class MmrcmsParser( append(listUrl) append("/?page=") append(page.toString()) - append("&asc=true&author=&tag=&alpha=&cat=") + append("&author=&tag=&alpha=&cat=") filter.tags.oneOrThrowIfMany()?.let { append(it.key) } append("&sortBy=") when (filter.sortOrder) { - SortOrder.POPULARITY -> append("views") - SortOrder.ALPHABETICAL -> append("name") + SortOrder.POPULARITY -> append("views&asc=true") + SortOrder.ALPHABETICAL -> append("name&asc=true") + SortOrder.ALPHABETICAL_DESC -> append("name&asc=false") else -> append("name") } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerManga.kt index 477f8cf7..21011b81 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/pt/LerManga.kt @@ -14,7 +14,13 @@ import java.util.* class LerManga(context: MangaLoaderContext) : PagedMangaParser(context, MangaSource.LERMANGA, 24) { override val availableSortOrders: Set = - EnumSet.of(SortOrder.UPDATED, SortOrder.POPULARITY, SortOrder.ALPHABETICAL, SortOrder.RATING) + EnumSet.of( + SortOrder.UPDATED, + SortOrder.POPULARITY, + SortOrder.ALPHABETICAL, + SortOrder.ALPHABETICAL_DESC, + SortOrder.RATING, + ) override val configKeyDomain = ConfigKey.Domain("lermanga.org") @@ -52,6 +58,7 @@ class LerManga(context: MangaLoaderContext) : PagedMangaParser(context, MangaSou SortOrder.UPDATED -> "modified&order=desc" SortOrder.POPULARITY -> "views&order=desc" SortOrder.ALPHABETICAL -> "title&order=asc" + SortOrder.ALPHABETICAL_DESC -> "title&order=desc" SortOrder.RATING -> "rating&order=desc" else -> "modified&order=desc" }, diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/grouple/GroupleParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/grouple/GroupleParser.kt index 3cedf4e5..172be900 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/grouple/GroupleParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/ru/grouple/GroupleParser.kt @@ -276,6 +276,7 @@ internal abstract class GroupleParser( SortOrder.UPDATED -> "updated" SortOrder.NEWEST -> "created" SortOrder.RATING -> "votes" + else -> null } private suspend fun advancedSearch(domain: String, tags: Set): Response { diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/TrWebtoon.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/TrWebtoon.kt index 0d732396..f2477e69 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/TrWebtoon.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/tr/TrWebtoon.kt @@ -19,7 +19,7 @@ class TrWebtoon(context: MangaLoaderContext) : override val configKeyDomain: ConfigKey.Domain = ConfigKey.Domain("trwebtoon.com") override val availableSortOrders: Set = - EnumSet.of(SortOrder.POPULARITY, SortOrder.ALPHABETICAL, SortOrder.UPDATED) + EnumSet.of(SortOrder.POPULARITY, SortOrder.ALPHABETICAL, SortOrder.ALPHABETICAL_DESC, SortOrder.UPDATED) override val availableStates: Set = EnumSet.of(MangaState.ONGOING, MangaState.FINISHED) @@ -77,6 +77,7 @@ class TrWebtoon(context: MangaLoaderContext) : when (filter.sortOrder) { SortOrder.POPULARITY -> append("views&short_type=DESC") SortOrder.ALPHABETICAL -> append("name&short_type=ASC") + SortOrder.ALPHABETICAL_DESC -> append("name&short_type=DESC") else -> append("views&short_type=DESC") } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt index bd61e0aa..98669335 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/LxManga.kt @@ -16,6 +16,7 @@ internal class LxManga(context: MangaLoaderContext) : PagedMangaParser(context, override val availableSortOrders: Set = EnumSet.of( SortOrder.ALPHABETICAL, + SortOrder.ALPHABETICAL_DESC, SortOrder.UPDATED, SortOrder.NEWEST, SortOrder.POPULARITY, @@ -76,6 +77,7 @@ internal class LxManga(context: MangaLoaderContext) : PagedMangaParser(context, SortOrder.UPDATED -> append("-updated_at") SortOrder.NEWEST -> append("-created_at") SortOrder.ALPHABETICAL -> append("name") + SortOrder.ALPHABETICAL_DESC -> append("-name") else -> append("-updated_at") } } diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt index 02fa5fc0..cff1542b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/vi/TruyentranhLHParser.kt @@ -46,6 +46,7 @@ class TruyentranhLHParser(context: MangaLoaderContext) : SortOrder.RATING -> "like" SortOrder.POPULARITY -> "top" SortOrder.ALPHABETICAL -> "az" + SortOrder.ALPHABETICAL_DESC -> "za" }, ) diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/ZMangaParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/ZMangaParser.kt index 6c928a53..aff9aa4f 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/ZMangaParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/zmanga/ZMangaParser.kt @@ -72,6 +72,7 @@ internal abstract class ZMangaParser( SortOrder.POPULARITY -> append("popular") SortOrder.UPDATED -> append("update") SortOrder.ALPHABETICAL -> append("title") + SortOrder.ALPHABETICAL_DESC -> append("titlereverse") SortOrder.NEWEST -> append("latest") SortOrder.RATING -> append("rating") }