mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Add advanced option for DNS over HTTPS via Cloudflare (closes #3377)
This commit is contained in:
		| @@ -155,6 +155,8 @@ object PreferenceKeys { | ||||
|  | ||||
|     const val searchPinnedSourcesOnly = "search_pinned_sources_only" | ||||
|  | ||||
|     const val enableDoh = "enable_doh" | ||||
|  | ||||
|     fun trackUsername(syncId: Int) = "pref_mangasync_username_$syncId" | ||||
|  | ||||
|     fun trackPassword(syncId: Int) = "pref_mangasync_password_$syncId" | ||||
|   | ||||
| @@ -234,4 +234,6 @@ class PreferencesHelper(val context: Context) { | ||||
|     fun migrateFlags() = flowPrefs.getInt("migrate_flags", Int.MAX_VALUE) | ||||
|  | ||||
|     fun trustedSignatures() = flowPrefs.getStringSet("trusted_signatures", emptySet()) | ||||
|  | ||||
|     fun enableDoh() = prefs.getBoolean(Keys.enableDoh, false) | ||||
| } | ||||
|   | ||||
| @@ -2,14 +2,21 @@ package eu.kanade.tachiyomi.network | ||||
|  | ||||
| import android.content.Context | ||||
| import eu.kanade.tachiyomi.BuildConfig | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import java.io.File | ||||
| import java.net.InetAddress | ||||
| import java.util.concurrent.TimeUnit | ||||
| import okhttp3.Cache | ||||
| import okhttp3.HttpUrl.Companion.toHttpUrl | ||||
| import okhttp3.OkHttpClient | ||||
| import okhttp3.dnsoverhttps.DnsOverHttps | ||||
| import okhttp3.logging.HttpLoggingInterceptor | ||||
| import uy.kohesive.injekt.injectLazy | ||||
|  | ||||
| class NetworkHelper(context: Context) { | ||||
|  | ||||
|     private val preferences: PreferencesHelper by injectLazy() | ||||
|  | ||||
|     private val cacheDir = File(context.cacheDir, "network_cache") | ||||
|  | ||||
|     private val cacheSize = 5L * 1024 * 1024 // 5 MiB | ||||
| @@ -30,6 +37,27 @@ class NetworkHelper(context: Context) { | ||||
|             builder.addInterceptor(httpLoggingInterceptor) | ||||
|         } | ||||
|  | ||||
|         if (preferences.enableDoh()) { | ||||
|             builder.dns( | ||||
|                 DnsOverHttps.Builder().client(builder.build()) | ||||
|                     .url("https://cloudflare-dns.com/dns-query".toHttpUrl()) | ||||
|                     .bootstrapDnsHosts( | ||||
|                         listOf( | ||||
|                             InetAddress.getByName("162.159.36.1"), | ||||
|                             InetAddress.getByName("162.159.46.1"), | ||||
|                             InetAddress.getByName("1.1.1.1"), | ||||
|                             InetAddress.getByName("1.0.0.1"), | ||||
|                             InetAddress.getByName("162.159.132.53"), | ||||
|                             InetAddress.getByName("2606:4700:4700::1111"), | ||||
|                             InetAddress.getByName("2606:4700:4700::1001"), | ||||
|                             InetAddress.getByName("2606:4700:4700::0064"), | ||||
|                             InetAddress.getByName("2606:4700:4700::6400") | ||||
|                         ) | ||||
|                     ) | ||||
|                     .build() | ||||
|             ) | ||||
|         } | ||||
|  | ||||
|         builder.build() | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -17,6 +17,7 @@ import eu.kanade.tachiyomi.data.cache.ChapterCache | ||||
| import eu.kanade.tachiyomi.data.database.DatabaseHelper | ||||
| import eu.kanade.tachiyomi.data.library.LibraryUpdateService | ||||
| import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Target | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys | ||||
| import eu.kanade.tachiyomi.network.NetworkHelper | ||||
| import eu.kanade.tachiyomi.ui.base.controller.DialogController | ||||
| import eu.kanade.tachiyomi.ui.library.LibraryController | ||||
| @@ -87,14 +88,6 @@ class SettingsAdvancedController : SettingsController() { | ||||
|  | ||||
|                 onClick { clearChapterCache() } | ||||
|             } | ||||
|             preference { | ||||
|                 titleRes = R.string.pref_clear_cookies | ||||
|  | ||||
|                 onClick { | ||||
|                     network.cookieManager.removeAll() | ||||
|                     activity?.toast(R.string.cookies_cleared) | ||||
|                 } | ||||
|             } | ||||
|             preference { | ||||
|                 titleRes = R.string.pref_clear_database | ||||
|                 summaryRes = R.string.pref_clear_database_summary | ||||
| @@ -107,6 +100,25 @@ class SettingsAdvancedController : SettingsController() { | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         preferenceCategory { | ||||
|             titleRes = R.string.label_data | ||||
|  | ||||
|             preference { | ||||
|                 titleRes = R.string.pref_clear_cookies | ||||
|  | ||||
|                 onClick { | ||||
|                     network.cookieManager.removeAll() | ||||
|                     activity?.toast(R.string.cookies_cleared) | ||||
|                 } | ||||
|             } | ||||
|             switchPreference { | ||||
|                 key = Keys.enableDoh | ||||
|                 titleRes = R.string.pref_dns_over_https | ||||
|                 summaryRes = R.string.pref_dns_over_https_summary | ||||
|                 defaultValue = false | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         preferenceCategory { | ||||
|             titleRes = R.string.label_library | ||||
|  | ||||
|   | ||||
| @@ -361,13 +361,16 @@ | ||||
|     <string name="restoring_backup_canceled">Canceled restore</string> | ||||
|  | ||||
|       <!-- Advanced section --> | ||||
|     <string name="label_network">Network</string> | ||||
|     <string name="pref_clear_cookies">Clear cookies</string> | ||||
|     <string name="pref_dns_over_https" translatable="false">DNS over HTTPS (Cloudflare)</string> | ||||
|     <string name="pref_dns_over_https_summary">Requires app restart to take effect</string> | ||||
|     <string name="cookies_cleared">Cookies cleared</string> | ||||
|     <string name="label_data">Data</string> | ||||
|     <string name="pref_clear_chapter_cache">Clear chapter cache</string> | ||||
|     <string name="used_cache">Used: %1$s</string> | ||||
|     <string name="cache_deleted">Cache cleared. %1$d files have been deleted</string> | ||||
|     <string name="cache_delete_error">An error occurred while clearing cache</string> | ||||
|     <string name="pref_clear_cookies">Clear cookies</string> | ||||
|     <string name="cookies_cleared">Cookies cleared</string> | ||||
|     <string name="choices_reset">Dialog choices reset</string> | ||||
|     <string name="pref_clear_database">Clear database</string> | ||||
|     <string name="pref_clear_database_summary">Delete history for manga that are not saved in your library</string> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user