Manhuagui: Add Ranking Filter (#7499)

* Manhugui: Add Ranking Filter

* Manhugui: Fix original sort function

* Manhuagui: Correct the file name
This commit is contained in:
AlphaBoom 2025-02-06 21:24:18 +08:00 committed by Draff
parent 0d94dabe27
commit 4b90bdeb0c
No known key found for this signature in database
GPG Key ID: E8A89F3211677653
4 changed files with 69 additions and 34 deletions

View File

@ -1,7 +1,7 @@
ext {
extName = 'ManHuaGui'
extClass = '.Manhuagui'
extVersionCode = 21
extVersionCode = 22
}
apply from: "$rootDir/common.gradle"

View File

@ -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"
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 {
"/${sortOrder}_p$page.html"
"$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,7 +233,8 @@ class Manhuagui(
override fun searchMangaParse(response: Response): MangasPage {
val document = response.asJsoup()
if (response.request.url.encodedPath.startsWith("/s/")) {
return when {
response.request.url.encodedPath.startsWith("/s/") -> {
// Normal search
val mangas = document.select(searchMangaSelector()).map { element ->
searchMangaFromElement(element)
@ -230,14 +243,28 @@ class Manhuagui(
document.select(selector).first()
} != null
return MangasPage(mangas, hasNextPage)
} else {
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
return MangasPage(mangas, hasNextPage)
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:"
}

View File

@ -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? = "",

View File

@ -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? = "",
)