mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	Make default user agent string configurable
This commit is contained in:
		@@ -59,6 +59,8 @@ object PreferenceKeys {
 | 
			
		||||
 | 
			
		||||
    const val dohProvider = "doh_provider"
 | 
			
		||||
 | 
			
		||||
    const val defaultUserAgent = "default_user_agent"
 | 
			
		||||
 | 
			
		||||
    const val defaultChapterFilterByRead = "default_chapter_filter_by_read"
 | 
			
		||||
 | 
			
		||||
    const val defaultChapterFilterByDownloaded = "default_chapter_filter_by_downloaded"
 | 
			
		||||
 
 | 
			
		||||
@@ -294,6 +294,8 @@ class PreferencesHelper(val context: Context) {
 | 
			
		||||
 | 
			
		||||
    fun dohProvider() = prefs.getInt(Keys.dohProvider, -1)
 | 
			
		||||
 | 
			
		||||
    fun defaultUserAgent() = flowPrefs.getString(Keys.defaultUserAgent, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44")
 | 
			
		||||
 | 
			
		||||
    fun lastSearchQuerySearchSettings() = flowPrefs.getString("last_search_query", "")
 | 
			
		||||
 | 
			
		||||
    fun filterChapterByRead() = prefs.getInt(Keys.defaultChapterFilterByRead, DomainManga.SHOW_ALL.toInt())
 | 
			
		||||
 
 | 
			
		||||
@@ -60,4 +60,8 @@ class NetworkHelper(context: Context) {
 | 
			
		||||
            .addInterceptor(CloudflareInterceptor(context))
 | 
			
		||||
            .build()
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    val defaultUserAgent by lazy {
 | 
			
		||||
        preferences.defaultUserAgent().get()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,6 @@ import android.widget.Toast
 | 
			
		||||
import androidx.core.content.ContextCompat
 | 
			
		||||
import eu.kanade.tachiyomi.R
 | 
			
		||||
import eu.kanade.tachiyomi.network.NetworkHelper
 | 
			
		||||
import eu.kanade.tachiyomi.source.online.HttpSource
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.launchUI
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.DeviceUtil
 | 
			
		||||
import eu.kanade.tachiyomi.util.system.WebViewClientCompat
 | 
			
		||||
@@ -109,7 +108,7 @@ class CloudflareInterceptor(private val context: Context) : Interceptor {
 | 
			
		||||
 | 
			
		||||
            // Avoid sending empty User-Agent, Chromium WebView will reset to default if empty
 | 
			
		||||
            webview.settings.userAgentString = request.header("User-Agent")
 | 
			
		||||
                ?: HttpSource.DEFAULT_USER_AGENT
 | 
			
		||||
                ?: networkHelper.defaultUserAgent
 | 
			
		||||
 | 
			
		||||
            webview.webViewClient = object : WebViewClientCompat() {
 | 
			
		||||
                override fun onPageFinished(view: WebView, url: String) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,14 @@
 | 
			
		||||
package eu.kanade.tachiyomi.network.interceptor
 | 
			
		||||
 | 
			
		||||
import eu.kanade.tachiyomi.source.online.HttpSource
 | 
			
		||||
import eu.kanade.tachiyomi.network.NetworkHelper
 | 
			
		||||
import okhttp3.Interceptor
 | 
			
		||||
import okhttp3.Response
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
 | 
			
		||||
class UserAgentInterceptor : Interceptor {
 | 
			
		||||
 | 
			
		||||
    private val networkHelper: NetworkHelper by injectLazy()
 | 
			
		||||
 | 
			
		||||
    override fun intercept(chain: Interceptor.Chain): Response {
 | 
			
		||||
        val originalRequest = chain.request()
 | 
			
		||||
 | 
			
		||||
@@ -12,7 +16,7 @@ class UserAgentInterceptor : Interceptor {
 | 
			
		||||
            val newRequest = originalRequest
 | 
			
		||||
                .newBuilder()
 | 
			
		||||
                .removeHeader("User-Agent")
 | 
			
		||||
                .addHeader("User-Agent", HttpSource.DEFAULT_USER_AGENT)
 | 
			
		||||
                .addHeader("User-Agent", networkHelper.defaultUserAgent)
 | 
			
		||||
                .build()
 | 
			
		||||
            chain.proceed(newRequest)
 | 
			
		||||
        } else {
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ import okhttp3.OkHttpClient
 | 
			
		||||
import okhttp3.Request
 | 
			
		||||
import okhttp3.Response
 | 
			
		||||
import rx.Observable
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
import uy.kohesive.injekt.injectLazy
 | 
			
		||||
import java.net.URI
 | 
			
		||||
import java.net.URISyntaxException
 | 
			
		||||
@@ -67,7 +68,7 @@ abstract class HttpSource : CatalogueSource {
 | 
			
		||||
     * Headers builder for requests. Implementations can override this method for custom headers.
 | 
			
		||||
     */
 | 
			
		||||
    protected open fun headersBuilder() = Headers.Builder().apply {
 | 
			
		||||
        add("User-Agent", DEFAULT_USER_AGENT)
 | 
			
		||||
        add("User-Agent", network.defaultUserAgent)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -368,8 +369,4 @@ abstract class HttpSource : CatalogueSource {
 | 
			
		||||
     * Returns the list of filters for the source.
 | 
			
		||||
     */
 | 
			
		||||
    override fun getFilterList() = FilterList()
 | 
			
		||||
 | 
			
		||||
    companion object {
 | 
			
		||||
        const val DEFAULT_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.124 Safari/537.36 Edg/102.0.1245.44"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@ import eu.kanade.tachiyomi.util.lang.launchIO
 | 
			
		||||
import eu.kanade.tachiyomi.util.lang.withUIContext
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.bindTo
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.defaultValue
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.editTextPreference
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.entriesRes
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.intListPreference
 | 
			
		||||
import eu.kanade.tachiyomi.util.preference.listPreference
 | 
			
		||||
@@ -215,6 +216,28 @@ class SettingsAdvancedController(
 | 
			
		||||
                    true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            editTextPreference {
 | 
			
		||||
                key = Keys.defaultUserAgent
 | 
			
		||||
                titleRes = R.string.pref_user_agent_string
 | 
			
		||||
                text = preferences.defaultUserAgent().get()
 | 
			
		||||
                summary = network.defaultUserAgent
 | 
			
		||||
 | 
			
		||||
                onChange {
 | 
			
		||||
                    activity?.toast(R.string.requires_app_restart)
 | 
			
		||||
                    true
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (preferences.defaultUserAgent().isSet()) {
 | 
			
		||||
                preference {
 | 
			
		||||
                    key = "pref_reset_user_agent"
 | 
			
		||||
                    titleRes = R.string.pref_reset_user_agent_string
 | 
			
		||||
 | 
			
		||||
                    onClick {
 | 
			
		||||
                        preferences.defaultUserAgent().delete()
 | 
			
		||||
                        activity?.toast(R.string.requires_app_restart)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        preferenceCategory {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user