From 7d754490b85528919f604a36e43b407c68cda456 Mon Sep 17 00:00:00 2001 From: marioplus Date: Thu, 23 Oct 2025 18:33:31 +0800 Subject: [PATCH] fix(bakamh): fix unable to load chapter (#11180) * fix(bakamh): fix unable to load chapter * refactor(bakamh): optimize chapter list parsing logic - Consolidate chapter selectors into single method --- src/zh/bakamh/build.gradle | 2 +- .../tachiyomi/extension/zh/bakamh/Bakamh.kt | 40 ++++++++++++++++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/zh/bakamh/build.gradle b/src/zh/bakamh/build.gradle index 69980a1e6..3aa8e1350 100644 --- a/src/zh/bakamh/build.gradle +++ b/src/zh/bakamh/build.gradle @@ -3,7 +3,7 @@ ext { extClass = '.Bakamh' themePkg = 'madara' baseUrl = 'https://bakamh.com' - overrideVersionCode = 3 + overrideVersionCode = 4 isNsfw = true } diff --git a/src/zh/bakamh/src/eu/kanade/tachiyomi/extension/zh/bakamh/Bakamh.kt b/src/zh/bakamh/src/eu/kanade/tachiyomi/extension/zh/bakamh/Bakamh.kt index 0b1b05cca..86df122be 100644 --- a/src/zh/bakamh/src/eu/kanade/tachiyomi/extension/zh/bakamh/Bakamh.kt +++ b/src/zh/bakamh/src/eu/kanade/tachiyomi/extension/zh/bakamh/Bakamh.kt @@ -2,7 +2,9 @@ package eu.kanade.tachiyomi.extension.zh.bakamh import eu.kanade.tachiyomi.multisrc.madara.Madara import eu.kanade.tachiyomi.source.model.SChapter +import eu.kanade.tachiyomi.util.asJsoup import okhttp3.Headers +import okhttp3.Response import org.jsoup.nodes.Element import java.text.SimpleDateFormat import java.util.Locale @@ -15,16 +17,42 @@ class Bakamh : Madara( ) { override val mangaDetailsSelectorStatus = ".post-content_item:contains(状态) .summary-content" - override fun chapterListSelector() = "div.tab-content li:has(a[data-chapter-url])" - override fun headersBuilder(): Headers.Builder { return super.headersBuilder() .add("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7") } - override fun chapterFromElement(element: Element) = SChapter.create().apply { - val urlElement = element.selectFirst(chapterUrlSelector)!! - url = urlElement.attr("abs:data-chapter-url") - name = urlElement.text() + override fun chapterListSelector() = ".chapter-loveYou, li a[onclick], li a" + + override fun chapterListParse(response: Response): List { + val mangaUrl = response.request.url.toString().lowercase() + val doc = response.asJsoup() + return doc.select(chapterListSelector()) + .mapNotNull { paresChapter(it, mangaUrl) } + } + + fun paresChapter(element: Element, mangaUrl: String): SChapter? { + // current url attribute + if (element.hasAttr("storage-chapter-url")) { + return SChapter.create().apply { + url = element.absUrl("storage-chapter-url") + name = element.text() + chapter_number = 0F + } + } + + // compatibility operation for modified versions + return element.attributes() + .find { attr -> + val value = attr.value.lowercase() + value.startsWith(mangaUrl) && value != mangaUrl + } + ?.let { attr -> + SChapter.create().apply { + url = element.absUrl(attr.key) + name = element.text() + chapter_number = 0F + } + } } }