diff --git a/src/vi/doctruyen3q/build.gradle b/src/vi/doctruyen3q/build.gradle index 25b814983..25f866780 100644 --- a/src/vi/doctruyen3q/build.gradle +++ b/src/vi/doctruyen3q/build.gradle @@ -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 } diff --git a/src/vi/doctruyen3q/src/eu/kanade/tachiyomi/extension/vi/doctruyen3q/DocTruyen3Q.kt b/src/vi/doctruyen3q/src/eu/kanade/tachiyomi/extension/vi/doctruyen3q/DocTruyen3Q.kt index 9dd305954..53ee66a84 100644 --- a/src/vi/doctruyen3q/src/eu/kanade/tachiyomi/extension/vi/doctruyen3q/DocTruyen3Q.kt +++ b/src/vi/doctruyen3q/src/eu/kanade/tachiyomi/extension/vi/doctruyen3q/DocTruyen3Q.kt @@ -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") @@ -31,10 +31,6 @@ class DocTruyen3Q : gmtOffset = null, ), ConfigurableSource { - - override val client = super.client.newBuilder() - .rateLimit(3) - .build() override fun pageListParse(document: Document): List { return document.select(".page-chapter[id] img").mapIndexed { index, element -> @@ -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." } } diff --git a/src/vi/toptruyen/build.gradle b/src/vi/toptruyen/build.gradle index cf4384ee5..cfc776846 100644 --- a/src/vi/toptruyen/build.gradle +++ b/src/vi/toptruyen/build.gradle @@ -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 } diff --git a/src/vi/toptruyen/src/eu/kanade/tachiyomi/extension/vi/toptruyen/TopTruyen.kt b/src/vi/toptruyen/src/eu/kanade/tachiyomi/extension/vi/toptruyen/TopTruyen.kt index 1178383c9..ff9d19408 100644 --- a/src/vi/toptruyen/src/eu/kanade/tachiyomi/extension/vi/toptruyen/TopTruyen.kt +++ b/src/vi/toptruyen/src/eu/kanade/tachiyomi/extension/vi/toptruyen/TopTruyen.kt @@ -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 { 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." } }