Happymh: revert to headers custom UA (#1394)

Partially reverts 1eb9f2bc13242c38e99362c198e84133261d1135
This commit is contained in:
stevenyomi 2024-02-19 14:21:32 +00:00 committed by Draff
parent fc000a5058
commit fdc57d60a4
2 changed files with 36 additions and 16 deletions

View File

@ -1,11 +1,7 @@
ext { ext {
extName = 'Happymh' extName = 'Happymh'
extClass = '.Happymh' extClass = '.Happymh'
extVersionCode = 7 extVersionCode = 8
} }
apply from: "$rootDir/common.gradle" apply from: "$rootDir/common.gradle"
dependencies {
implementation(project(":lib:randomua"))
}

View File

@ -1,15 +1,12 @@
package eu.kanade.tachiyomi.extension.zh.happymh package eu.kanade.tachiyomi.extension.zh.happymh
import android.app.Application import android.app.Application
import android.widget.Toast
import androidx.preference.EditTextPreference
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.extension.zh.happymh.dto.ChapterListDto import eu.kanade.tachiyomi.extension.zh.happymh.dto.ChapterListDto
import eu.kanade.tachiyomi.extension.zh.happymh.dto.PageListResponseDto import eu.kanade.tachiyomi.extension.zh.happymh.dto.PageListResponseDto
import eu.kanade.tachiyomi.extension.zh.happymh.dto.PopularResponseDto import eu.kanade.tachiyomi.extension.zh.happymh.dto.PopularResponseDto
import eu.kanade.tachiyomi.lib.randomua.PREF_KEY_CUSTOM_UA
import eu.kanade.tachiyomi.lib.randomua.addRandomUAPreferenceToScreen
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.GET
import eu.kanade.tachiyomi.network.POST import eu.kanade.tachiyomi.network.POST
import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.ConfigurableSource
@ -24,6 +21,7 @@ import kotlinx.serialization.decodeFromString
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import kotlinx.serialization.json.decodeFromStream import kotlinx.serialization.json.decodeFromStream
import okhttp3.FormBody import okhttp3.FormBody
import okhttp3.Headers
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
import okhttp3.Request import okhttp3.Request
import okhttp3.Response import okhttp3.Response
@ -31,25 +29,35 @@ import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
const val PREF_KEY_CUSTOM_UA = "pref_key_custom_ua_"
class Happymh : HttpSource(), ConfigurableSource { class Happymh : HttpSource(), ConfigurableSource {
override val name: String = "嗨皮漫画" override val name: String = "嗨皮漫画"
override val lang: String = "zh" override val lang: String = "zh"
override val supportsLatest: Boolean = true override val supportsLatest: Boolean = true
override val baseUrl: String = "https://m.happymh.com" override val baseUrl: String = "https://m.happymh.com"
override val client: OkHttpClient override val client: OkHttpClient = network.cloudflareClient
private val json: Json by injectLazy() private val json: Json by injectLazy()
private val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
init { init {
val preferences = Injekt.get<Application>().getSharedPreferences("source_$id", 0x0000)
val oldUa = preferences.getString("userAgent", null) val oldUa = preferences.getString("userAgent", null)
if (oldUa != null) { if (oldUa != null) {
val editor = preferences.edit().remove("userAgent") val editor = preferences.edit().remove("userAgent")
if (oldUa.isNotBlank()) editor.putString(PREF_KEY_CUSTOM_UA, oldUa) if (oldUa.isNotBlank()) editor.putString(PREF_KEY_CUSTOM_UA, oldUa)
editor.apply() editor.apply()
} }
client = network.cloudflareClient.newBuilder() }
.setRandomUserAgent(preferences.getPrefUAType(), preferences.getPrefCustomUA())
.build() override fun headersBuilder(): Headers.Builder {
val builder = super.headersBuilder()
val userAgent = preferences.getString(PREF_KEY_CUSTOM_UA, "")!!
return if (userAgent.isNotBlank()) {
builder.set("User-Agent", userAgent)
} else {
builder
}
} }
// Popular // Popular
@ -147,7 +155,23 @@ class Happymh : HttpSource(), ConfigurableSource {
override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException() override fun imageUrlParse(response: Response): String = throw UnsupportedOperationException()
override fun setupPreferenceScreen(screen: PreferenceScreen) { override fun setupPreferenceScreen(screen: PreferenceScreen) {
addRandomUAPreferenceToScreen(screen) val context = screen.context
EditTextPreference(context).apply {
key = PREF_KEY_CUSTOM_UA
title = "User Agent"
summary = "留空则使用应用设置中的默认 User Agent重启生效"
setOnPreferenceChangeListener { _, newValue ->
try {
Headers.headersOf("User-Agent", newValue as String)
true
} catch (e: Throwable) {
Toast.makeText(context, "User Agent 无效:${e.message}", Toast.LENGTH_LONG).show()
false
}
}
}.let(screen::addPreference)
} }
private inline fun <reified T> Response.parseAs(): T = use { private inline fun <reified T> Response.parseAs(): T = use {