TopTruyen, DocTruyen3Q: option automatically change domain (#8417)

* add option automatic change domain

add option automatic change domain TopTruyen and DocTruyen3Q

* update
This commit is contained in:
Fioren 2025-04-10 23:29:42 +07:00 committed by Draff
parent eb9b9b9aee
commit fe7d5c5019
No known key found for this signature in database
GPG Key ID: E8A89F3211677653
4 changed files with 82 additions and 20 deletions

View File

@ -2,8 +2,8 @@ ext {
extName = 'DocTruyen3Q'
extClass = '.DocTruyen3Q'
themePkg = 'wpcomics'
baseUrl = 'https://doctruyen3qui5.pro'
overrideVersionCode = 7
baseUrl = 'https://doctruyen3qui6.pro'
overrideVersionCode = 8
isNsfw = true
}

View File

@ -23,7 +23,7 @@ import java.util.TimeZone
class DocTruyen3Q :
WPComics(
"DocTruyen3Q",
"https://doctruyen3qui5.pro",
"https://doctruyen3qui6.pro",
"vi",
dateFormat = SimpleDateFormat("dd-MM-yyyy", Locale.ROOT).apply {
timeZone = TimeZone.getTimeZone("Asia/Ho_Chi_Minh")
@ -32,10 +32,6 @@ class DocTruyen3Q :
),
ConfigurableSource {
override val client = super.client.newBuilder()
.rateLimit(3)
.build()
override fun pageListParse(document: Document): List<Page> {
return document.select(".page-chapter[id] img").mapIndexed { index, element ->
val img = element.attr("abs:src").let { url ->
@ -100,7 +96,30 @@ class DocTruyen3Q :
override val genresSelector = ".categories-detail ul.nav li:not(.active) a"
// Configurable, automatic change domain
private val preferences: SharedPreferences = getPreferences()
private var hasCheckedRedirect = false
// Catch redirects
override val client = super.client.newBuilder()
.addInterceptor { chain ->
val originalRequest = chain.request()
val response = chain.proceed(originalRequest)
if (!hasCheckedRedirect && preferences.getBoolean(AUTO_CHANGE_DOMAIN_PREF, false)) {
hasCheckedRedirect = true
val originalHost = super.baseUrl.toHttpUrl().host
val newHost = response.request.url.host
if (newHost != originalHost) {
val newBaseUrl = "${response.request.url.scheme}://$newHost"
preferences.edit()
.putString(BASE_URL_PREF, newBaseUrl)
.apply()
}
}
response
}
.rateLimit(5)
.build()
init {
preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
@ -116,20 +135,28 @@ class DocTruyen3Q :
override val baseUrl by lazy { getPrefBaseUrl() }
override fun setupPreferenceScreen(screen: PreferenceScreen) {
val defaultUrl = super.baseUrl
val baseUrlPref = androidx.preference.EditTextPreference(screen.context).apply {
key = BASE_URL_PREF
title = BASE_URL_PREF_TITLE
summary = BASE_URL_PREF_SUMMARY
setDefaultValue(super.baseUrl)
setDefaultValue(defaultUrl)
dialogTitle = BASE_URL_PREF_TITLE
dialogMessage = "Default: ${super.baseUrl}"
dialogMessage = "Default: $defaultUrl"
setOnPreferenceChangeListener { _, _ ->
Toast.makeText(screen.context, RESTART_APP, Toast.LENGTH_LONG).show()
true
}
}
screen.addPreference(baseUrlPref)
val autoDomainPref = androidx.preference.SwitchPreferenceCompat(screen.context).apply {
key = AUTO_CHANGE_DOMAIN_PREF
title = AUTO_CHANGE_DOMAIN_TITLE
summary = AUTO_CHANGE_DOMAIN_SUMMARY
setDefaultValue(false)
}
screen.addPreference(autoDomainPref)
}
private fun getPrefBaseUrl(): String = preferences.getString(BASE_URL_PREF, super.baseUrl)!!
@ -141,5 +168,9 @@ class DocTruyen3Q :
private const val BASE_URL_PREF = "overrideBaseUrl"
private const val BASE_URL_PREF_SUMMARY =
"Dành cho sử dụng tạm thời, cập nhật tiện ích sẽ xóa cài đặt."
private const val AUTO_CHANGE_DOMAIN_PREF = "autoChangeDomain"
private const val AUTO_CHANGE_DOMAIN_TITLE = "Tự động cập nhật domain"
private const val AUTO_CHANGE_DOMAIN_SUMMARY =
"Khi mở ứng dụng, ứng dụng sẽ tự động cập nhật domain mới nếu website chuyển hướng."
}
}

View File

@ -2,8 +2,8 @@ ext {
extName = 'Top Truyen'
extClass = '.TopTruyen'
themePkg = 'wpcomics'
baseUrl = 'https://www.toptruyentv3.pro'
overrideVersionCode = 11
baseUrl = 'https://www.toptruyentv5.pro'
overrideVersionCode = 12
isNsfw = true
}

View File

@ -23,7 +23,7 @@ import java.util.TimeZone
class TopTruyen :
WPComics(
"Top Truyen",
"https://www.toptruyentv3.pro",
"https://www.toptruyentv5.pro",
"vi",
dateFormat = SimpleDateFormat("dd-MM-yyyy", Locale.ROOT).apply {
timeZone = TimeZone.getTimeZone("Asia/Ho_Chi_Minh")
@ -32,10 +32,6 @@ class TopTruyen :
),
ConfigurableSource {
override val client = super.client.newBuilder()
.rateLimit(3)
.build()
override fun pageListParse(document: Document): List<Page> {
return document.select("div[id^=page_].page-chapter img").mapIndexed { index, element ->
val img = element.attr("abs:src")
@ -94,7 +90,30 @@ class TopTruyen :
override val genresSelector = ".categories-detail ul.nav li:not(.active) a"
// Configurable, automatic change domain
private val preferences: SharedPreferences = getPreferences()
private var hasCheckedRedirect = false
// Catch redirects
override val client = super.client.newBuilder()
.addInterceptor { chain ->
val originalRequest = chain.request()
val response = chain.proceed(originalRequest)
if (!hasCheckedRedirect && preferences.getBoolean(AUTO_CHANGE_DOMAIN_PREF, false)) {
hasCheckedRedirect = true
val originalHost = super.baseUrl.toHttpUrl().host
val newHost = response.request.url.host
if (newHost != originalHost) {
val newBaseUrl = "${response.request.url.scheme}://$newHost"
preferences.edit()
.putString(BASE_URL_PREF, newBaseUrl)
.apply()
}
}
response
}
.rateLimit(5)
.build()
init {
preferences.getString(DEFAULT_BASE_URL_PREF, null).let { prefDefaultBaseUrl ->
@ -110,20 +129,28 @@ class TopTruyen :
override val baseUrl by lazy { getPrefBaseUrl() }
override fun setupPreferenceScreen(screen: PreferenceScreen) {
val defaultUrl = super.baseUrl
val baseUrlPref = androidx.preference.EditTextPreference(screen.context).apply {
key = BASE_URL_PREF
title = BASE_URL_PREF_TITLE
summary = BASE_URL_PREF_SUMMARY
setDefaultValue(super.baseUrl)
setDefaultValue(defaultUrl)
dialogTitle = BASE_URL_PREF_TITLE
dialogMessage = "Default: ${super.baseUrl}"
dialogMessage = "Default: $defaultUrl"
setOnPreferenceChangeListener { _, _ ->
Toast.makeText(screen.context, RESTART_APP, Toast.LENGTH_LONG).show()
true
}
}
screen.addPreference(baseUrlPref)
val autoDomainPref = androidx.preference.SwitchPreferenceCompat(screen.context).apply {
key = AUTO_CHANGE_DOMAIN_PREF
title = AUTO_CHANGE_DOMAIN_TITLE
summary = AUTO_CHANGE_DOMAIN_SUMMARY
setDefaultValue(false)
}
screen.addPreference(autoDomainPref)
}
private fun getPrefBaseUrl(): String = preferences.getString(BASE_URL_PREF, super.baseUrl)!!
@ -135,5 +162,9 @@ class TopTruyen :
private const val BASE_URL_PREF = "overrideBaseUrl"
private const val BASE_URL_PREF_SUMMARY =
"Dành cho sử dụng tạm thời, cập nhật tiện ích sẽ xóa cài đặt."
private const val AUTO_CHANGE_DOMAIN_PREF = "autoChangeDomain"
private const val AUTO_CHANGE_DOMAIN_TITLE = "Tự động cập nhật domain"
private const val AUTO_CHANGE_DOMAIN_SUMMARY =
"Khi mở ứng dụng, ứng dụng sẽ tự động cập nhật domain mới nếu website chuyển hướng."
}
}