From 7e91ae02f153fbaae8b9d8ab40bca75d296506a8 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Sun, 7 Mar 2021 00:23:23 -0500 Subject: [PATCH] Upgrade logging, now maps timber to XLog, new logging functions --- app/build.gradle.kts | 4 +- app/src/main/java/eu/kanade/tachiyomi/App.kt | 44 +++++------ .../tachiyomi/extension/ExtensionManager.kt | 8 +- .../kanade/tachiyomi/source/SourceManager.kt | 6 +- .../tachiyomi/source/online/all/EHentai.kt | 8 +- .../source/online/all/MergedSource.kt | 4 +- .../source/browse/BrowseSourceController.kt | 6 +- .../ui/browse/source/filter/AutoComplete.kt | 4 +- .../biometric/BiometricTimesCreateDialog.kt | 6 +- .../biometric/BiometricTimesPresenter.kt | 6 +- .../tachiyomi/ui/manga/MangaController.kt | 4 +- .../tachiyomi/ui/manga/MangaPresenter.kt | 4 +- .../merged/EditMergedSettingsHeaderAdapter.kt | 4 +- .../tachiyomi/ui/reader/ReaderActivity.kt | 6 +- app/src/main/java/exh/EXHMigrations.kt | 11 ++- app/src/main/java/exh/GalleryAdder.kt | 4 +- app/src/main/java/exh/debug/DebugFunctions.kt | 20 ++--- .../java/exh/eh/MemAutoFlushingLookupTable.kt | 4 +- .../java/exh/favorites/FavoritesSyncHelper.kt | 6 +- .../main/java/exh/log/EnhancedFilePrinter.kt | 14 +++- app/src/main/java/exh/log/Logging.kt | 76 +++++++++++++++++++ app/src/main/java/exh/log/XLogTree.kt | 35 +++++++++ .../java/exh/md/handlers/ApiMangaParser.kt | 6 +- .../java/exh/md/handlers/FollowsHandler.kt | 11 +-- .../exh/md/similar/SimilarUpdateService.kt | 4 +- .../uconfig/ConfiguringDialogController.kt | 4 +- .../main/java/exh/uconfig/EHConfigurator.kt | 4 +- .../java/exh/ui/batchadd/BatchAddPresenter.kt | 4 +- .../exh/ui/captcha/BrowserActionActivity.kt | 13 ++-- .../main/java/exh/ui/login/LoginController.kt | 4 +- app/src/main/java/exh/util/OkHttpUtil.kt | 4 +- 31 files changed, 226 insertions(+), 112 deletions(-) create mode 100644 app/src/main/java/exh/log/Logging.kt create mode 100644 app/src/main/java/exh/log/XLogTree.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index bc85f8af2..fcfee32e6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -289,7 +289,7 @@ dependencies { implementation("com.google.firebase:firebase-crashlytics-ktx:17.3.1") // Better logging (EH) - implementation("com.elvishew:xlog:1.7.1") + implementation("com.elvishew:xlog:1.8.0") // Debug utils (EH) val debugOverlayVersion = "1.1.3" @@ -307,7 +307,7 @@ dependencies { implementation("androidx.gridlayout:gridlayout:1.0.0") implementation("com.mikepenz:fastadapter:5.3.4") - // SY --> + // SY <-- } tasks { diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index dc7234462..a032bd202 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -22,7 +22,6 @@ import com.elvishew.xlog.printer.file.naming.DateFileNameGenerator import com.google.android.gms.common.GooglePlayServicesNotAvailableException import com.google.android.gms.common.GooglePlayServicesRepairableException import com.google.android.gms.security.ProviderInstaller -import com.google.firebase.analytics.FirebaseAnalytics import com.google.firebase.analytics.ktx.analytics import com.google.firebase.ktx.Firebase import com.ms_square.debugoverlay.DebugOverlay @@ -36,6 +35,9 @@ import exh.log.CrashlyticsPrinter import exh.log.EHDebugModeOverlay import exh.log.EHLogLevel import exh.log.EnhancedFilePrinter +import exh.log.XLogTree +import exh.log.xLogD +import exh.log.xLogE import exh.syDebugVersion import io.realm.Realm import org.conscrypt.Conscrypt @@ -55,12 +57,11 @@ open class App : Application(), LifecycleObserver { private val preferences: PreferencesHelper by injectLazy() - private lateinit var firebaseAnalytics: FirebaseAnalytics - override fun onCreate() { super.onCreate() - if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree()) + // if (BuildConfig.DEBUG) Timber.plant(Timber.DebugTree()) setupExhLogging() // EXH logging + Timber.plant(XLogTree()) // SY Redirect Timber to XLog if (!BuildConfig.DEBUG) addAnalytics() workaroundAndroid7BrokenSSL() @@ -100,23 +101,22 @@ open class App : Application(), LifecycleObserver { try { SSLContext.getInstance("TLSv1.2") } catch (e: NoSuchAlgorithmException) { - XLog.tag("Init").e("Could not install Android 7 broken SSL workaround!", e) + xLogE("Could not install Android 7 broken SSL workaround!", e) } try { ProviderInstaller.installIfNeeded(applicationContext) } catch (e: GooglePlayServicesRepairableException) { - XLog.tag("Init").e("Could not install Android 7 broken SSL workaround!", e) + xLogE("Could not install Android 7 broken SSL workaround!", e) } catch (e: GooglePlayServicesNotAvailableException) { - XLog.tag("Init").e("Could not install Android 7 broken SSL workaround!", e) + xLogE("Could not install Android 7 broken SSL workaround!", e) } } } private fun addAnalytics() { - firebaseAnalytics = Firebase.analytics if (syDebugVersion != "0") { - firebaseAnalytics.setUserProperty("preview_version", syDebugVersion) + Firebase.analytics.setUserProperty("preview_version", syDebugVersion) } } @@ -137,8 +137,8 @@ open class App : Application(), LifecycleObserver { EHLogLevel.init(this) val logLevel = when { - EHLogLevel.shouldLog(EHLogLevel.EXTRA) -> LogLevel.ALL - BuildConfig.DEBUG -> LogLevel.DEBUG + EHLogLevel.shouldLog(EHLogLevel.EXTREME) -> LogLevel.ALL + EHLogLevel.shouldLog(EHLogLevel.EXTRA) || BuildConfig.DEBUG -> LogLevel.DEBUG else -> LogLevel.WARN } @@ -160,9 +160,8 @@ open class App : Application(), LifecycleObserver { @OptIn(ExperimentalTime::class) printers += EnhancedFilePrinter - .Builder(logFolder.absolutePath) - .fileNameGenerator( - object : DateFileNameGenerator() { + .Builder(logFolder.absolutePath) { + fileNameGenerator = object : DateFileNameGenerator() { override fun generateFileName(logLevel: Int, timestamp: Long): String { return super.generateFileName( logLevel, @@ -170,13 +169,12 @@ open class App : Application(), LifecycleObserver { ) + "-${BuildConfig.BUILD_TYPE}.log" } } - ) - .flattener { timeMillis, level, tag, message -> - "${dateFormat.format(timeMillis)} ${LogLevel.getShortLevelName(level)}/$tag: $message" + flattener { timeMillis, level, tag, message -> + "${dateFormat.format(timeMillis)} ${LogLevel.getShortLevelName(level)}/$tag: $message" + } + cleanStrategy = FileLastModifiedCleanStrategy(7.days.toLongMilliseconds()) + backupStrategy = NeverBackupStrategy() } - .cleanStrategy(FileLastModifiedCleanStrategy(7.days.toLongMilliseconds())) - .backupStrategy(NeverBackupStrategy()) - .build() // Install Crashlytics in prod if (!BuildConfig.DEBUG) { @@ -188,8 +186,8 @@ open class App : Application(), LifecycleObserver { *printers.toTypedArray() ) - XLog.tag("Init").d("Application booting...") - XLog.tag("Init").d( + xLogD("Application booting...") + xLogD( "App version: ${BuildConfig.VERSION_NAME} (${BuildConfig.FLAVOR}, ${BuildConfig.COMMIT_SHA}, ${BuildConfig.VERSION_CODE})\n" + "Preview build: $syDebugVersion\n" + "Android version: ${Build.VERSION.RELEASE} (SDK ${Build.VERSION.SDK_INT}) \n" + @@ -214,7 +212,7 @@ open class App : Application(), LifecycleObserver { .install() } catch (e: IllegalStateException) { // Crashes if app is in background - XLog.tag("Init").e("Failed to initialize debug overlay, app in background?", e) + xLogE("Failed to initialize debug overlay, app in background?", e) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt index 3979b2afa..52f89b5f4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.extension import android.content.Context import android.graphics.drawable.Drawable import androidx.core.content.ContextCompat -import com.elvishew.xlog.XLog import com.jakewharton.rxrelay.BehaviorRelay import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferencesHelper @@ -19,6 +18,7 @@ import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.util.lang.launchNow import eu.kanade.tachiyomi.util.system.toast +import exh.log.xLogD import exh.source.BlacklistedSources import exh.source.EH_SOURCE_ID import exh.source.EXH_SOURCE_ID @@ -158,7 +158,7 @@ class ExtensionManager( val blacklistEnabled = preferences.enableSourceBlacklist().get() return filter { if (it.isBlacklisted(blacklistEnabled)) { - XLog.tag("ExtensionManager").d("Removing blacklisted extension: (name: %s, pkgName: %s)!", it.name, it.pkgName) + xLogD("Removing blacklisted extension: (name: %s, pkgName: %s)!", it.name, it.pkgName) false } else true } @@ -333,7 +333,7 @@ class ExtensionManager( private fun registerNewExtension(extension: Extension.Installed) { // SY --> if (extension.isBlacklisted()) { - XLog.tag("ExtensionManager").d("Removing blacklisted extension: (name: String, pkgName: %s)!", extension.name, extension.pkgName) + xLogD("Removing blacklisted extension: (name: String, pkgName: %s)!", extension.name, extension.pkgName) return } // SY <-- @@ -351,7 +351,7 @@ class ExtensionManager( private fun registerUpdatedExtension(extension: Extension.Installed) { // SY --> if (extension.isBlacklisted()) { - XLog.tag("ExtensionManager").d("Removing blacklisted extension: (name: String, pkgName: %s)!", extension.name, extension.pkgName) + xLogD("Removing blacklisted extension: (name: %s, pkgName: %s)!", extension.name, extension.pkgName) return } // SY <-- diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt index f73e408c5..a0f76fae1 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt @@ -1,7 +1,6 @@ package eu.kanade.tachiyomi.source import android.content.Context -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.source.model.Page @@ -19,6 +18,7 @@ import eu.kanade.tachiyomi.source.online.english.HBrowse import eu.kanade.tachiyomi.source.online.english.HentaiCafe import eu.kanade.tachiyomi.source.online.english.Pururin import eu.kanade.tachiyomi.source.online.english.Tsumino +import exh.log.xLogD import exh.source.BlacklistedSources import exh.source.DelegatedHttpSource import exh.source.EH_SOURCE_ID @@ -115,7 +115,7 @@ open class SourceManager(private val context: Context) { } else DELEGATED_SOURCES[sourceQName] } else null val newSource = if (source is HttpSource && delegate != null) { - XLog.tag("SourceManager").d("Delegating source: %s -> %s!", sourceQName, delegate.newSourceClass.qualifiedName) + xLogD("Delegating source: %s -> %s!", sourceQName, delegate.newSourceClass.qualifiedName) val enhancedSource = EnhancedHttpSource( source, delegate.newSourceClass.constructors.find { it.parameters.size == 2 }!!.call(source, context) @@ -132,7 +132,7 @@ open class SourceManager(private val context: Context) { } else source if (source.id in BlacklistedSources.BLACKLISTED_EXT_SOURCES) { - XLog.tag("SourceManager").d("Removing blacklisted source: (id: %s, name: %s, lang: %s)!", source.id, source.name, (source as? CatalogueSource)?.lang) + xLogD("Removing blacklisted source: (id: %s, name: %s, lang: %s)!", source.id, source.name, (source as? CatalogueSource)?.lang) return } // EXH <-- diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt index e0f4c3e88..fef9c641b 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/EHentai.kt @@ -3,7 +3,6 @@ package eu.kanade.tachiyomi.source.online.all import android.content.Context import android.net.Uri import androidx.core.net.toUri -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.annotations.Nsfw import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.preference.PreferencesHelper @@ -31,6 +30,7 @@ import exh.eh.EHTags import exh.eh.EHentaiUpdateHelper import exh.eh.EHentaiUpdateWorkerConstants import exh.eh.GalleryEntry +import exh.log.xLogD import exh.metadata.MetadataUtil import exh.metadata.metadata.EHentaiSearchMetadata import exh.metadata.metadata.EHentaiSearchMetadata.Companion.EH_GENRE_NAMESPACE @@ -325,7 +325,7 @@ class EHentai( url = EHentaiSearchMetadata.normalizeUrl(parentLink) } else break } else { - XLog.tag("EHentai").d("Parent cache hit: %s!", gid) + xLogD("Parent cache hit: %s!", gid) url = EHentaiSearchMetadata.idAndTokenToUrl( cachedParent.gId, cachedParent.gToken @@ -613,7 +613,7 @@ class EHentai( lastUpdateCheck - datePosted!! > EHentaiUpdateWorkerConstants.GALLERY_AGE_TIME ) { aged = true - XLog.tag("EHentai").d("aged %s - too old", title) + xLogD("aged %s - too old", title) } // Parse ratings @@ -879,7 +879,7 @@ class EHentai( stringBuilder.append(" ") } - XLog.tag("EHentai").d(stringBuilder.toString()) + xLogD(stringBuilder.toString()) return stringBuilder.toString().trim() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt index fd8dbfdff..ea87a9bd6 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/all/MergedSource.kt @@ -1,6 +1,5 @@ package eu.kanade.tachiyomi.source.online.all -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Manga @@ -19,6 +18,7 @@ import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource import eu.kanade.tachiyomi.util.lang.withIOContext import eu.kanade.tachiyomi.util.shouldDownloadNewChapters +import exh.log.xLogW import exh.merged.sql.models.MergedMangaReference import exh.source.MERGED_SOURCE_ID import exh.util.executeOnIO @@ -185,7 +185,7 @@ class MergedSource : HttpSource() { mangaId = manga.id db.insertNewMergedMangaId(this).executeOnIO() } catch (e: Exception) { - XLog.tag("MergedSource").enableStackTrace(e.stackTrace.contentToString(), 5) + xLogW("Error inserting merged manga id", e) } } return LoadedMangaSource(source, manga, this) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt index 2b56fbef4..b546b00a8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/browse/BrowseSourceController.kt @@ -17,7 +17,6 @@ import androidx.recyclerview.widget.RecyclerView import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.input.input import com.afollestad.materialdialogs.list.listItems -import com.elvishew.xlog.XLog import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton import com.google.android.material.snackbar.Snackbar import com.tfcporciuncula.flow.Preference @@ -57,6 +56,7 @@ import eu.kanade.tachiyomi.util.view.shrinkOnScroll import eu.kanade.tachiyomi.util.view.snack import eu.kanade.tachiyomi.widget.AutofitRecyclerView import eu.kanade.tachiyomi.widget.EmptyView +import exh.log.xLogW import exh.md.similar.ui.EnableMangaDexSimilarDialogController import exh.savedsearches.EXHSavedSearch import exh.source.getMainSource @@ -542,8 +542,8 @@ open class BrowseSourceController(bundle: Bundle) : */ /* SY --> */ open /* SY <-- */fun onAddPageError(error: Throwable) { // SY --> - XLog.tag("BrowseSourceController").enableStackTrace(2).w("> Failed to load next catalogue page!", error) - XLog.tag("BrowseSourceController").enableStackTrace(2).w( + xLogW("> Failed to load next catalogue page!", error) + xLogW( "> (source.id: %s, source.name: %s)", presenter.source.id, presenter.source.name diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/filter/AutoComplete.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/filter/AutoComplete.kt index 82758e204..cc21549ba 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/filter/AutoComplete.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/source/filter/AutoComplete.kt @@ -7,7 +7,6 @@ import android.widget.AutoCompleteTextView import android.widget.TextView import androidx.core.widget.addTextChangedListener import androidx.recyclerview.widget.RecyclerView -import com.elvishew.xlog.XLog import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup import eu.davidea.flexibleadapter.FlexibleAdapter @@ -17,6 +16,7 @@ import eu.davidea.viewholders.FlexibleViewHolder import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.source.model.Filter import eu.kanade.tachiyomi.widget.AutoCompleteAdapter +import exh.log.xLogD open class AutoComplete(val filter: Filter.AutoComplete) : AbstractFlexibleItem() { @@ -97,7 +97,7 @@ open class AutoComplete(val filter: Filter.AutoComplete) : AbstractFlexibleItem< addChipToGroup(name, holder) filter.state += name } else { - XLog.tag("AutoComplete").d("Invalid tag: $name") + xLogD("Invalid tag: %s", name) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesCreateDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesCreateDialog.kt index 9300d555c..05311aa22 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesCreateDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesCreateDialog.kt @@ -5,9 +5,9 @@ import android.os.Bundle import com.afollestad.materialdialogs.MaterialDialog import com.afollestad.materialdialogs.datetime.timePicker import com.bluelinelabs.conductor.Controller -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.base.controller.DialogController +import exh.log.xLogD import java.util.Calendar import kotlin.time.Duration import kotlin.time.ExperimentalTime @@ -48,9 +48,9 @@ class BiometricTimesCreateDialog(bundle: Bundle? = null) : DialogController(b .title(if (startTime == null) R.string.biometric_lock_start_time else R.string.biometric_lock_end_time) .timePicker(show24HoursView = false) { _, datetime -> val hour = datetime.get(Calendar.HOUR_OF_DAY) - XLog.disableStackTrace().d(hour) + xLogD(hour) val minute = datetime.get(Calendar.MINUTE) - XLog.disableStackTrace().d(minute) + xLogD(minute) if (hour !in 0..24 || minute !in 0..60) return@timePicker if (startTime != null) { endTime = hour.hours + minute.minutes diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesPresenter.kt index 2c54b2543..4d9fd866e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/biometric/BiometricTimesPresenter.kt @@ -1,10 +1,10 @@ package eu.kanade.tachiyomi.ui.category.biometric import android.os.Bundle -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.plusAssign import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter +import exh.log.xLogD import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import rx.Observable @@ -36,7 +36,7 @@ class BiometricTimesPresenter : BasePresenter() { preferences.biometricTimeRanges().asFlow().onEach { prefTimeRanges -> timeRanges = prefTimeRanges.toList() - .mapNotNull { TimeRange.fromPreferenceString(it) }.onEach { XLog.disableStackTrace().d(it) } + .mapNotNull { TimeRange.fromPreferenceString(it) }.onEach { xLogD(it) } Observable.just(timeRanges) .map { it.map(::BiometricTimesItem) } @@ -57,7 +57,7 @@ class BiometricTimesPresenter : BasePresenter() { return } - XLog.disableStackTrace().d(timeRange) + xLogD(timeRange) preferences.biometricTimeRanges() += timeRange.toPreferenceString() } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt index 65a1c27fa..bcfae97d4 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaController.kt @@ -36,7 +36,6 @@ import com.afollestad.materialdialogs.list.listItemsSingleChoice import com.bluelinelabs.conductor.ControllerChangeHandler import com.bluelinelabs.conductor.ControllerChangeType import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.elvishew.xlog.XLog import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton import com.google.android.material.snackbar.Snackbar import eu.davidea.flexibleadapter.FlexibleAdapter @@ -102,6 +101,7 @@ import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.getCoordinates import eu.kanade.tachiyomi.util.view.shrinkOnScroll import eu.kanade.tachiyomi.util.view.snack +import exh.log.xLogD import exh.md.similar.ui.MangaDexSimilarController import exh.metadata.metadata.base.FlatMetadata import exh.recs.RecommendsController @@ -355,7 +355,7 @@ class MangaController : presenter.redirectFlow .onEach { redirect -> - XLog.d("Redirecting to updated manga (manga.id: %s, manga.title: %s, update: %s)!", redirect.manga.id, redirect.manga.title, redirect.update) + xLogD("Redirecting to updated manga (manga.id: %s, manga.title: %s, update: %s)!", redirect.manga.id, redirect.manga.title, redirect.update) // Replace self router?.replaceTopController(MangaController(redirect).withFadeTransaction()) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt index ee76e6c7f..5b25cf61b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt @@ -4,7 +4,6 @@ import android.content.Context import android.net.Uri import android.os.Bundle import android.os.Environment -import com.elvishew.xlog.XLog import com.jakewharton.rxrelay.PublishRelay import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.CoverCache @@ -46,6 +45,7 @@ import eu.kanade.tachiyomi.util.updateCoverLastModified import eu.kanade.tachiyomi.widget.ExtendedNavigationView.Item.TriStateGroup.State import exh.debug.DebugToggles import exh.eh.EHentaiUpdateHelper +import exh.log.xLogD import exh.md.utils.FollowStatus import exh.md.utils.MdUtil import exh.md.utils.scanlatorList @@ -236,7 +236,7 @@ class MangaPresenter( // Redirect if we are not the accepted root if (manga.id != acceptedChain.manga.id && acceptedChain.manga.favorite) { // Update if any of our chapters are not in accepted manga's chapters - XLog.disableStackTrace().d("Found accepted manga ${manga.url}") + xLogD("Found accepted manga %s", manga.url) val ourChapterUrls = chapters.map { it.url }.toSet() val acceptedChapterUrls = acceptedChain.chapters.map { it.url }.toSet() val update = (ourChapterUrls - acceptedChapterUrls).isNotEmpty() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt index f66ed42bf..346f516eb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/merged/EditMergedSettingsHeaderAdapter.kt @@ -6,9 +6,9 @@ import android.view.ViewGroup import android.widget.AdapterView import android.widget.ArrayAdapter import androidx.recyclerview.widget.RecyclerView -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.databinding.EditMergedSettingsHeaderBinding import eu.kanade.tachiyomi.source.SourceManager +import exh.log.xLogD import exh.merged.sql.models.MergedMangaReference import uy.kohesive.injekt.injectLazy @@ -74,7 +74,7 @@ class EditMergedSettingsHeaderAdapter(private val controller: EditMergedSettings 3 -> MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER else -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE } - XLog.d(controller.mergeReference?.chapterSortMode) + xLogD(controller.mergeReference?.chapterSortMode) editMergedMangaItemSortingListener.onSetPrioritySort(canMove()) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt index 73dcfdb47..f0d9724a8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderActivity.kt @@ -28,7 +28,6 @@ import androidx.core.view.setPadding import androidx.lifecycle.lifecycleScope import com.afollestad.materialdialogs.MaterialDialog import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView -import com.elvishew.xlog.XLog import com.google.android.material.snackbar.Snackbar import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.models.Chapter @@ -70,6 +69,7 @@ import eu.kanade.tachiyomi.util.view.showBar import eu.kanade.tachiyomi.util.view.snack import eu.kanade.tachiyomi.widget.SimpleAnimationListener import eu.kanade.tachiyomi.widget.SimpleSeekBarListener +import exh.log.xLogE import exh.source.isEhBasedSource import exh.util.defaultReaderType import exh.util.mangaType @@ -128,8 +128,6 @@ class ReaderActivity : BaseRxActivity() private var autoScrollJob: Job? = null private val sourceManager: SourceManager by injectLazy() - private val logger = XLog.tag("ReaderActivity") - private lateinit var chapterBottomSheet: ReaderChapterSheet // SY <-- @@ -985,7 +983,7 @@ class ReaderActivity : BaseRxActivity() ReaderPageSheet(this, page).show() // EXH --> } catch (e: WindowManager.BadTokenException) { - logger.e("Caught and ignoring reader page sheet launch exception!", e) + xLogE("Caught and ignoring reader page sheet launch exception!", e) } // EXH <-- } diff --git a/app/src/main/java/exh/EXHMigrations.kt b/app/src/main/java/exh/EXHMigrations.kt index 79c7e66f9..d100032a0 100644 --- a/app/src/main/java/exh/EXHMigrations.kt +++ b/app/src/main/java/exh/EXHMigrations.kt @@ -1,7 +1,6 @@ package exh import android.content.Context -import com.elvishew.xlog.XLog import com.pushtorefresh.storio.sqlite.queries.Query import com.pushtorefresh.storio.sqlite.queries.RawQuery import eu.kanade.tachiyomi.BuildConfig @@ -24,6 +23,8 @@ import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.source.online.all.Hitomi import eu.kanade.tachiyomi.source.online.all.NHentai +import exh.log.xLogE +import exh.log.xLogW import exh.merged.sql.models.MergedMangaReference import exh.source.BlacklistedSources import exh.source.EH_SOURCE_ID @@ -48,8 +49,6 @@ object EXHMigrations { private val db: DatabaseHelper by injectLazy() private val sourceManager: SourceManager by injectLazy() - private val logger by lazy { XLog.tag("EXHMigrations") } - /** * Performs a migration when the application is updated. * @@ -272,14 +271,14 @@ object EXHMigrations { // if (oldVersion < 1) { } (1 is current release version) // do stuff here when releasing changed crap - // TODO BE CAREFUL TO NOT FUCK UP MergedSources IF CHANGING URLs + // TODO BE CAREFUL TO NOT FUCK UP MergedSources IF CHANGING URLsxdcsv preferences.ehLastVersionCode().set(BuildConfig.VERSION_CODE) return true } } catch (e: Exception) { - logger.e("Failed to migrate app from $oldVersion -> ${BuildConfig.VERSION_CODE}!", e) + xLogE("Failed to migrate app from $oldVersion -> ${BuildConfig.VERSION_CODE}!", e) } return false } @@ -334,7 +333,7 @@ object EXHMigrations { try { dbLocation.copyTo(backupLocation, overwrite = true) } catch (t: Throwable) { - logger.enableStackTrace(2).w("Failed to backup database!") + xLogW("Failed to backup database!") } } diff --git a/app/src/main/java/exh/GalleryAdder.kt b/app/src/main/java/exh/GalleryAdder.kt index 454360bd0..afec0ca84 100755 --- a/app/src/main/java/exh/GalleryAdder.kt +++ b/app/src/main/java/exh/GalleryAdder.kt @@ -2,7 +2,6 @@ package exh import android.content.Context import androidx.core.net.toUri -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.models.Chapter @@ -15,6 +14,7 @@ import eu.kanade.tachiyomi.source.model.toSManga import eu.kanade.tachiyomi.source.online.UrlImportableSource import eu.kanade.tachiyomi.source.online.all.EHentai import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource +import exh.log.xLogStack import exh.source.getMainSource import exh.util.executeOnIO import uy.kohesive.injekt.Injekt @@ -32,7 +32,7 @@ class GalleryAdder { preferences.enabledLanguages().get() to preferences.disabledSources().get().map { it.toLong() }.toSet() } - private val logger = XLog.tag("GalleryAdder").enableStackTrace(2).build() + private val logger = xLogStack() fun pickSource(url: String): List { val uri = url.toUri() diff --git a/app/src/main/java/exh/debug/DebugFunctions.kt b/app/src/main/java/exh/debug/DebugFunctions.kt index bc240a14c..4a4100740 100644 --- a/app/src/main/java/exh/debug/DebugFunctions.kt +++ b/app/src/main/java/exh/debug/DebugFunctions.kt @@ -1,7 +1,6 @@ package exh.debug import android.app.Application -import com.elvishew.xlog.XLog import com.pushtorefresh.storio.sqlite.queries.RawQuery import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.models.toMangaInfo @@ -13,6 +12,7 @@ import eu.kanade.tachiyomi.source.model.toSManga import exh.EXHMigrations import exh.eh.EHentaiThrottleManager import exh.eh.EHentaiUpdateWorker +import exh.log.xLogE import exh.metadata.metadata.EHentaiSearchMetadata import exh.metadata.metadata.base.getFlatMetadataForManga import exh.metadata.metadata.base.insertFlatMetadataAsync @@ -60,7 +60,7 @@ object DebugFunctions { }.toList() allManga.forEach { manga -> - val meta = db.getFlatMetadataForManga(manga.id!!).executeAsBlocking()?.raise() ?: return@forEach + val meta = db.getFlatMetadataForManga(manga.id!!).executeOnIO()?.raise() ?: return@forEach // remove age flag meta.aged = false db.insertFlatMetadataAsync(meta.flatten()).await() @@ -94,7 +94,7 @@ object DebugFunctions { )?.getMangaDetails(manga.toMangaInfo())?.let { networkManga -> manga.copyFrom(networkManga.toSManga()) manga.initialized = true - db.insertManga(manga).executeAsBlocking() + db.insertManga(manga).executeOnIO() } } } @@ -111,7 +111,7 @@ object DebugFunctions { }.toList() allManga.forEach { manga -> - val meta = db.getFlatMetadataForManga(manga.id!!).executeAsBlocking()?.raise() ?: return@forEach + val meta = db.getFlatMetadataForManga(manga.id!!).executeOnIO()?.raise() ?: return@forEach galleries += "Aged: ${meta.aged}\t Title: ${manga.title}" } } @@ -121,7 +121,7 @@ object DebugFunctions { fun countAgedFlagInEXHManga(): Int { var agedAmount = 0 runBlocking { - val metadataManga = db.getFavoriteMangaWithMetadata().executeAsBlocking() + val metadataManga = db.getFavoriteMangaWithMetadata().executeOnIO() val allManga = metadataManga.asFlow().cancellable().mapNotNull { manga -> if (manga.isEhBasedManga()) manga @@ -129,7 +129,7 @@ object DebugFunctions { }.toList() allManga.forEach { manga -> - val meta = db.getFlatMetadataForManga(manga.id!!).executeAsBlocking()?.raise() ?: return@forEach + val meta = db.getFlatMetadataForManga(manga.id!!).executeOnIO()?.raise() ?: return@forEach if (meta.aged) { // remove age flag agedAmount++ @@ -239,7 +239,7 @@ object DebugFunctions { Json.decodeFromString(it.substringAfter(':')) } catch (t: RuntimeException) { // Load failed - XLog.tag("DebugFunctions").e("Failed to load saved search!", t) + xLogE("Failed to load saved search!", t) t.printStackTrace() null } @@ -251,7 +251,7 @@ object DebugFunctions { Json.decodeFromString(it.substringAfter(':')) } catch (t: RuntimeException) { // Load failed - XLog.tag("DebugFunctions").e("Failed to load saved search!", t) + xLogE("Failed to load saved search!", t) t.printStackTrace() null } @@ -278,7 +278,7 @@ object DebugFunctions { Json.decodeFromString(it.substringAfter(':')) } catch (t: RuntimeException) { // Load failed - XLog.tag("DebugFunctions").e("Failed to load saved search!", t) + xLogE("Failed to load saved search!", t) t.printStackTrace() null } @@ -290,7 +290,7 @@ object DebugFunctions { Json.decodeFromString(it.substringAfter(':')) } catch (t: RuntimeException) { // Load failed - XLog.tag("DebugFunctions").e("Failed to load saved search!", t) + xLogE("Failed to load saved search!", t) t.printStackTrace() null } diff --git a/app/src/main/java/exh/eh/MemAutoFlushingLookupTable.kt b/app/src/main/java/exh/eh/MemAutoFlushingLookupTable.kt index 4eafb8ecc..e6c684dec 100644 --- a/app/src/main/java/exh/eh/MemAutoFlushingLookupTable.kt +++ b/app/src/main/java/exh/eh/MemAutoFlushingLookupTable.kt @@ -3,7 +3,7 @@ package exh.eh import android.util.SparseArray import androidx.core.util.AtomicFile import androidx.core.util.forEach -import com.elvishew.xlog.XLog +import exh.log.xLogD import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -95,7 +95,7 @@ class MemAutoFlushingLookupTable( } } } catch (e: FileNotFoundException) { - XLog.tag("MemAutoFlushingLookupTable").enableStackTrace(2).d("Lookup table not found!", e) + xLogD("Lookup table not found!", e) // Ignored } diff --git a/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt b/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt index f6b414904..1efefd8a5 100644 --- a/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt +++ b/app/src/main/java/exh/favorites/FavoritesSyncHelper.kt @@ -3,7 +3,6 @@ package exh.favorites import android.content.Context import android.net.wifi.WifiManager import android.os.PowerManager -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.models.Category @@ -21,6 +20,7 @@ import exh.GalleryAddEvent import exh.GalleryAdder import exh.eh.EHentaiThrottleManager import exh.eh.EHentaiUpdateWorker +import exh.log.xLog import exh.source.EH_SOURCE_ID import exh.source.EXH_SOURCE_ID import exh.source.isEhBasedManga @@ -61,7 +61,7 @@ class FavoritesSyncHelper(val context: Context) { private var wifiLock: WifiManager.WifiLock? = null private var wakeLock: PowerManager.WakeLock? = null - private val logger = XLog.tag("EHFavSync").build() + private val logger = xLog() val status: MutableStateFlow = MutableStateFlow(FavoritesSyncStatus.Idle(context)) @@ -381,7 +381,7 @@ class FavoritesSyncHelper(val context: Context) { if (result is GalleryAddEvent.Fail) { if (result is GalleryAddEvent.Fail.NotFound) { - XLog.tag("EHFavSync").enableStackTrace(2).e(context.getString(R.string.favorites_sync_remote_not_exist, it.getUrl())) + logger.e(context.getString(R.string.favorites_sync_remote_not_exist, it.getUrl())) // Skip this gallery, it no longer exists return@forEachIndexed } diff --git a/app/src/main/java/exh/log/EnhancedFilePrinter.kt b/app/src/main/java/exh/log/EnhancedFilePrinter.kt index 64a16fe19..63fd559e6 100644 --- a/app/src/main/java/exh/log/EnhancedFilePrinter.kt +++ b/app/src/main/java/exh/log/EnhancedFilePrinter.kt @@ -119,22 +119,22 @@ class EnhancedFilePrinter internal constructor( /** * The file name generator for log file. */ - private var fileNameGenerator: FileNameGenerator? = null + var fileNameGenerator: FileNameGenerator? = null /** * The backup strategy for log file. */ - private var backupStrategy: BackupStrategy? = null + var backupStrategy: BackupStrategy? = null /** * The clean strategy for log file. */ - private var cleanStrategy: CleanStrategy? = null + var cleanStrategy: CleanStrategy? = null /** * The flattener when print a log. */ - private var flattener: Flattener? = null + var flattener: Flattener? = null /** * Set the file name generator for log file. @@ -194,6 +194,12 @@ class EnhancedFilePrinter internal constructor( flattener ?: DefaultsFactory.createFlattener2() ) } + + companion object { + operator fun invoke(folderPath: String, block: Builder.() -> Unit): EnhancedFilePrinter { + return Builder(folderPath).apply(block).build() + } + } } private data class LogItem( diff --git a/app/src/main/java/exh/log/Logging.kt b/app/src/main/java/exh/log/Logging.kt new file mode 100644 index 000000000..2b366cd8d --- /dev/null +++ b/app/src/main/java/exh/log/Logging.kt @@ -0,0 +1,76 @@ +package exh.log + +import android.util.Log +import com.elvishew.xlog.Logger +import com.elvishew.xlog.XLog +import com.elvishew.xlog.LogLevel as XLogLevel + +fun Any.xLog(): Logger = XLog.tag(this::class.java.simpleName).build() + +fun Any.xLogStack(): Logger = XLog.tag(this::class.java.simpleName).enableStackTrace(0).build() + +fun Any.xLogE(log: String) = xLog().e(log) +fun Any.xLogW(log: String) = xLog().w(log) +fun Any.xLogD(log: String) = xLog().d(log) +fun Any.xLogI(log: String) = xLog().i(log) +fun Any.xLog(logLevel: LogLevel, log: String) = xLog().log(logLevel.int, log) +fun Any.xLogJson(log: String) = xLog().json(log) +fun Any.xLogXML(log: String) = xLog().xml(log) + +fun Any.xLogE(log: Throwable) = xLogStack().e(log) +fun Any.xLogW(log: Throwable) = xLogStack().w(log) +fun Any.xLogD(log: Throwable) = xLogStack().d(log) +fun Any.xLogI(log: Throwable) = xLogStack().i(log) +fun Any.xLog(logLevel: LogLevel, log: Throwable) = xLogStack().log(logLevel.int, log) + +fun Any.xLogE(log: String, e: Throwable) = xLogStack().e(log, e) +fun Any.xLogW(log: String, e: Throwable) = xLogStack().w(log, e) +fun Any.xLogD(log: String, e: Throwable) = xLogStack().d(log, e) +fun Any.xLogI(log: String, e: Throwable) = xLogStack().i(log, e) +fun Any.xLog(logLevel: LogLevel, log: String, e: Throwable) = xLogStack().log(logLevel.int, log, e) + +fun Any.xLogE(log: Any?) = xLog().let { if (log == null) it.e("null") else it.e(log) } +fun Any.xLogW(log: Any?) = xLog().let { if (log == null) it.w("null") else it.w(log) } +fun Any.xLogD(log: Any?) = xLog().let { if (log == null) it.d("null") else it.d(log) } +fun Any.xLogI(log: Any?) = xLog().let { if (log == null) it.i("null") else it.i(log) } +fun Any.xLog(logLevel: LogLevel, log: Any?) = xLog().let { if (log == null) it.log(logLevel.int, "null") else it.log(logLevel.int, log) } + +/*fun Any.xLogE(vararg logs: Any) = xLog().e(logs) +fun Any.xLogW(vararg logs: Any) = xLog().w(logs) +fun Any.xLogD(vararg logs: Any) = xLog().d(logs) +fun Any.xLogI(vararg logs: Any) = xLog().i(logs) +fun Any.xLog(logLevel: LogLevel, vararg logs: Any) = xLog().log(logLevel.int, logs)*/ + +fun Any.xLogE(format: String, vararg args: Any?) = xLog().e(format, *args) +fun Any.xLogW(format: String, vararg args: Any?) = xLog().w(format, *args) +fun Any.xLogD(format: String, vararg args: Any?) = xLog().d(format, *args) +fun Any.xLogI(format: String, vararg args: Any?) = xLog().i(format, *args) +fun Any.xLog(logLevel: LogLevel, format: String, vararg args: Any) = xLog().log(logLevel.int, format, *args) + +sealed class LogLevel(val int: Int, val androidLevel: Int) { + object None : LogLevel(XLogLevel.NONE, Log.ASSERT) + object Error : LogLevel(XLogLevel.ERROR, Log.ERROR) + object Warn : LogLevel(XLogLevel.WARN, Log.WARN) + object Info : LogLevel(XLogLevel.INFO, Log.INFO) + object Debug : LogLevel(XLogLevel.DEBUG, Log.DEBUG) + object Verbose : LogLevel(XLogLevel.VERBOSE, Log.VERBOSE) + object All : LogLevel(XLogLevel.ALL, Log.VERBOSE) + + val name get() = getLevelName(this) + val shortName get() = getLevelShortName(this) + + companion object { + fun getLevelName(logLevel: LogLevel): String = XLogLevel.getLevelName(logLevel.int) + fun getLevelShortName(logLevel: LogLevel): String = XLogLevel.getShortLevelName(logLevel.int) + + fun values() = listOf( + None, + Error, + Warn, + Info, + Debug, + Verbose, + All + ) + } +} diff --git a/app/src/main/java/exh/log/XLogTree.kt b/app/src/main/java/exh/log/XLogTree.kt new file mode 100644 index 000000000..6d81257b3 --- /dev/null +++ b/app/src/main/java/exh/log/XLogTree.kt @@ -0,0 +1,35 @@ +package exh.log + +import android.util.Log +import com.elvishew.xlog.XLog +import timber.log.Timber + +class XLogTree : Timber.DebugTree() { + override fun log(priority: Int, tag: String?, message: String, throwable: Throwable?) { + if (tag != null) { + if (throwable != null) { + XLog.tag(tag).log(priority.toXLogLevel(), message, throwable) + } else { + XLog.tag(tag).log(priority.toXLogLevel(), message) + } + } else { + if (throwable != null) { + XLog.log(priority.toXLogLevel(), message, throwable) + } else { + XLog.log(priority.toXLogLevel(), message) + } + } + } + + private fun Int.toXLogLevel(): Int { + return when (this) { + Log.ASSERT -> LogLevel.None.int + Log.ERROR -> LogLevel.Error.int + Log.WARN -> LogLevel.Warn.int + Log.INFO -> LogLevel.Info.int + Log.DEBUG -> LogLevel.Debug.int + Log.VERBOSE -> LogLevel.Verbose.int + else -> LogLevel.All.int + } + } +} diff --git a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt index 92a1969ca..e707427a8 100644 --- a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt +++ b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt @@ -1,11 +1,11 @@ package exh.md.handlers -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.network.parseAs import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.asJsoup +import exh.log.xLogE import exh.md.handlers.serializers.ApiChapterSerializer import exh.md.handlers.serializers.ApiMangaSerializer import exh.md.handlers.serializers.ChapterSerializer @@ -150,7 +150,7 @@ class ApiMangaParser(private val lang: String) { if (tags.isNotEmpty()) tags.clear() tags += genres.map { RaisedTag(null, it, MangaDexSearchMetadata.TAG_TYPE_DEFAULT) } } catch (e: Exception) { - XLog.tag("ApiMangaParser").enableStackTrace(2).e(e) + xLogE(e) throw e } } @@ -256,7 +256,7 @@ class ApiMangaParser(private val lang: String) { } return response.parseAs().data.mangaId } catch (e: Exception) { - XLog.tag("ApiMangaParser").enableStackTrace(2).e(e) + xLogE(e) throw e } } diff --git a/app/src/main/java/exh/md/handlers/FollowsHandler.kt b/app/src/main/java/exh/md/handlers/FollowsHandler.kt index 4dd6a206a..508fd6400 100644 --- a/app/src/main/java/exh/md/handlers/FollowsHandler.kt +++ b/app/src/main/java/exh/md/handlers/FollowsHandler.kt @@ -1,6 +1,5 @@ package exh.md.handlers -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.track.TrackManager @@ -12,6 +11,8 @@ import eu.kanade.tachiyomi.source.model.MangasPage import eu.kanade.tachiyomi.source.model.MetadataMangasPage import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.util.lang.withIOContext +import exh.log.xLogD +import exh.log.xLogE import exh.md.handlers.serializers.FollowPage import exh.md.handlers.serializers.FollowsIndividualSerializer import exh.md.handlers.serializers.FollowsPageSerializer @@ -50,7 +51,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere response.body?.string().orEmpty() ) } catch (e: Exception) { - XLog.tag("FollowsHandler").enableStackTrace(2).e("error parsing follows", e) + xLogE("error parsing follows", e) FollowsPageSerializer(404, emptyList()) } @@ -78,7 +79,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere val followsPageResult = try { response.parseAs(MdUtil.jsonParser) } catch (e: Exception) { - XLog.tag("FollowsHandler").enableStackTrace(2).e("error parsing follows", e) + xLogE("error parsing follows", e) throw e } @@ -161,7 +162,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere val formBody = FormBody.Builder() .add("volume", "0") .add("chapter", track.last_chapter_read.toString()) - XLog.tag("FollowsHandler").d("chapter to update %s", track.last_chapter_read.toString()) + xLogD("chapter to update %s", track.last_chapter_read.toString()) val response = client.newCall( POST( "${MdUtil.baseUrl}/ajax/actions.ajax.php?function=edit_progress&id=$mangaID", @@ -172,7 +173,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere withIOContext { response.body?.string() - .also { XLog.tag("FollowsHandler").d(it) } + .also { xLogD(it) } .let { it != null && it.isEmpty() } } } diff --git a/app/src/main/java/exh/md/similar/SimilarUpdateService.kt b/app/src/main/java/exh/md/similar/SimilarUpdateService.kt index 6388c8c68..f04eef157 100644 --- a/app/src/main/java/exh/md/similar/SimilarUpdateService.kt +++ b/app/src/main/java/exh/md/similar/SimilarUpdateService.kt @@ -10,7 +10,6 @@ import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat import androidx.core.content.ContextCompat import androidx.core.text.isDigitsOnly -import com.elvishew.xlog.XLog import com.squareup.moshi.JsonReader import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.database.DatabaseHelper @@ -23,6 +22,7 @@ import eu.kanade.tachiyomi.util.lang.withIOContext import eu.kanade.tachiyomi.util.system.acquireWakeLock import eu.kanade.tachiyomi.util.system.isServiceRunning import eu.kanade.tachiyomi.util.system.notificationManager +import exh.log.xLogE import exh.md.similar.sql.models.MangaSimilarImpl import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope @@ -135,7 +135,7 @@ class SimilarUpdateService( // Unsubscribe from any previous subscription if needed. job?.cancel() val handler = CoroutineExceptionHandler { _, exception -> - XLog.tag("SimilarUpdateService").enableStackTrace(2).e(exception) + xLogE(exception) stopSelf(startId) showResultNotification(true) cancelProgressNotification() diff --git a/app/src/main/java/exh/uconfig/ConfiguringDialogController.kt b/app/src/main/java/exh/uconfig/ConfiguringDialogController.kt index 89c1d37b2..065c975b4 100644 --- a/app/src/main/java/exh/uconfig/ConfiguringDialogController.kt +++ b/app/src/main/java/exh/uconfig/ConfiguringDialogController.kt @@ -4,12 +4,12 @@ import android.app.Dialog import android.os.Bundle import android.view.View import com.afollestad.materialdialogs.MaterialDialog -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.lang.launchUI import eu.kanade.tachiyomi.util.system.toast +import exh.log.xLogE import kotlinx.coroutines.MainScope import kotlinx.coroutines.cancel @@ -35,7 +35,7 @@ class ConfiguringDialogController : DialogController() { .show() } } - XLog.tag("ConfiguringDialogController").enableStackTrace(2).e("Configuration error!", e) + xLogE("Configuration error!", e) } launchUI { finish() diff --git a/app/src/main/java/exh/uconfig/EHConfigurator.kt b/app/src/main/java/exh/uconfig/EHConfigurator.kt index d2d2a7159..a26d12a89 100644 --- a/app/src/main/java/exh/uconfig/EHConfigurator.kt +++ b/app/src/main/java/exh/uconfig/EHConfigurator.kt @@ -1,7 +1,6 @@ package exh.uconfig import android.content.Context -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.network.await @@ -9,6 +8,7 @@ import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.online.all.EHentai import eu.kanade.tachiyomi.util.asJsoup import exh.log.maybeInjectEHLogger +import exh.log.xLogD import exh.source.EH_SOURCE_ID import exh.source.EXH_SOURCE_ID import okhttp3.FormBody @@ -81,7 +81,7 @@ class EHConfigurator(val context: Context) { } } - XLog.tag("EHConfigurator").d("Hath perks: $hathPerks") + xLogD("Hath perks: %s", hathPerks.toString()) configure(ehSource, hathPerks) configure(exhSource, hathPerks) diff --git a/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt b/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt index 85c22e388..7adad3a19 100644 --- a/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt +++ b/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt @@ -1,7 +1,6 @@ package exh.ui.batchadd import android.content.Context -import com.elvishew.xlog.XLog import com.jakewharton.rxrelay.BehaviorRelay import com.jakewharton.rxrelay.ReplayRelay import eu.kanade.tachiyomi.R @@ -10,6 +9,7 @@ import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter import eu.kanade.tachiyomi.util.lang.withIOContext import exh.GalleryAddEvent import exh.GalleryAdder +import exh.log.xLogE import exh.util.trimOrNull import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.Dispatchers @@ -56,7 +56,7 @@ class BatchAddPresenter : BasePresenter() { currentlyAddingRelay.call(STATE_INPUT_TO_PROGRESS) val handler = CoroutineExceptionHandler { _, throwable -> - XLog.tag("BatchAddPresenter").enableStackTrace(2).e(throwable) + xLogE(throwable) } presenterScope.launch(Dispatchers.IO + handler) { diff --git a/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt b/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt index 89eec3b19..ea7508ce3 100644 --- a/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt +++ b/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt @@ -12,7 +12,6 @@ import android.webkit.WebChromeClient import android.webkit.WebView import androidx.appcompat.app.AppCompatActivity import com.afollestad.materialdialogs.MaterialDialog -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.databinding.EhActivityCaptchaBinding @@ -23,6 +22,8 @@ import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.online.HttpSource import eu.kanade.tachiyomi.util.lang.withUIContext import eu.kanade.tachiyomi.util.system.setDefaultSettings +import exh.log.xLogD +import exh.log.xLogE import exh.source.DelegatedHttpSource import exh.util.melt import kotlinx.coroutines.runBlocking @@ -186,7 +187,7 @@ class BrowserActionActivity : AppCompatActivity() { suspend fun captchaSolveFail() { currentLoopId = null validateCurrentLoopId = null - XLog.tag("BrowserActionActivity").enableStackTrace(2).e(IllegalStateException("Captcha solve failure!")) + xLogE(IllegalStateException("Captcha solve failure!")) withUIContext { binding.webview.evaluateJavascript(SOLVE_UI_SCRIPT_HIDE, null) MaterialDialog(this@BrowserActionActivity) @@ -230,7 +231,7 @@ class BrowserActionActivity : AppCompatActivity() { val ih = splitResult[3] val x = binding.webview.x + origX / iw * binding.webview.width val y = binding.webview.y + origY / ih * binding.webview.height - XLog.tag("BrowserActionActivity").d("Found audio button coords: %f %f", x, y) + xLogD("Found audio button coords: %f %f", x, y) simulateClick(x + 50, y + 50) binding.webview.post { doStageDownloadAudio(loopId) @@ -246,12 +247,12 @@ class BrowserActionActivity : AppCompatActivity() { } STAGE_DOWNLOAD_AUDIO -> { if (result != null) { - XLog.tag("BrowserActionActivity").d("Got audio URL: $result") + xLogD("Got audio URL: $result") performRecognize(result) .observeOn(Schedulers.io()) .subscribe( { - XLog.tag("BrowserActionActivity").d("Got audio transcript: $it") + xLogD("Got audio transcript: $it") binding.webview.post { typeResult( loopId, @@ -464,7 +465,7 @@ class BrowserActionActivity : AppCompatActivity() { if (loopId != validateCurrentLoopId) return if (result) { - XLog.tag("BrowserActionActivity").d("Captcha solved!") + xLogD("Captcha solved!") binding.webview.post { binding.webview.evaluateJavascript(SOLVE_UI_SCRIPT_HIDE, null) } diff --git a/app/src/main/java/exh/ui/login/LoginController.kt b/app/src/main/java/exh/ui/login/LoginController.kt index 97f55e8a8..5f4c151d7 100755 --- a/app/src/main/java/exh/ui/login/LoginController.kt +++ b/app/src/main/java/exh/ui/login/LoginController.kt @@ -8,13 +8,13 @@ import android.webkit.CookieManager import android.webkit.WebView import android.webkit.WebViewClient import androidx.core.view.isVisible -import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.databinding.EhActivityLoginBinding import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.ui.base.controller.NucleusController import eu.kanade.tachiyomi.util.lang.launchUI import eu.kanade.tachiyomi.util.system.setDefaultSettings +import exh.log.xLogD import exh.uconfig.WarnConfigureDialogController import uy.kohesive.injekt.injectLazy import java.net.HttpCookie @@ -91,7 +91,7 @@ class LoginController : NucleusController Unit): Response { block(parsed) } catch (t: Throwable) { // Ignore all errors - XLog.tag("Response.interceptAsHtml").enableStackTrace(2).w("Interception error!", t) + xLogW("Interception error!", t) } finally { close() }