From bfe67f1cdf174867171f8f0f61c3cef4b5b1a216 Mon Sep 17 00:00:00 2001 From: NerdNumber9 Date: Sun, 14 Apr 2019 10:46:06 -0400 Subject: [PATCH] Add network inspection logging mode --- app/build.gradle | 2 +- app/src/main/java/eu/kanade/tachiyomi/App.kt | 4 ++-- .../data/preference/PreferenceKeys.kt | 2 +- .../data/preference/PreferencesHelper.kt | 2 +- .../kanade/tachiyomi/network/NetworkHelper.kt | 2 ++ .../ui/setting/SettingsAdvancedController.kt | 23 +++++++++---------- app/src/main/java/exh/log/EHLogLevel.kt | 22 ++++++++++++++++++ app/src/main/java/exh/log/EHNetworkLogging.kt | 18 +++++++++++++++ .../main/java/exh/uconfig/EHConfigurator.kt | 5 +++- .../exh/ui/captcha/SolveCaptchaActivity.kt | 5 +++- 10 files changed, 66 insertions(+), 19 deletions(-) create mode 100644 app/src/main/java/exh/log/EHLogLevel.kt create mode 100644 app/src/main/java/exh/log/EHNetworkLogging.kt diff --git a/app/build.gradle b/app/build.gradle index 78aba7c89..6498df2f0 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -265,7 +265,7 @@ dependencies { implementation 'com.lvla.android:rxjava2-interop-kt:0.2.1' // Debug network interceptor (EH) - devImplementation "com.squareup.okhttp3:logging-interceptor:3.12.1" + implementation "com.squareup.okhttp3:logging-interceptor:3.12.1" // Firebase (EH) implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9' diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index e4ab114b5..478bb89e8 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -24,6 +24,7 @@ import eu.kanade.tachiyomi.data.preference.getOrDefault import eu.kanade.tachiyomi.data.updater.UpdaterJob import eu.kanade.tachiyomi.util.LocaleHelper import exh.log.CrashlyticsPrinter +import exh.log.EHLogLevel import io.realm.Realm import io.realm.RealmConfiguration import kotlinx.coroutines.GlobalScope @@ -109,8 +110,7 @@ open class App : Application() { // EXH private fun setupExhLogging() { - val logLevel = if(BuildConfig.DEBUG || - Injekt.get().eh_detailedLogs().getOrDefault()) { + val logLevel = if(BuildConfig.DEBUG || EHLogLevel.shouldLog(EHLogLevel.EXTRA)) { LogLevel.ALL } else { LogLevel.WARN diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt index 5eb3de395..5853cabf0 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferenceKeys.kt @@ -183,5 +183,5 @@ object PreferenceKeys { const val eh_showTransitionPages = "eh_show_transition_pages" - const val eh_detailedLogs = "eh_detailed_logs" + const val eh_logLevel = "eh_log_level" } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt index dfaad63ac..2292638e1 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/preference/PreferencesHelper.kt @@ -256,5 +256,5 @@ class PreferencesHelper(val context: Context) { fun eh_showTransitionPages() = rxPrefs.getBoolean(Keys.eh_showTransitionPages, true) - fun eh_detailedLogs() = rxPrefs.getBoolean(Keys.eh_detailedLogs, false) + fun eh_logLevel() = rxPrefs.getInteger(Keys.eh_logLevel, 0) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt index 275dca17d..482fe202b 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.network import android.content.Context import android.os.Build +import exh.log.maybeInjectEHLogger import okhttp3.* import java.io.File import java.io.IOException @@ -25,6 +26,7 @@ class NetworkHelper(context: Context) { .cookieJar(cookieManager) .cache(Cache(cacheDir, cacheSize)) .enableTLS12() + .maybeInjectEHLogger() .build() val cloudflareClient = client.newBuilder() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index 0b8ce0148..ccba1fe10 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -22,6 +22,7 @@ import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction import eu.kanade.tachiyomi.ui.library.LibraryController import eu.kanade.tachiyomi.util.toast import exh.debug.SettingsDebugController +import exh.log.EHLogLevel import exh.ui.migration.MetadataFetchDialog import rx.Observable import rx.android.schedulers.AndroidSchedulers @@ -119,19 +120,17 @@ class SettingsAdvancedController : SettingsController() { summary = "Apply TachiyomiEH enhancements to the following sources if they are installed: ${DELEGATED_SOURCES.values.joinToString { it.sourceName }}" } - switchPreference { - title = "Detailed logs" + intListPreference { + key = PreferenceKeys.eh_logLevel + title = "Log level" - if(BuildConfig.DEBUG) { - summary = "Force-enabled in this debug build." - isChecked = true - isPersistent = false - isEnabled = false - } else { - key = PreferenceKeys.eh_detailedLogs - defaultValue = false - summary = "Increase detail level of logs. May cause the app to become slightly slower." - } + entries = EHLogLevel.values().map { + "${it.name.toLowerCase().capitalize()} (${it.description})" + }.toTypedArray() + entryValues = EHLogLevel.values().mapIndexed { index, _ -> "$index" }.toTypedArray() + defaultValue = "0" + + summary = "Changing this can impact app performance. Force-restart app after changing. Current value: %s" } preference { diff --git a/app/src/main/java/exh/log/EHLogLevel.kt b/app/src/main/java/exh/log/EHLogLevel.kt new file mode 100644 index 000000000..aade868b5 --- /dev/null +++ b/app/src/main/java/exh/log/EHLogLevel.kt @@ -0,0 +1,22 @@ +package exh.log + +import eu.kanade.tachiyomi.data.preference.PreferencesHelper +import eu.kanade.tachiyomi.data.preference.getOrDefault +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get + +enum class EHLogLevel(val description: String) { + MINIMAL("critical errors only"), + EXTRA("log everything"), + EXTREME("network inspection mode"); + + companion object { + private val curLogLevel by lazy { + Injekt.get().eh_logLevel().getOrDefault() + } + + fun shouldLog(requiredLogLevel: EHLogLevel): Boolean { + return curLogLevel >= requiredLogLevel.ordinal + } + } +} \ No newline at end of file diff --git a/app/src/main/java/exh/log/EHNetworkLogging.kt b/app/src/main/java/exh/log/EHNetworkLogging.kt new file mode 100644 index 000000000..ec998e911 --- /dev/null +++ b/app/src/main/java/exh/log/EHNetworkLogging.kt @@ -0,0 +1,18 @@ +package exh.log + +import com.elvishew.xlog.XLog +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor + +fun OkHttpClient.Builder.maybeInjectEHLogger(): OkHttpClient.Builder { + if(EHLogLevel.shouldLog(EHLogLevel.EXTREME)) { + val xLogger = XLog.tag("EHNetwork") + .nst() + val interceptor = HttpLoggingInterceptor { + xLogger.d(it) + } + interceptor.level = HttpLoggingInterceptor.Level.BODY + return addInterceptor(interceptor) + } + return this +} diff --git a/app/src/main/java/exh/uconfig/EHConfigurator.kt b/app/src/main/java/exh/uconfig/EHConfigurator.kt index 29fcb590c..a48afaef1 100644 --- a/app/src/main/java/exh/uconfig/EHConfigurator.kt +++ b/app/src/main/java/exh/uconfig/EHConfigurator.kt @@ -6,6 +6,7 @@ import eu.kanade.tachiyomi.source.online.all.EHentai import eu.kanade.tachiyomi.util.asJsoup import exh.EH_SOURCE_ID import exh.EXH_SOURCE_ID +import exh.log.maybeInjectEHLogger import okhttp3.FormBody import okhttp3.OkHttpClient import okhttp3.Request @@ -16,7 +17,9 @@ class EHConfigurator { private val prefs: PreferencesHelper by injectLazy() private val sources: SourceManager by injectLazy() - private val configuratorClient = OkHttpClient.Builder().build() + private val configuratorClient = OkHttpClient.Builder() + .maybeInjectEHLogger() + .build() private fun EHentai.requestWithCreds(sp: Int = 1) = Request.Builder() .addHeader("Cookie", cookiesHeader(sp)) diff --git a/app/src/main/java/exh/ui/captcha/SolveCaptchaActivity.kt b/app/src/main/java/exh/ui/captcha/SolveCaptchaActivity.kt index be782b87a..4ab91e0c7 100644 --- a/app/src/main/java/exh/ui/captcha/SolveCaptchaActivity.kt +++ b/app/src/main/java/exh/ui/captcha/SolveCaptchaActivity.kt @@ -26,6 +26,7 @@ import android.os.SystemClock import com.afollestad.materialdialogs.MaterialDialog import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault +import exh.log.maybeInjectEHLogger import exh.util.melt import rx.Observable @@ -33,7 +34,9 @@ class SolveCaptchaActivity : AppCompatActivity() { private val sourceManager: SourceManager by injectLazy() private val preferencesHelper: PreferencesHelper by injectLazy() - val httpClient = OkHttpClient() + val httpClient = OkHttpClient.Builder() + .maybeInjectEHLogger() + .build() private val jsonParser = JsonParser() private var currentLoopId: String? = null