YYmanhua: Add the latest chapter upload date (#9334)

Add the latest chapter upload date
This commit is contained in:
Hualiang 2025-06-20 10:26:44 +08:00 committed by Draff
parent 4d61698687
commit 9fb63b4f72
Signed by: Draff
GPG Key ID: E8A89F3211677653
2 changed files with 60 additions and 2 deletions

View File

@ -1,7 +1,7 @@
ext {
extName = 'YYmanhua'
extClass = '.YYmanhua'
extVersionCode = 1
extVersionCode = 2
isNsfw = false
}

View File

@ -6,11 +6,16 @@ import eu.kanade.tachiyomi.source.model.Page
import eu.kanade.tachiyomi.source.model.SChapter
import eu.kanade.tachiyomi.source.model.SManga
import eu.kanade.tachiyomi.source.online.ParsedHttpSource
import eu.kanade.tachiyomi.util.asJsoup
import okhttp3.HttpUrl.Companion.toHttpUrl
import okhttp3.Request
import okhttp3.Response
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
import java.util.TimeZone
class YYmanhua : ParsedHttpSource() {
@ -21,6 +26,10 @@ class YYmanhua : ParsedHttpSource() {
companion object {
val DESC_REGEX = Regex("\\[\\+展开]|\\[-折叠]")
val DATE_REGEX = Regex("(?:连载中|已完结).*?章,? (.*?) (?:最新|完结)")
val DATE_FORMAT_REGEX1 = Regex("\\d{1,2}/\\d{1,2}")
val DATE_FORMAT_REGEX2 = Regex("\\d{1,2}月\\d{1,2}号")
val DATE_FORMAT_REGEX3 = Regex("\\d{4}-\\d{1,2}-\\d{1,2}")
val CHAPTER_REGEX = Regex("第(\\d+(?:\\.\\d+)?)[话話]")
val NUM_REGEX = Regex("\\d+")
val IMG_REGEX = Regex("var pix=\"(.*?)\".*?var pvalue=\\[\"(.*?)\"")
@ -105,7 +114,21 @@ class YYmanhua : ParsedHttpSource() {
// override fun chapterListRequest(manga: SManga) = GET(baseUrl + manga.url, headers)
override fun chapterListSelector() = "#chapterlistload a"
override fun chapterListSelector() = throw UnsupportedOperationException()
override fun chapterListParse(response: Response): List<SChapter> {
val document = response.asJsoup()
val info = document.selectFirst(".detail-list-form-title")!!.text()
val date = parseDate(DATE_REGEX.find(info)?.groups?.get(1)?.value)
return document.select("#chapterlistload a").map {
SChapter.create().apply {
this.setUrlWithoutDomain(it.absUrl("href"))
name = it.text()
chapter_number = CHAPTER_REGEX.find(name)?.groups?.get(1)?.value?.toFloat() ?: 0F
date_upload = date
}
}
}
override fun chapterFromElement(element: Element) = SChapter.create().apply {
this.setUrlWithoutDomain(element.absUrl("href"))
@ -133,6 +156,41 @@ class YYmanhua : ParsedHttpSource() {
override fun imageUrlParse(document: Document) = throw UnsupportedOperationException()
// date: 51分钟前 | 今天 00:00 | 昨天 19:06 | 前天 23:22 | 06/16 | 06月16号 | 2024-12-02
private fun parseDate(date: String?): Long {
val calendar = Calendar.getInstance()
val today = calendar.timeInMillis
if (date == null) return today
val str = date.trim()
return when {
str.contains("前天") -> {
calendar.add(Calendar.DAY_OF_YEAR, -2)
calendar.timeInMillis
}
str.contains("") || str.contains("今天") -> today
str.contains("昨天") -> {
calendar.add(Calendar.DAY_OF_YEAR, -1)
calendar.timeInMillis
}
str.matches(DATE_FORMAT_REGEX1) -> formatter(str, "MM/dd")
str.matches(DATE_FORMAT_REGEX2) -> formatter(str, "MM月dd号")
str.matches(DATE_FORMAT_REGEX3) -> formatter(str, "yyyy-MM-dd")
else -> today
}
}
private fun formatter(dateStr: String, pattern: String): Long {
val sdf = SimpleDateFormat(pattern, Locale.getDefault())
sdf.timeZone = TimeZone.getDefault()
val cal = Calendar.getInstance()
cal.time = sdf.parse(dateStr)!!
if (!pattern.contains("yyyy")) {
val currentYear = Calendar.getInstance().get(Calendar.YEAR)
cal.set(Calendar.YEAR, currentYear)
}
return cal.timeInMillis
}
private fun decode(ciphertext: String): String {
val groups = DECODE_REGEX1.find(ciphertext)?.groupValues!!
val d = mutableMapOf<String, String>()