DNS-over-HTTPS (Adguard) (#5715)

* Update DohProviders.kt

* Update NetworkHelper.kt

* Update SettingsAdvancedController.kt

* fix typo

* Fix typo

* Fix typo
This commit is contained in:
Long 2021-08-15 22:20:52 +07:00 committed by Jays2Kings
parent fa2e8303e2
commit 6407d7ca3f
5 changed files with 53 additions and 31 deletions

View file

@ -7,8 +7,9 @@ import coil.ImageLoader
import coil.decode.GifDecoder
import coil.decode.ImageDecoderDecoder
import coil.decode.SvgDecoder
import com.chuckerteam.chucker.api.ChuckerInterceptor
import okhttp3.OkHttpClient
import eu.kanade.tachiyomi.network.NetworkHelper
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
class CoilSetup(context: Context) {
init {
@ -26,11 +27,8 @@ class CoilSetup(context: Context) {
add(SvgDecoder(context))
add(MangaFetcher())
add(ByteArrayFetcher())
}.okHttpClient {
OkHttpClient.Builder()
.addInterceptor(ChuckerInterceptor(context))
.build()
}
.okHttpClient(Injekt.get<NetworkHelper>().coilClient)
.build()
Coil.setImageLoader(imageLoader)

View file

@ -11,6 +11,7 @@ import java.net.InetAddress
const val PREF_DOH_CLOUDFLARE = 1
const val PREF_DOH_GOOGLE = 2
const val PREF_DOH_ADGUARD = 3
fun OkHttpClient.Builder.dohCloudflare() = dns(
DnsOverHttps.Builder().client(build())
@ -38,3 +39,16 @@ fun OkHttpClient.Builder.dohGoogle() = dns(
)
.build()
)
// AdGuard "Default" DNS works too but for the sake of making sure no site is blacklisted, i picked "Unfiltered"
fun OkHttpClient.Builder.dohAdGuard() = dns(
DnsOverHttps.Builder().client(build())
.url("https://dns-unfiltered.adguard.com/dns-query".toHttpUrl())
.bootstrapDnsHosts(
InetAddress.getByName("94.140.14.140"),
InetAddress.getByName("94.140.14.141"),
InetAddress.getByName("2a10:50c0::1:ff"),
InetAddress.getByName("2a10:50c0::2:ff"),
)
.build()
)

View file

@ -1,6 +1,7 @@
package eu.kanade.tachiyomi.network
import android.content.Context
import coil.util.CoilUtils
import com.chuckerteam.chucker.api.ChuckerInterceptor
import eu.kanade.tachiyomi.BuildConfig
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
@ -10,7 +11,7 @@ import uy.kohesive.injekt.injectLazy
import java.io.File
import java.util.concurrent.TimeUnit
class NetworkHelper(context: Context) {
class NetworkHelper(val context: Context) {
private val preferences: PreferencesHelper by injectLazy()
@ -20,24 +21,31 @@ class NetworkHelper(context: Context) {
val cookieManager = AndroidCookieJar()
val client by lazy {
OkHttpClient.Builder()
.cookieJar(cookieManager)
.cache(Cache(cacheDir, cacheSize))
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.addInterceptor(UserAgentInterceptor())
.apply {
if (BuildConfig.DEBUG) {
addInterceptor(ChuckerInterceptor(context))
private val baseClientBuilder: OkHttpClient.Builder
get() {
val builder = OkHttpClient.Builder()
.cookieJar(cookieManager)
.connectTimeout(30, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.addInterceptor(UserAgentInterceptor())
.apply {
if (BuildConfig.DEBUG) {
addInterceptor(ChuckerInterceptor(context))
}
when (preferences.dohProvider()) {
PREF_DOH_CLOUDFLARE -> dohCloudflare()
PREF_DOH_GOOGLE -> dohGoogle()
PREF_DOH_ADGUARD -> dohAdGuard()
}
}
when (preferences.dohProvider()) {
PREF_DOH_CLOUDFLARE -> dohCloudflare()
PREF_DOH_GOOGLE -> dohGoogle()
}
}.build()
}
return builder
}
val client by lazy { baseClientBuilder.cache(Cache(cacheDir, cacheSize)).build() }
val coilClient by lazy { baseClientBuilder.cache(CoilUtils.createDefaultCache(context)).build() }
val cloudflareClient by lazy {
client.newBuilder()

View file

@ -24,6 +24,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateService
import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Target
import eu.kanade.tachiyomi.data.preference.PreferenceKeys
import eu.kanade.tachiyomi.network.NetworkHelper
import eu.kanade.tachiyomi.network.PREF_DOH_ADGUARD
import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE
import eu.kanade.tachiyomi.network.PREF_DOH_GOOGLE
import eu.kanade.tachiyomi.source.SourceManager
@ -33,11 +34,7 @@ import eu.kanade.tachiyomi.util.system.launchIO
import eu.kanade.tachiyomi.util.system.launchUI
import eu.kanade.tachiyomi.util.system.toast
import eu.kanade.tachiyomi.util.view.openInBrowser
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.*
import rx.Observable
import rx.android.schedulers.AndroidSchedulers
import rx.schedulers.Schedulers
@ -190,12 +187,16 @@ class SettingsAdvancedController : SettingsController() {
activity?.toast(R.string.cookies_cleared)
}
}
intListPreference(activity) {
key = PreferenceKeys.dohProvider
titleRes = R.string.doh
entriesRes = arrayOf(R.string.disabled, R.string.cloudflare, R.string.google)
entryValues = listOf(-1, PREF_DOH_CLOUDFLARE, PREF_DOH_GOOGLE)
entriesRes = arrayOf(
R.string.disabled,
R.string.cloudflare,
R.string.google,
R.string.adGuard
)
entryValues = listOf(-1, PREF_DOH_CLOUDFLARE, PREF_DOH_GOOGLE, PREF_DOH_ADGUARD)
defaultValue = -1
onChange {

View file

@ -750,6 +750,7 @@
<string name="disabled">Disabled</string>
<string name="cloudflare" translatable="false">Cloudflare</string>
<string name="google" translatable="false">Google</string>
<string name="adGuard" translatable="false">AdGuard</string>
<string name="requires_app_restart">Requires app restart to take effect</string>
<string name="used_">Used: %1$s</string>
<plurals name="cache_cleared">