|
@@ -11,67 +11,60 @@ import java.io.File
|
|
|
import java.util.concurrent.TimeUnit
|
|
|
|
|
|
class NetworkHelper(
|
|
|
- context: Context,
|
|
|
+ private val context: Context,
|
|
|
private val preferences: NetworkPreferences,
|
|
|
) {
|
|
|
|
|
|
- private val cacheDir = File(context.cacheDir, "network_cache")
|
|
|
- private val cacheSize = 5L * 1024 * 1024 // 5 MiB
|
|
|
+ val cookieJar by lazy { AndroidCookieJar() }
|
|
|
|
|
|
- val cookieJar = AndroidCookieJar()
|
|
|
+ val client by lazy {
|
|
|
+ val builder = OkHttpClient.Builder()
|
|
|
+ .cookieJar(cookieJar)
|
|
|
+ .connectTimeout(30, TimeUnit.SECONDS)
|
|
|
+ .readTimeout(30, TimeUnit.SECONDS)
|
|
|
+ .callTimeout(2, TimeUnit.MINUTES)
|
|
|
+ .cache(
|
|
|
+ Cache(
|
|
|
+ directory = File(context.cacheDir, "network_cache"),
|
|
|
+ maxSize = 5L * 1024 * 1024, // 5 MiB
|
|
|
+ ),
|
|
|
+ )
|
|
|
+ .addInterceptor(UncaughtExceptionInterceptor())
|
|
|
+ .addInterceptor(UserAgentInterceptor(::defaultUserAgentProvider))
|
|
|
|
|
|
- private val userAgentInterceptor by lazy {
|
|
|
- UserAgentInterceptor(::defaultUserAgentProvider)
|
|
|
- }
|
|
|
- private val cloudflareInterceptor by lazy {
|
|
|
- CloudflareInterceptor(context, cookieJar, ::defaultUserAgentProvider)
|
|
|
- }
|
|
|
-
|
|
|
- private val baseClientBuilder: OkHttpClient.Builder
|
|
|
- get() {
|
|
|
- val builder = OkHttpClient.Builder()
|
|
|
- .cookieJar(cookieJar)
|
|
|
- .connectTimeout(30, TimeUnit.SECONDS)
|
|
|
- .readTimeout(30, TimeUnit.SECONDS)
|
|
|
- .callTimeout(2, TimeUnit.MINUTES)
|
|
|
- .addInterceptor(UncaughtExceptionInterceptor())
|
|
|
- .addInterceptor(userAgentInterceptor)
|
|
|
-
|
|
|
- if (preferences.verboseLogging().get()) {
|
|
|
- val httpLoggingInterceptor = HttpLoggingInterceptor().apply {
|
|
|
- level = HttpLoggingInterceptor.Level.HEADERS
|
|
|
- }
|
|
|
- builder.addNetworkInterceptor(httpLoggingInterceptor)
|
|
|
+ if (preferences.verboseLogging().get()) {
|
|
|
+ val httpLoggingInterceptor = HttpLoggingInterceptor().apply {
|
|
|
+ level = HttpLoggingInterceptor.Level.HEADERS
|
|
|
}
|
|
|
+ builder.addNetworkInterceptor(httpLoggingInterceptor)
|
|
|
+ }
|
|
|
|
|
|
- builder.addInterceptor(cloudflareInterceptor)
|
|
|
-
|
|
|
- when (preferences.dohProvider().get()) {
|
|
|
- PREF_DOH_CLOUDFLARE -> builder.dohCloudflare()
|
|
|
- PREF_DOH_GOOGLE -> builder.dohGoogle()
|
|
|
- PREF_DOH_ADGUARD -> builder.dohAdGuard()
|
|
|
- PREF_DOH_QUAD9 -> builder.dohQuad9()
|
|
|
- PREF_DOH_ALIDNS -> builder.dohAliDNS()
|
|
|
- PREF_DOH_DNSPOD -> builder.dohDNSPod()
|
|
|
- PREF_DOH_360 -> builder.doh360()
|
|
|
- PREF_DOH_QUAD101 -> builder.dohQuad101()
|
|
|
- PREF_DOH_MULLVAD -> builder.dohMullvad()
|
|
|
- PREF_DOH_CONTROLD -> builder.dohControlD()
|
|
|
- PREF_DOH_NJALLA -> builder.dohNajalla()
|
|
|
- PREF_DOH_SHECAN -> builder.dohShecan()
|
|
|
- }
|
|
|
+ builder.addInterceptor(CloudflareInterceptor(context, cookieJar, ::defaultUserAgentProvider))
|
|
|
|
|
|
- return builder
|
|
|
+ when (preferences.dohProvider().get()) {
|
|
|
+ PREF_DOH_CLOUDFLARE -> builder.dohCloudflare()
|
|
|
+ PREF_DOH_GOOGLE -> builder.dohGoogle()
|
|
|
+ PREF_DOH_ADGUARD -> builder.dohAdGuard()
|
|
|
+ PREF_DOH_QUAD9 -> builder.dohQuad9()
|
|
|
+ PREF_DOH_ALIDNS -> builder.dohAliDNS()
|
|
|
+ PREF_DOH_DNSPOD -> builder.dohDNSPod()
|
|
|
+ PREF_DOH_360 -> builder.doh360()
|
|
|
+ PREF_DOH_QUAD101 -> builder.dohQuad101()
|
|
|
+ PREF_DOH_MULLVAD -> builder.dohMullvad()
|
|
|
+ PREF_DOH_CONTROLD -> builder.dohControlD()
|
|
|
+ PREF_DOH_NJALLA -> builder.dohNajalla()
|
|
|
+ PREF_DOH_SHECAN -> builder.dohShecan()
|
|
|
}
|
|
|
|
|
|
- val client by lazy { baseClientBuilder.cache(Cache(cacheDir, cacheSize)).build() }
|
|
|
+ builder.build()
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* @deprecated Since extension-lib 1.5
|
|
|
*/
|
|
|
@Deprecated("The regular client handles Cloudflare by default")
|
|
|
@Suppress("UNUSED")
|
|
|
- val cloudflareClient = client
|
|
|
+ val cloudflareClient by lazy { client }
|
|
|
|
|
|
fun defaultUserAgentProvider() = preferences.defaultUserAgent().get().trim()
|
|
|
}
|