From f0f50a37b5081b573dd1c78ce03fb94927b22060 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 8 May 2024 10:26:29 +0300 Subject: [PATCH] Fixes batch #733 #730 #731 #727 --- .../parsers/site/all/ExHentaiParser.kt | 2 +- .../kotatsu/parsers/site/all/MangaPark.kt | 31 ++++++++++--------- .../site/madara/en/IsekaiScanEuParser.kt | 2 +- .../parsers/site/mangabox/en/Manganato.kt | 4 ++- .../parsers/site/mangareader/en/RizzComic.kt | 4 +-- .../kotatsu/parsers/util/FaviconParser.kt | 2 +- 6 files changed, 25 insertions(+), 20 deletions(-) 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 e0795e56b..9e05e9551 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 @@ -147,7 +147,7 @@ internal class ExHentaiParser( val tagsDiv = gLink.nextElementSibling() ?: gLink.parseFailed("tags div not found") val mainTag = td2.selectFirst("div.cn")?.let { div -> MangaTag( - title = div.text().toTitleCase(), + title = div.text().toTitleCase(Locale.ENGLISH), key = tagIdByClass(div.classNames()) ?: return@let null, source = source, ) 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 2a6a70e5b..8f8b21665 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 @@ -186,7 +186,7 @@ internal class MangaPark(context: MangaLoaderContext) : }, tags = tags, isNsfw = nsfw, - chapters = doc.body().select("div.group.flex div.px-2").mapChapters { i, div -> + chapters = doc.body().select("div.group.flex div.px-2").mapChapters(reversed = true) { i, div -> val a = div.selectFirstOrThrow("a") val href = a.attrAsRelativeUrl("href") val dateText = div.selectFirst("span[q:key=Ee_0]")?.text() @@ -247,22 +247,25 @@ internal class MangaPark(context: MangaLoaderContext) : val doc = webClient.httpGet(chapter.url.toAbsoluteUrl(domain)).parseHtml() val script = if (doc.selectFirst("script:containsData(comic-)") != null) { doc.selectFirstOrThrow("script:containsData(comic-)").data() - .substringAfterLast("\"comic-").split("\",\"") + .substringAfterLast("\"comic-") } else { doc.selectFirstOrThrow("script:containsData(manga-)").data() - .substringAfterLast("\"manga-").split("\",\"") + .substringAfterLast("\"manga-") } - return script.mapNotNull { url -> - if (!url.startsWith("https://")) { - return@mapNotNull null - } else { - MangaPage( - id = generateUid(url), - url = url, - preview = null, - source = source, - ) + return Regex("\"(https?:.+?)\"") + .findAll(script) + .mapNotNullTo(ArrayList()) { + val url = it.groupValues.getOrNull(1) ?: return@mapNotNullTo null + if (url.contains("/comic/") || url.contains("/manga/")) { + MangaPage( + id = generateUid(url), + url = url, + preview = null, + source = source, + ) + } else { + return@mapNotNullTo 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 ae66efdd4..7252717a7 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 @@ -8,7 +8,7 @@ import org.koitharu.kotatsu.parsers.util.* @MangaSourceParser("ISEKAISCAN_EU", "IsekaiScan.to", "en") internal class IsekaiScanEuParser(context: MangaLoaderContext) : - MadaraParser(context, MangaSource.ISEKAISCAN_EU, "m.isekaiscan.to") { + MadaraParser(context, MangaSource.ISEKAISCAN_EU, "paragonscans.com") { override val datePattern = "MM/dd/yyyy" override val withoutAjax = true diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangabox/en/Manganato.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangabox/en/Manganato.kt index e6b57a202..0a0e45830 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangabox/en/Manganato.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/site/mangabox/en/Manganato.kt @@ -14,5 +14,7 @@ internal class Manganato(context: MangaLoaderContext) : "chapmanganato.to", "chapmanganato.com", ) - override val otherDomain = configKeyDomain.defaultValue + override val otherDomain = "chapmanganato.to" + + override val selectPage = ".container-chapter-reader > img" } 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 index 174f9d28b..aefbfd8fc 100644 --- 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 @@ -12,14 +12,14 @@ import java.util.* @MangaSourceParser("RIZZCOMIC", "RizzComic", "en") internal class RizzComic(context: MangaLoaderContext) : - MangaReaderParser(context, MangaSource.RIZZCOMIC, "rizzcomic.com", pageSize = 50, searchPageSize = 20) { + MangaReaderParser(context, MangaSource.RIZZCOMIC, "rizzfables.com", pageSize = 50, searchPageSize = 20) { override val datePattern = "dd MMM yyyy" override val listUrl = "/series" override val availableSortOrders: Set = EnumSet.of(SortOrder.ALPHABETICAL) override val availableStates: Set = emptySet() override val isMultipleTagsSupported = false - override val isSearchSupported = false + override val isSearchSupported = true override val isTagsExclusionSupported = false // TODO Query created in json diff --git a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/FaviconParser.kt b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/FaviconParser.kt index 60e5a26e5..b396c045b 100644 --- a/src/main/kotlin/org/koitharu/kotatsu/parsers/util/FaviconParser.kt +++ b/src/main/kotlin/org/koitharu/kotatsu/parsers/util/FaviconParser.kt @@ -55,7 +55,7 @@ class FaviconParser( private suspend fun parseManifest(url: String): List { val json = webClient.httpGet(url).parseJson() - val icons = json.getJSONArray("icons") + val icons = json.optJSONArray("icons") ?: return emptyList() return icons.mapJSON { jo -> Favicon( url = jo.getString("src").resolveLink(),