From 9868dda974aacdd359191d5bb7521e2ffd9d5607 Mon Sep 17 00:00:00 2001 From: Alessandro Jean <14254807+alessandrojean@users.noreply.github.com> Date: Sat, 16 Sep 2023 19:54:41 -0300 Subject: [PATCH] Add random UA to GM (#17993) Add random UA to GM. --- src/pt/goldenmangas/build.gradle | 6 +- .../extension/pt/goldenmangas/GoldenMangas.kt | 63 ++++++++++++++++++- 2 files changed, 67 insertions(+), 2 deletions(-) diff --git a/src/pt/goldenmangas/build.gradle b/src/pt/goldenmangas/build.gradle index 5f01c23f2..7e260ac38 100644 --- a/src/pt/goldenmangas/build.gradle +++ b/src/pt/goldenmangas/build.gradle @@ -5,8 +5,12 @@ ext { extName = 'Golden Mangás' pkgNameSuffix = 'pt.goldenmangas' extClass = '.GoldenMangas' - extVersionCode = 19 + extVersionCode = 20 isNsfw = true } +dependencies { + implementation(project(":lib-randomua")) +} + apply from: "$rootDir/common.gradle" diff --git a/src/pt/goldenmangas/src/eu/kanade/tachiyomi/extension/pt/goldenmangas/GoldenMangas.kt b/src/pt/goldenmangas/src/eu/kanade/tachiyomi/extension/pt/goldenmangas/GoldenMangas.kt index d4235751b..b5ba40476 100644 --- a/src/pt/goldenmangas/src/eu/kanade/tachiyomi/extension/pt/goldenmangas/GoldenMangas.kt +++ b/src/pt/goldenmangas/src/eu/kanade/tachiyomi/extension/pt/goldenmangas/GoldenMangas.kt @@ -1,7 +1,20 @@ package eu.kanade.tachiyomi.extension.pt.goldenmangas +import android.app.Application +import android.content.SharedPreferences +import android.widget.Toast +import androidx.preference.EditTextPreference +import androidx.preference.ListPreference +import androidx.preference.PreferenceScreen +import eu.kanade.tachiyomi.lib.randomua.PREF_KEY_CUSTOM_UA +import eu.kanade.tachiyomi.lib.randomua.PREF_KEY_RANDOM_UA +import eu.kanade.tachiyomi.lib.randomua.RANDOM_UA_ENTRIES +import eu.kanade.tachiyomi.lib.randomua.getPrefCustomUA +import eu.kanade.tachiyomi.lib.randomua.getPrefUAType +import eu.kanade.tachiyomi.lib.randomua.setRandomUserAgent import eu.kanade.tachiyomi.network.GET import eu.kanade.tachiyomi.network.interceptor.rateLimit +import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.model.FilterList import eu.kanade.tachiyomi.source.model.Page import eu.kanade.tachiyomi.source.model.SChapter @@ -14,11 +27,13 @@ import okhttp3.Request import okhttp3.Response import org.jsoup.nodes.Document import org.jsoup.nodes.Element +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get import java.text.SimpleDateFormat import java.util.Locale import java.util.concurrent.TimeUnit -class GoldenMangas : ParsedHttpSource() { +class GoldenMangas : ParsedHttpSource(), ConfigurableSource { // Hardcode the id because the language wasn't specific. override val id: Long = 6858719406079923084 @@ -31,10 +46,18 @@ class GoldenMangas : ParsedHttpSource() { override val supportsLatest = true + private val preferences: SharedPreferences by lazy { + Injekt.get().getSharedPreferences("source_$id", 0x0000) + } + override val client: OkHttpClient = network.cloudflareClient.newBuilder() .connectTimeout(1, TimeUnit.MINUTES) .readTimeout(1, TimeUnit.MINUTES) .writeTimeout(1, TimeUnit.MINUTES) + .setRandomUserAgent( + userAgentType = preferences.getPrefUAType(), + customUA = preferences.getPrefCustomUA(), + ) .rateLimit(1, 3, TimeUnit.SECONDS) .build() @@ -184,6 +207,42 @@ class GoldenMangas : ParsedHttpSource() { return GET(page.imageUrl!!, newHeaders) } + override fun setupPreferenceScreen(screen: PreferenceScreen) { + val uaPreferece = ListPreference(screen.context).apply { + key = PREF_KEY_RANDOM_UA + title = "User Agent aleatório" + summary = "%s" + entries = arrayOf("Desativado", "Desktop", "Celular") + entryValues = RANDOM_UA_ENTRIES + setDefaultValue("off") + + setOnPreferenceChangeListener { _, _ -> + Toast.makeText(screen.context, RESTART_APP_MESSAGE, Toast.LENGTH_SHORT).show() + true + } + } + + val customUaPreference = EditTextPreference(screen.context).apply { + key = PREF_KEY_CUSTOM_UA + title = "User Agent personalizado" + summary = "Deixe em branco para usar o User Agent padrão do aplicativo. " + + "Ignorado se User Agent aleatório está ativado." + setOnPreferenceChangeListener { _, newValue -> + try { + Headers.Builder().add("User-Agent", newValue as String).build() + Toast.makeText(screen.context, RESTART_APP_MESSAGE, Toast.LENGTH_SHORT).show() + true + } catch (e: IllegalArgumentException) { + Toast.makeText(screen.context, "User Agent inválido: ${e.message}", Toast.LENGTH_LONG).show() + false + } + } + } + + screen.addPreference(uaPreferece) + screen.addPreference(customUaPreference) + } + private fun String.toDate(): Long { return runCatching { DATE_FORMATTER.parse(trim())?.time } .getOrNull() ?: 0L @@ -216,5 +275,7 @@ class GoldenMangas : ParsedHttpSource() { private val DATE_FORMATTER by lazy { SimpleDateFormat("(dd/MM/yyyy)", Locale("pt", "BR")) } + + private const val RESTART_APP_MESSAGE = "Reinicie o aplicativo para aplicar as alterações." } }