mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
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:
parent
fa2e8303e2
commit
6407d7ca3f
5 changed files with 53 additions and 31 deletions
|
@ -7,8 +7,9 @@ import coil.ImageLoader
|
||||||
import coil.decode.GifDecoder
|
import coil.decode.GifDecoder
|
||||||
import coil.decode.ImageDecoderDecoder
|
import coil.decode.ImageDecoderDecoder
|
||||||
import coil.decode.SvgDecoder
|
import coil.decode.SvgDecoder
|
||||||
import com.chuckerteam.chucker.api.ChuckerInterceptor
|
import eu.kanade.tachiyomi.network.NetworkHelper
|
||||||
import okhttp3.OkHttpClient
|
import uy.kohesive.injekt.Injekt
|
||||||
|
import uy.kohesive.injekt.api.get
|
||||||
|
|
||||||
class CoilSetup(context: Context) {
|
class CoilSetup(context: Context) {
|
||||||
init {
|
init {
|
||||||
|
@ -26,11 +27,8 @@ class CoilSetup(context: Context) {
|
||||||
add(SvgDecoder(context))
|
add(SvgDecoder(context))
|
||||||
add(MangaFetcher())
|
add(MangaFetcher())
|
||||||
add(ByteArrayFetcher())
|
add(ByteArrayFetcher())
|
||||||
}.okHttpClient {
|
|
||||||
OkHttpClient.Builder()
|
|
||||||
.addInterceptor(ChuckerInterceptor(context))
|
|
||||||
.build()
|
|
||||||
}
|
}
|
||||||
|
.okHttpClient(Injekt.get<NetworkHelper>().coilClient)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
Coil.setImageLoader(imageLoader)
|
Coil.setImageLoader(imageLoader)
|
||||||
|
|
|
@ -11,6 +11,7 @@ import java.net.InetAddress
|
||||||
|
|
||||||
const val PREF_DOH_CLOUDFLARE = 1
|
const val PREF_DOH_CLOUDFLARE = 1
|
||||||
const val PREF_DOH_GOOGLE = 2
|
const val PREF_DOH_GOOGLE = 2
|
||||||
|
const val PREF_DOH_ADGUARD = 3
|
||||||
|
|
||||||
fun OkHttpClient.Builder.dohCloudflare() = dns(
|
fun OkHttpClient.Builder.dohCloudflare() = dns(
|
||||||
DnsOverHttps.Builder().client(build())
|
DnsOverHttps.Builder().client(build())
|
||||||
|
@ -38,3 +39,16 @@ fun OkHttpClient.Builder.dohGoogle() = dns(
|
||||||
)
|
)
|
||||||
.build()
|
.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()
|
||||||
|
)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package eu.kanade.tachiyomi.network
|
package eu.kanade.tachiyomi.network
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import coil.util.CoilUtils
|
||||||
import com.chuckerteam.chucker.api.ChuckerInterceptor
|
import com.chuckerteam.chucker.api.ChuckerInterceptor
|
||||||
import eu.kanade.tachiyomi.BuildConfig
|
import eu.kanade.tachiyomi.BuildConfig
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
||||||
|
@ -10,7 +11,7 @@ import uy.kohesive.injekt.injectLazy
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.concurrent.TimeUnit
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
class NetworkHelper(context: Context) {
|
class NetworkHelper(val context: Context) {
|
||||||
|
|
||||||
private val preferences: PreferencesHelper by injectLazy()
|
private val preferences: PreferencesHelper by injectLazy()
|
||||||
|
|
||||||
|
@ -20,10 +21,10 @@ class NetworkHelper(context: Context) {
|
||||||
|
|
||||||
val cookieManager = AndroidCookieJar()
|
val cookieManager = AndroidCookieJar()
|
||||||
|
|
||||||
val client by lazy {
|
private val baseClientBuilder: OkHttpClient.Builder
|
||||||
OkHttpClient.Builder()
|
get() {
|
||||||
|
val builder = OkHttpClient.Builder()
|
||||||
.cookieJar(cookieManager)
|
.cookieJar(cookieManager)
|
||||||
.cache(Cache(cacheDir, cacheSize))
|
|
||||||
.connectTimeout(30, TimeUnit.SECONDS)
|
.connectTimeout(30, TimeUnit.SECONDS)
|
||||||
.readTimeout(30, TimeUnit.SECONDS)
|
.readTimeout(30, TimeUnit.SECONDS)
|
||||||
.addInterceptor(UserAgentInterceptor())
|
.addInterceptor(UserAgentInterceptor())
|
||||||
|
@ -35,10 +36,17 @@ class NetworkHelper(context: Context) {
|
||||||
when (preferences.dohProvider()) {
|
when (preferences.dohProvider()) {
|
||||||
PREF_DOH_CLOUDFLARE -> dohCloudflare()
|
PREF_DOH_CLOUDFLARE -> dohCloudflare()
|
||||||
PREF_DOH_GOOGLE -> dohGoogle()
|
PREF_DOH_GOOGLE -> dohGoogle()
|
||||||
|
PREF_DOH_ADGUARD -> dohAdGuard()
|
||||||
}
|
}
|
||||||
}.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 {
|
val cloudflareClient by lazy {
|
||||||
client.newBuilder()
|
client.newBuilder()
|
||||||
.addInterceptor(CloudflareInterceptor(context))
|
.addInterceptor(CloudflareInterceptor(context))
|
||||||
|
|
|
@ -24,6 +24,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateService
|
||||||
import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Target
|
import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Target
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferenceKeys
|
import eu.kanade.tachiyomi.data.preference.PreferenceKeys
|
||||||
import eu.kanade.tachiyomi.network.NetworkHelper
|
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_CLOUDFLARE
|
||||||
import eu.kanade.tachiyomi.network.PREF_DOH_GOOGLE
|
import eu.kanade.tachiyomi.network.PREF_DOH_GOOGLE
|
||||||
import eu.kanade.tachiyomi.source.SourceManager
|
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.launchUI
|
||||||
import eu.kanade.tachiyomi.util.system.toast
|
import eu.kanade.tachiyomi.util.system.toast
|
||||||
import eu.kanade.tachiyomi.util.view.openInBrowser
|
import eu.kanade.tachiyomi.util.view.openInBrowser
|
||||||
import kotlinx.coroutines.CoroutineStart
|
import kotlinx.coroutines.*
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.GlobalScope
|
|
||||||
import kotlinx.coroutines.Job
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import rx.Observable
|
import rx.Observable
|
||||||
import rx.android.schedulers.AndroidSchedulers
|
import rx.android.schedulers.AndroidSchedulers
|
||||||
import rx.schedulers.Schedulers
|
import rx.schedulers.Schedulers
|
||||||
|
@ -190,12 +187,16 @@ class SettingsAdvancedController : SettingsController() {
|
||||||
activity?.toast(R.string.cookies_cleared)
|
activity?.toast(R.string.cookies_cleared)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
intListPreference(activity) {
|
intListPreference(activity) {
|
||||||
key = PreferenceKeys.dohProvider
|
key = PreferenceKeys.dohProvider
|
||||||
titleRes = R.string.doh
|
titleRes = R.string.doh
|
||||||
entriesRes = arrayOf(R.string.disabled, R.string.cloudflare, R.string.google)
|
entriesRes = arrayOf(
|
||||||
entryValues = listOf(-1, PREF_DOH_CLOUDFLARE, PREF_DOH_GOOGLE)
|
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
|
defaultValue = -1
|
||||||
onChange {
|
onChange {
|
||||||
|
|
|
@ -750,6 +750,7 @@
|
||||||
<string name="disabled">Disabled</string>
|
<string name="disabled">Disabled</string>
|
||||||
<string name="cloudflare" translatable="false">Cloudflare</string>
|
<string name="cloudflare" translatable="false">Cloudflare</string>
|
||||||
<string name="google" translatable="false">Google</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="requires_app_restart">Requires app restart to take effect</string>
|
||||||
<string name="used_">Used: %1$s</string>
|
<string name="used_">Used: %1$s</string>
|
||||||
<plurals name="cache_cleared">
|
<plurals name="cache_cleared">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue