From 3dc8d3c29ac39ada267e7384ca294439aaaf62ae Mon Sep 17 00:00:00 2001
From: stevenyomi <95685115+stevenyomi@users.noreply.github.com>
Date: Fri, 19 Aug 2022 10:15:38 +0800
Subject: [PATCH] Jinman Tiantang: fix list parsing, update mirrors, organize
prefs (#13069)
* Jinmantiantang: fix list parsing, update mirrors, organize prefs
* rename extension to Jinman Tiantang
---
src/zh/jinmantiantang/AndroidManifest.xml | 10 ++-
src/zh/jinmantiantang/build.gradle | 4 +-
.../zh/jinmantiantang/Jinmantiantang.kt | 88 ++-----------------
.../JinmantiantangPreferences.kt | 71 +++++++++++++++
4 files changed, 87 insertions(+), 86 deletions(-)
create mode 100644 src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/JinmantiantangPreferences.kt
diff --git a/src/zh/jinmantiantang/AndroidManifest.xml b/src/zh/jinmantiantang/AndroidManifest.xml
index c454edbba..ab0251bcb 100644
--- a/src/zh/jinmantiantang/AndroidManifest.xml
+++ b/src/zh/jinmantiantang/AndroidManifest.xml
@@ -27,7 +27,15 @@
android:pathPattern="/album/..*"
android:scheme="https" />
+
+
diff --git a/src/zh/jinmantiantang/build.gradle b/src/zh/jinmantiantang/build.gradle
index 8473b46ff..7caa7e8a1 100644
--- a/src/zh/jinmantiantang/build.gradle
+++ b/src/zh/jinmantiantang/build.gradle
@@ -2,10 +2,10 @@ apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
ext {
- extName = 'Jinmantiantang'
+ extName = 'Jinman Tiantang'
pkgNameSuffix = 'zh.jinmantiantang'
extClass = '.Jinmantiantang'
- extVersionCode = 29
+ extVersionCode = 30
isNsfw = true
}
diff --git a/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/Jinmantiantang.kt b/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/Jinmantiantang.kt
index fa735aa74..8dfe3d243 100644
--- a/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/Jinmantiantang.kt
+++ b/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/Jinmantiantang.kt
@@ -2,8 +2,6 @@ package eu.kanade.tachiyomi.extension.zh.jinmantiantang
import android.app.Application
import android.content.SharedPreferences
-import androidx.preference.EditTextPreference
-import androidx.preference.ListPreference
import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.network.GET
import eu.kanade.tachiyomi.network.asObservableSuccess
@@ -17,6 +15,7 @@ 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.HttpUrl.Companion.toHttpUrlOrNull
import okhttp3.OkHttpClient
import okhttp3.Request
@@ -47,7 +46,7 @@ class Jinmantiantang : ParsedHttpSource(), ConfigurableSource {
.newBuilder()
// Add rate limit to fix manga thumbnail load failure
.rateLimitHost(
- baseUrl.toHttpUrlOrNull()!!,
+ baseUrl.toHttpUrl(),
preferences.getString(MAINSITE_RATELIMIT_PREF, MAINSITE_RATELIMIT_PREF_DEFAULT)!!.toInt(),
preferences.getString(MAINSITE_RATELIMIT_PERIOD, MAINSITE_RATELIMIT_PERIOD_DEFAULT)!!.toLong(),
)
@@ -60,7 +59,7 @@ class Jinmantiantang : ParsedHttpSource(), ConfigurableSource {
override fun popularMangaNextPageSelector(): String = "a.prevnext"
override fun popularMangaSelector(): String {
- return "div.list-col:not([style])"
+ return "div.list-col > div.p-b-15:not([data-group])"
}
private fun List.filterGenre(): List {
@@ -73,7 +72,7 @@ class Jinmantiantang : ParsedHttpSource(), ConfigurableSource {
}
override fun popularMangaFromElement(element: Element): SManga = SManga.create().apply {
- val children = element.child(0).children()
+ val children = element.children()
if (children[0].tagName() == "a") children.removeFirst()
title = children[1].text()
setUrlWithoutDomain(children[0].selectFirst("a").attr("href"))
@@ -389,86 +388,9 @@ class Jinmantiantang : ParsedHttpSource(), ConfigurableSource {
}
override fun setupPreferenceScreen(screen: PreferenceScreen) {
- val mainSiteRateLimitPreference = ListPreference(screen.context).apply {
- key = MAINSITE_RATELIMIT_PREF
- title = MAINSITE_RATELIMIT_PREF_TITLE
- entries = PREF_ENTRIES_ARRAY
- entryValues = PREF_ENTRIES_ARRAY
- summary = MAINSITE_RATELIMIT_PREF_SUMMARY
-
- setDefaultValue(MAINSITE_RATELIMIT_PREF_DEFAULT)
- }
-
- val mainSiteRateLimitPeriodPreference = ListPreference(screen.context).apply {
- key = MAINSITE_RATELIMIT_PERIOD
- title = MAINSITE_RATELIMIT_PERIOD_TITLE
- entries = PERIOD_ENTRIES_ARRAY
- entryValues = PERIOD_ENTRIES_ARRAY
- summary = MAINSITE_RATELIMIT_PERIOD_SUMMARY
-
- setDefaultValue(MAINSITE_RATELIMIT_PERIOD_DEFAULT)
- }
-
- val mirrorURLPreference = ListPreference(screen.context).apply {
- key = USE_MIRROR_URL_PREF
- title = USE_MIRROR_URL_PREF_TITLE
- entries = SITE_ENTRIES_ARRAY_DESCRIPTION
- entryValues = SITE_ENTRIES_ARRAY_VALUE
- summary = USE_MIRROR_URL_PREF_SUMMARY
-
- setDefaultValue("0")
- }
-
- val blockGenrePreference = EditTextPreference(screen.context).apply {
- key = BLOCK_PREF
- title = BLOCK_PREF_TITLE
- setDefaultValue(BLOCK_PREF_DEFAULT)
- dialogTitle = BLOCK_PREF_DIALOGTITLE
- }
-
- screen.addPreference(mainSiteRateLimitPreference)
- screen.addPreference(mainSiteRateLimitPeriodPreference)
- screen.addPreference(mirrorURLPreference)
- screen.addPreference(blockGenrePreference)
+ getPreferenceList(screen.context).forEach { screen.addPreference(it) }
}
-
companion object {
- private const val DEFAULT_SITE = "18comic.vip"
const val PREFIX_ID_SEARCH = "JM:"
-
- private const val BLOCK_PREF = "BLOCK_GENRES_LIST"
- private const val BLOCK_PREF_TITLE = "屏蔽词列表"
- private const val BLOCK_PREF_DEFAULT = "// 例如 \"YAOI cos 扶他 毛絨絨 獵奇 韩漫 韓漫\", " +
- "关键词之间用空格分离, 大小写不敏感, \"//\"后的字符会被忽略"
- private const val BLOCK_PREF_DIALOGTITLE = "关键词列表"
-
- private const val MAINSITE_RATELIMIT_PREF = "mainSiteRateLimitPreference"
- private const val MAINSITE_RATELIMIT_PREF_TITLE = "在限制时间内(下个设置项)允许的请求数量。" // Number of requests allowed within a period of units.
- private const val MAINSITE_RATELIMIT_PREF_SUMMARY = "此值影响更新书架时发起连接请求的数量。调低此值可能减小IP被屏蔽的几率,但加载速度也会变慢。需要重启软件以生效。\n当前值:%s"
- private val PREF_ENTRIES_ARRAY = (1..10).map { i -> i.toString() }.toTypedArray()
- private const val MAINSITE_RATELIMIT_PREF_DEFAULT = 1.toString()
-
- private const val MAINSITE_RATELIMIT_PERIOD = "mainSiteRateLimitPeriodPreference"
- private const val MAINSITE_RATELIMIT_PERIOD_TITLE = "限制持续时间。单位秒" // The limiting duration. Defaults to 3.
- private const val MAINSITE_RATELIMIT_PERIOD_SUMMARY = "此值影响更新书架时请求的间隔时间。调大此值可能减小IP被屏蔽的几率,但更新时间也会变慢。需要重启软件以生效。\n当前值:%s"
- private val PERIOD_ENTRIES_ARRAY = (1..60).map { i -> i.toString() }.toTypedArray()
- private const val MAINSITE_RATELIMIT_PERIOD_DEFAULT = 3.toString()
-
- private const val USE_MIRROR_URL_PREF = "useMirrorWebsitePreference"
- private const val USE_MIRROR_URL_PREF_TITLE = "使用镜像网址"
- private const val USE_MIRROR_URL_PREF_SUMMARY = "使用镜像网址。需要重启软件以生效。" // "Use mirror url. Defaults to main site"
-
- private val SITE_ENTRIES_ARRAY_DESCRIPTION = arrayOf(
- "主站", "海外分流",
- "中国大陆总站", "中国大陆分流"
- )
- private val SITE_ENTRIES_ARRAY_VALUE = arrayOf("0", "1", "2", "3")
-
- // List is based on https://jmcomic.bet/
- // Please also update AndroidManifest
- private val SITE_ENTRIES_ARRAY = arrayOf(
- DEFAULT_SITE, "18comic.org",
- "jmcomic.asia", "jmcomic.city"
- )
}
}
diff --git a/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/JinmantiantangPreferences.kt b/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/JinmantiantangPreferences.kt
new file mode 100644
index 000000000..af84618f5
--- /dev/null
+++ b/src/zh/jinmantiantang/src/eu/kanade/tachiyomi/extension/zh/jinmantiantang/JinmantiantangPreferences.kt
@@ -0,0 +1,71 @@
+package eu.kanade.tachiyomi.extension.zh.jinmantiantang
+
+import android.content.Context
+import androidx.preference.EditTextPreference
+import androidx.preference.ListPreference
+
+internal fun getPreferenceList(context: Context) = arrayOf(
+ ListPreference(context).apply {
+ key = MAINSITE_RATELIMIT_PREF
+ title = "在限制时间内(下个设置项)允许的请求数量。"
+ entries = (1..10).map { i -> i.toString() }.toTypedArray()
+ entryValues = (1..10).map { i -> i.toString() }.toTypedArray()
+ summary = "此值影响更新书架时发起连接请求的数量。调低此值可能减小IP被屏蔽的几率,但加载速度也会变慢。需要重启软件以生效。\n当前值:%s"
+
+ setDefaultValue(MAINSITE_RATELIMIT_PREF_DEFAULT)
+ },
+
+ ListPreference(context).apply {
+ key = MAINSITE_RATELIMIT_PERIOD
+ title = "限制持续时间。单位秒"
+ entries = (1..60).map { i -> i.toString() }.toTypedArray()
+ entryValues = (1..60).map { i -> i.toString() }.toTypedArray()
+ summary = "此值影响更新书架时请求的间隔时间。调大此值可能减小IP被屏蔽的几率,但更新时间也会变慢。需要重启软件以生效。\n当前值:%s"
+
+ setDefaultValue(MAINSITE_RATELIMIT_PERIOD_DEFAULT)
+ },
+
+ ListPreference(context).apply {
+ key = USE_MIRROR_URL_PREF
+ title = "使用镜像网址"
+ entries = SITE_ENTRIES_ARRAY_DESCRIPTION
+ entryValues = SITE_ENTRIES_ARRAY.indices.map { it.toString() }.toTypedArray()
+ summary = "使用镜像网址。需要重启软件以生效。"
+
+ setDefaultValue("0")
+ },
+
+ EditTextPreference(context).apply {
+ key = BLOCK_PREF
+ title = "屏蔽词列表"
+ setDefaultValue(
+ "// 例如 \"YAOI cos 扶他 毛絨絨 獵奇 韩漫 韓漫\", " +
+ "关键词之间用空格分离, 大小写不敏感, \"//\"后的字符会被忽略"
+ )
+ dialogTitle = "关键词列表"
+ },
+)
+
+internal const val BLOCK_PREF = "BLOCK_GENRES_LIST"
+
+internal const val MAINSITE_RATELIMIT_PREF = "mainSiteRateLimitPreference"
+internal const val MAINSITE_RATELIMIT_PREF_DEFAULT = 1.toString()
+
+internal const val MAINSITE_RATELIMIT_PERIOD = "mainSiteRateLimitPeriodPreference"
+internal const val MAINSITE_RATELIMIT_PERIOD_DEFAULT = 3.toString()
+
+internal const val USE_MIRROR_URL_PREF = "useMirrorWebsitePreference"
+
+internal val SITE_ENTRIES_ARRAY_DESCRIPTION = arrayOf(
+ "主站", "海外分流",
+ "中国大陆总站", "中国大陆分流",
+ "东南亚线路1", "东南亚线路2",
+)
+
+// List is based on https://jmcomic.bet/
+// Please also update AndroidManifest
+internal val SITE_ENTRIES_ARRAY = arrayOf(
+ "18comic.vip", "18comic.org",
+ "jmcomic.asia", "jmcomic1.city",
+ "jmcomic.me", "jmcomic1.me",
+)