diff --git a/src/zh/manhuagui/build.gradle b/src/zh/manhuagui/build.gradle index 7babce806..4fa8e884c 100644 --- a/src/zh/manhuagui/build.gradle +++ b/src/zh/manhuagui/build.gradle @@ -1,7 +1,7 @@ ext { extName = 'ManHuaGui' extClass = '.Manhuagui' - extVersionCode = 21 + extVersionCode = 22 } apply from: "$rootDir/common.gradle" diff --git a/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Manhuagui.kt b/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Manhuagui.kt index 5000db967..0dfdf1aaf 100644 --- a/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Manhuagui.kt +++ b/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Manhuagui.kt @@ -130,19 +130,31 @@ class Manhuagui( // Example: https://www.manhuagui.com/list/japan_maoxian_qingnian_2020_b/update_p1.html // /$params /$sortOrder $page - var url = "$baseUrl/list" - if (params != "") { - url += "/$params" - } - url += if (sortOrder == "") { - "/index_p$page.html" - } else { - "/${sortOrder}_p$page.html" + val url: String = when { + sortOrder == "" -> "$baseUrl/list${params.toPathOrEmpty()}/index_p$page.html" + sortOrder.startsWith(RANK_PREFIX) -> { + "$baseUrl/rank${params.toPathOrEmpty()}".let { + if (it.endsWith("rank")) { + "$it/${sortOrder.removePrefix(RANK_PREFIX).toPathOrEmpty("",".html")}" + } else { + "$it${sortOrder.removePrefix(RANK_PREFIX).toPathOrEmpty("_")}.html" + } + } + } + else -> "$baseUrl/list${params.toPathOrEmpty()}/${sortOrder}_p$page.html" } return GET(url, headers) } } + private fun String.toPathOrEmpty(prefix: String = "/", suffix: String = ""): String { + return if (isEmpty()) { + this + } else { + "$prefix$this$suffix" + } + } + // Return mobile webpage url to "Open in browser" and "Share manga". override fun mangaDetailsRequest(manga: SManga): Request { return GET(mobileWebsiteUrl + manga.url) @@ -221,23 +233,38 @@ class Manhuagui( override fun searchMangaParse(response: Response): MangasPage { val document = response.asJsoup() - if (response.request.url.encodedPath.startsWith("/s/")) { - // Normal search - val mangas = document.select(searchMangaSelector()).map { element -> - searchMangaFromElement(element) - } - val hasNextPage = searchMangaNextPageSelector().let { selector -> - document.select(selector).first() - } != null + return when { + response.request.url.encodedPath.startsWith("/s/") -> { + // Normal search + val mangas = document.select(searchMangaSelector()).map { element -> + searchMangaFromElement(element) + } + val hasNextPage = searchMangaNextPageSelector().let { selector -> + document.select(selector).first() + } != null - return MangasPage(mangas, hasNextPage) - } else { - // Filters search - val mangas = document.select(popularMangaSelector()).map { element -> - popularMangaFromElement(element) + MangasPage(mangas, hasNextPage) + } + response.request.url.encodedPath.startsWith("/rank/") -> { + MangasPage( + document.select("td.rank-title").map { + SManga.create().apply { + url = it.select("a").attr("href") + title = it.select("a").text() + // The ranking page does not include images. + } + }, + false, + ) + } + else -> { + // Filters search + val mangas = document.select(popularMangaSelector()).map { element -> + popularMangaFromElement(element) + } + val hasNextPage = document.select(popularMangaNextPageSelector()).first() != null + MangasPage(mangas, hasNextPage) } - val hasNextPage = document.select(popularMangaNextPageSelector()).first() != null - return MangasPage(mangas, hasNextPage) } } @@ -537,6 +564,10 @@ class Manhuagui( Pair("最新发布", ""), // Publish date Pair("最新更新", "update"), Pair("评分最高", "rate"), + Pair("日排行", RANK_PREFIX), + Pair("周排行", "${RANK_PREFIX}week"), + Pair("月排行", "${RANK_PREFIX}month"), + Pair("总排行", "${RANK_PREFIX}total"), ), ) @@ -614,6 +645,11 @@ class Manhuagui( "按年份", arrayOf( Pair("全部", ""), + Pair("2025年", "2025"), + Pair("2024年", "2024"), + Pair("2023年", "2023"), + Pair("2022年", "2022"), + Pair("2021年", "2021"), Pair("2020年", "2020"), Pair("2019年", "2019"), Pair("2018年", "2018"), @@ -698,6 +734,8 @@ class Manhuagui( private const val IMAGE_CDN_RATELIMIT_PREF_SUMMARY = "此值影响加载图片时发起连接请求的数量。调低此值可能减小IP被屏蔽的几率,但加载速度也会变慢。需要重启软件以生效。\n当前值:%s" // "This value affects network request amount for loading image. Lower this value may reduce the chance to get IP Ban, but loading speed will be slower too. Tachiyomi restart required." private const val IMAGE_CDN_RATELIMIT_DEFAULT_VALUE = "4" + private const val RANK_PREFIX = "rank_" + private val ENTRIES_ARRAY = (1..10).map { i -> i.toString() }.toTypedArray() const val PREFIX_ID_SEARCH = "id:" } diff --git a/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Comic.kt b/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/ManhuaguiDTO.kt similarity index 85% rename from src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Comic.kt rename to src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/ManhuaguiDTO.kt index 2f37ec1d3..a2d55e348 100644 --- a/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Comic.kt +++ b/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/ManhuaguiDTO.kt @@ -3,7 +3,13 @@ package eu.kanade.tachiyomi.extension.zh.manhuagui import kotlinx.serialization.Serializable @Serializable -data class Comic( +class Sl( + val e: Int? = 0, + val m: String? = "", +) + +@Serializable +class Comic( val bid: Int? = 0, val block_cc: String? = "", val bname: String? = "", diff --git a/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Sl.kt b/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Sl.kt deleted file mode 100644 index e3126be2a..000000000 --- a/src/zh/manhuagui/src/eu/kanade/tachiyomi/extension/zh/manhuagui/Sl.kt +++ /dev/null @@ -1,9 +0,0 @@ -package eu.kanade.tachiyomi.extension.zh.manhuagui - -import kotlinx.serialization.Serializable - -@Serializable -data class Sl( - val e: Int? = 0, - val m: String? = "", -)