Fix Dm5 chapters and pages (#10341)
* Fix Dm5 chapters and pages * desktop user agent * clear more cookies * clear all cookies
This commit is contained in:
parent
14b5edc771
commit
3e14b9b697
@ -1,7 +1,7 @@
|
|||||||
ext {
|
ext {
|
||||||
extName = 'Dm5'
|
extName = 'Dm5'
|
||||||
extClass = '.Dm5'
|
extClass = '.Dm5'
|
||||||
extVersionCode = 6
|
extVersionCode = 7
|
||||||
isNsfw = true
|
isNsfw = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
package eu.kanade.tachiyomi.extension.zh.dm5
|
package eu.kanade.tachiyomi.extension.zh.dm5
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
|
import android.util.Log
|
||||||
|
import android.webkit.CookieManager
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.preference.ListPreference
|
import androidx.preference.ListPreference
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import androidx.preference.SwitchPreferenceCompat
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
@ -36,6 +39,7 @@ class Dm5 : ParsedHttpSource(), ConfigurableSource {
|
|||||||
|
|
||||||
// Some mangas are blocked without this
|
// Some mangas are blocked without this
|
||||||
override fun headersBuilder() = super.headersBuilder().set("Accept-Language", "zh-TW")
|
override fun headersBuilder() = super.headersBuilder().set("Accept-Language", "zh-TW")
|
||||||
|
.set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/139.0.0.0 Safari/537.36")
|
||||||
|
|
||||||
override fun popularMangaRequest(page: Int) = GET("$baseUrl/manhua-list-p$page/", headers)
|
override fun popularMangaRequest(page: Int) = GET("$baseUrl/manhua-list-p$page/", headers)
|
||||||
override fun popularMangaNextPageSelector(): String = "div.page-pagination a:contains(>)"
|
override fun popularMangaNextPageSelector(): String = "div.page-pagination a:contains(>)"
|
||||||
@ -83,8 +87,9 @@ class Dm5 : ParsedHttpSource(), ConfigurableSource {
|
|||||||
override fun chapterListParse(response: Response): List<SChapter> {
|
override fun chapterListParse(response: Response): List<SChapter> {
|
||||||
val document = response.asJsoup()
|
val document = response.asJsoup()
|
||||||
// May need to click button on website to read
|
// May need to click button on website to read
|
||||||
document.selectFirst("div#chapterlistload") ?: throw Exception("請到webview確認")
|
val container = document.selectFirst("div#chapterlistload")
|
||||||
val li = document.select("div#chapterlistload li > a").map {
|
?: throw Exception("请到 WebView 确认;切换网络环境后可尝试扩展设置里面的“(动漫屋专用)清除 Cookie”")
|
||||||
|
val li = container.select("li > a").map {
|
||||||
SChapter.create().apply {
|
SChapter.create().apply {
|
||||||
url = it.attr("href")
|
url = it.attr("href")
|
||||||
name = if (it.selectFirst("span.detail-lock, span.view-lock") != null) {
|
name = if (it.selectFirst("span.detail-lock, span.view-lock") != null) {
|
||||||
@ -182,8 +187,10 @@ class Dm5 : ParsedHttpSource(), ConfigurableSource {
|
|||||||
override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException()
|
override fun imageUrlParse(document: Document): String = throw UnsupportedOperationException()
|
||||||
|
|
||||||
override fun imageRequest(page: Page): Request {
|
override fun imageRequest(page: Page): Request {
|
||||||
val header = headers.newBuilder().add("Referer", baseUrl).build()
|
val url = page.imageUrl!!.toHttpUrl()
|
||||||
return GET(page.imageUrl!!, header)
|
val cid = url.queryParameter("cid")!!
|
||||||
|
val headers = headers.newBuilder().add("Referer", "$baseUrl/m$cid").build()
|
||||||
|
return GET(url, headers)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
override fun setupPreferenceScreen(screen: PreferenceScreen) {
|
||||||
@ -208,6 +215,41 @@ class Dm5 : ParsedHttpSource(), ConfigurableSource {
|
|||||||
screen.addPreference(mirrorPreference)
|
screen.addPreference(mirrorPreference)
|
||||||
screen.addPreference(chapterCommentsPreference)
|
screen.addPreference(chapterCommentsPreference)
|
||||||
screen.addPreference(sortChapterPreference)
|
screen.addPreference(sortChapterPreference)
|
||||||
|
|
||||||
|
SwitchPreferenceCompat(screen.context).run {
|
||||||
|
title = "(动漫屋专用)清除 Cookie"
|
||||||
|
summary = "切换网络环境后可尝试清除(app 自带的清除 Cookie 无效)"
|
||||||
|
setOnPreferenceChangeListener { _, _ ->
|
||||||
|
val message = try {
|
||||||
|
val manager = CookieManager.getInstance()
|
||||||
|
var before = 0
|
||||||
|
var after = 0
|
||||||
|
for (mirror in MIRROR_ENTRIES) {
|
||||||
|
val cookies = manager.getCookie(mirror) ?: continue
|
||||||
|
val cookieList = cookies.split("; ")
|
||||||
|
before += cookieList.size
|
||||||
|
val url = mirror.toHttpUrl()
|
||||||
|
val domain = url.host
|
||||||
|
val topDomain = url.topPrivateDomain()
|
||||||
|
for (cookie in cookieList) {
|
||||||
|
val name = cookie.substringBefore('=')
|
||||||
|
manager.setCookie(mirror, "$name=; Max-Age=-1; Path=/")
|
||||||
|
manager.setCookie(mirror, "$name=; Max-Age=-1; Domain=$domain; Path=/")
|
||||||
|
manager.setCookie(mirror, "$name=; Max-Age=-1; Domain=$topDomain; Path=/")
|
||||||
|
}
|
||||||
|
val cookiesAfter = manager.getCookie(mirror) ?: continue
|
||||||
|
after += cookiesAfter.split("; ").size
|
||||||
|
}
|
||||||
|
"一共 $before 条 Cookie,清除了 ${before - after} 条"
|
||||||
|
} catch (e: Exception) {
|
||||||
|
Log.e("Dm5", "failed to clear cookies", e)
|
||||||
|
"清除失败:$e"
|
||||||
|
}
|
||||||
|
Toast.makeText(screen.context, message, Toast.LENGTH_LONG).show()
|
||||||
|
false
|
||||||
|
}
|
||||||
|
screen.addPreference(this)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user