From 643aa377bf757ecc104c3285f93537a339f1f273 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Wed, 25 Nov 2020 15:57:05 -0500 Subject: [PATCH] Update XLog --- app/build.gradle | 2 +- app/src/main/java/eu/kanade/tachiyomi/App.kt | 16 ++++++------ .../data/library/LibraryUpdateService.kt | 2 +- .../tachiyomi/extension/ExtensionManager.kt | 6 ++--- .../kanade/tachiyomi/source/SourceManager.kt | 4 +-- .../tachiyomi/source/online/MetadataSource.kt | 17 +------------ .../tachiyomi/source/online/all/EHentai.kt | 11 ++++---- .../source/online/all/MergedSource.kt | 2 +- .../source/browse/BrowseSourceController.kt | 4 +-- .../ui/browse/source/filter/AutoComplete.kt | 2 +- .../biometric/BiometricTimesCreateDialog.kt | 4 +-- .../biometric/BiometricTimesPresenter.kt | 4 +-- .../merged/EditMergedSettingsHeaderAdapter.kt | 2 +- app/src/main/java/exh/EXHMigrations.kt | 2 +- app/src/main/java/exh/GalleryAdder.kt | 14 ++++++----- app/src/main/java/exh/debug/DebugFunctions.kt | 9 ++++--- .../java/exh/eh/MemAutoFlushingLookupTable.kt | 2 +- app/src/main/java/exh/log/EHNetworkLogging.kt | 4 +-- .../main/java/exh/log/EnhancedFilePrinter.kt | 25 ++++++++++--------- .../java/exh/md/handlers/ApiMangaParser.kt | 4 +-- .../java/exh/md/handlers/FollowsHandler.kt | 6 ++--- .../main/java/exh/md/handlers/MangaHandler.kt | 2 +- .../exh/md/similar/SimilarUpdateService.kt | 2 +- .../uconfig/ConfiguringDialogController.kt | 2 +- .../main/java/exh/uconfig/EHConfigurator.kt | 2 +- .../java/exh/ui/batchadd/BatchAddPresenter.kt | 2 +- .../exh/ui/captcha/BrowserActionActivity.kt | 10 ++++---- .../main/java/exh/ui/login/LoginController.kt | 2 +- .../exh/ui/metadata/MetadataViewPresenter.kt | 2 +- app/src/main/java/exh/util/OkHttpUtil.kt | 2 +- 30 files changed, 79 insertions(+), 89 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 20679bf53..000fe6b2e 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -315,7 +315,7 @@ dependencies { implementation 'com.google.firebase:firebase-crashlytics-ktx:17.3.0' // Better logging (EH) - implementation 'com.elvishew:xlog:1.6.1' + implementation 'com.elvishew:xlog:1.7.1' // Debug utils (EH) final def debug_overlay_version = '1.1.3' diff --git a/app/src/main/java/eu/kanade/tachiyomi/App.kt b/app/src/main/java/eu/kanade/tachiyomi/App.kt index 197059ff6..4e0fb8b2e 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/App.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/App.kt @@ -115,15 +115,15 @@ open class App : Application(), LifecycleObserver { try { SSLContext.getInstance("TLSv1.2") } catch (e: NoSuchAlgorithmException) { - XLog.e("Could not install Android 7 broken SSL workaround!", e) + XLog.tag("Init").e("Could not install Android 7 broken SSL workaround!", e) } try { ProviderInstaller.installIfNeeded(applicationContext) } catch (e: GooglePlayServicesRepairableException) { - XLog.e("Could not install Android 7 broken SSL workaround!", e) + XLog.tag("Init").e("Could not install Android 7 broken SSL workaround!", e) } catch (e: GooglePlayServicesNotAvailableException) { - XLog.e("Could not install Android 7 broken SSL workaround!", e) + XLog.tag("Init").e("Could not install Android 7 broken SSL workaround!", e) } } } @@ -183,8 +183,8 @@ open class App : Application(), LifecycleObserver { val logConfig = LogConfiguration.Builder() .logLevel(logLevel) - .st(2) - .nb() + .disableStackTrace() + .disableBorder() .build() val printers = mutableListOf(AndroidPrinter()) @@ -227,8 +227,8 @@ open class App : Application(), LifecycleObserver { *printers.toTypedArray() ) - XLog.d("Application booting...") - XLog.nst().d( + XLog.tag("Init").d("Application booting...") + XLog.tag("Init").disableStackTrace().d( "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" + @@ -253,7 +253,7 @@ open class App : Application(), LifecycleObserver { .install() } catch (e: IllegalStateException) { // Crashes if app is in background - XLog.e("Failed to initialize debug overlay, app in background?", e) + XLog.tag("Init").e("Failed to initialize debug overlay, app in background?", e) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt index 4876e2dee..85654239f 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt @@ -462,7 +462,7 @@ class LibraryUpdateService( db.insertTrack(track).executeAsBlocking() } } catch (e: Exception) { - XLog.e(e) + XLog.tag("LibraryUpdateService").e(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 38178253d..639fb8923 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/extension/ExtensionManager.kt @@ -158,7 +158,7 @@ class ExtensionManager( val blacklistEnabled = preferences.eh_enableSourceBlacklist().get() return filter { if (it.isBlacklisted(blacklistEnabled)) { - XLog.d("[EXH] Removing blacklisted extension: (name: %s, pkgName: %s)!", it.name, it.pkgName) + XLog.tag("ExtensionManager").d("Removing blacklisted extension: (name: %s, pkgName: %s)!", it.name, it.pkgName) false } else true } @@ -336,7 +336,7 @@ class ExtensionManager( private fun registerNewExtension(extension: Extension.Installed) { // SY --> if (extension.isBlacklisted()) { - XLog.d("[EXH] Removing blacklisted extension: (name: String, pkgName: %s)!", extension.name, extension.pkgName) + XLog.tag("ExtensionManager").d("Removing blacklisted extension: (name: String, pkgName: %s)!", extension.name, extension.pkgName) return } // SY <-- @@ -354,7 +354,7 @@ class ExtensionManager( private fun registerUpdatedExtension(extension: Extension.Installed) { // SY --> if (extension.isBlacklisted()) { - XLog.d("[EXH] Removing blacklisted extension: (name: String, pkgName: %s)!", extension.name, extension.pkgName) + XLog.tag("ExtensionManager").d("Removing blacklisted extension: (name: String, 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 8621a5888..8e56ec3d7 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/SourceManager.kt @@ -114,7 +114,7 @@ open class SourceManager(private val context: Context) { } else DELEGATED_SOURCES[sourceQName] } else null val newSource = if (source is HttpSource && delegate != null) { - XLog.d("[EXH] Delegating source: %s -> %s!", sourceQName, delegate.newSourceClass.qualifiedName) + XLog.tag("SourceManager").d("Delegating source: %s -> %s!", sourceQName, delegate.newSourceClass.qualifiedName) val enhancedSource = EnhancedHttpSource( source, delegate.newSourceClass.constructors.find { it.parameters.size == 2 }!!.call(source, context) @@ -125,7 +125,7 @@ open class SourceManager(private val context: Context) { } else source if (source.id in BlacklistedSources.BLACKLISTED_EXT_SOURCES) { - XLog.d("[EXH] Removing blacklisted source: (id: %s, name: %s, lang: %s)!", source.id, source.name, (source as? CatalogueSource)?.lang) + XLog.tag("SourceManager").d("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/MetadataSource.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/MetadataSource.kt index eb4ac72c9..767603132 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/MetadataSource.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/MetadataSource.kt @@ -5,14 +5,12 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.source.CatalogueSource -import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.model.SChapter import eu.kanade.tachiyomi.source.model.SManga import eu.kanade.tachiyomi.ui.manga.MangaController import exh.metadata.metadata.base.RaisedSearchMetadata import exh.metadata.metadata.base.getFlatMetadataForManga import exh.metadata.metadata.base.insertFlatMetadata -import exh.source.EnhancedHttpSource import rx.Completable import rx.Single import uy.kohesive.injekt.Injekt @@ -49,7 +47,7 @@ interface MetadataSource : CatalogueSource { * Will also save the metadata to the DB if possible */ fun parseToManga(manga: SManga, input: I): Completable { - val mangaId = (manga as? Manga)?.id + val mangaId = manga.id val metaObservable = if (mangaId != null) { // We have to use fromCallable because StorIO messes up the thread scheduling if we use their rx functions Single.fromCallable { @@ -109,17 +107,4 @@ interface MetadataSource : CatalogueSource { val SManga.id get() = (this as? Manga)?.id val SChapter.mangaId get() = (this as? Chapter)?.manga_id - - companion object { - fun Source.isMetadataSource() = (this is MetadataSource<*, *> || (this is EnhancedHttpSource && this.enhancedSource is MetadataSource<*, *>)) - - fun Source.getMetadataSource(): MetadataSource<*, *>? { - return when { - !this.isMetadataSource() -> null - this is MetadataSource<*, *> -> this - this is EnhancedHttpSource && this.enhancedSource is MetadataSource<*, *> -> this.enhancedSource - else -> null - } - } - } } 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 4b1b20130..1095c2df8 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 @@ -2,6 +2,7 @@ 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.annoations.Nsfw import eu.kanade.tachiyomi.data.database.models.Manga @@ -313,7 +314,7 @@ class EHentai( url = EHentaiSearchMetadata.normalizeUrl(parentLink) } else break } else { - XLog.d("Parent cache hit: %s!", gid) + XLog.tag("EHentai").d("Parent cache hit: %s!", gid) url = EHentaiSearchMetadata.idAndTokenToUrl( cachedParent.gId, cachedParent.gToken @@ -412,7 +413,7 @@ class EHentai( } private fun searchMangaRequestObservable(page: Int, query: String, filters: FilterList): Observable { - val uri = Uri.parse("$baseUrl$QUERY_PREFIX").buildUpon() + val uri = "$baseUrl$QUERY_PREFIX".toUri().buildUpon() uri.appendQueryParameter("f_search", (query + " " + combineQuery(filters)).trim()) filters.forEach { @@ -576,7 +577,7 @@ class EHentai( lastUpdateCheck - datePosted!! > EHentaiUpdateWorkerConstants.GALLERY_AGE_TIME ) { aged = true - XLog.d("aged %s - too old", title) + XLog.tag("EHentai").d("aged %s - too old", title) } // Parse ratings @@ -723,7 +724,7 @@ class EHentai( // Headers override fun headersBuilder() = super.headersBuilder().add("Cookie", cookiesHeader()) - private fun addParam(url: String, param: String, value: String) = Uri.parse(url) + private fun addParam(url: String, param: String, value: String) = url.toUri() .buildUpon() .appendQueryParameter(param, value) .toString() @@ -842,7 +843,7 @@ class EHentai( stringBuilder.append(" ") } - XLog.d(stringBuilder.toString()) + XLog.tag("EHentai").d(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 acf971b71..85fb4c1f5 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 @@ -179,7 +179,7 @@ class MergedSource : SuspendHttpSource() { reference.mangaId = manga.id db.insertNewMergedMangaId(reference).await() } catch (e: Exception) { - XLog.st(e.stackTrace.contentToString(), 5) + XLog.tag("MergedSource").enableStackTrace(e.stackTrace.contentToString(), 5) } } return LoadedMangaSource(source, manga, reference) 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 601339f09..d4bc08770 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 @@ -538,8 +538,8 @@ open class BrowseSourceController(bundle: Bundle) : */ /* SY --> */ open /* SY <-- */fun onAddPageError(error: Throwable) { // SY --> - XLog.w("> Failed to load next catalogue page!", error) - XLog.w( + XLog.tag("BrowseSourceController").enableStackTrace(2).w("> Failed to load next catalogue page!", error) + XLog.tag("BrowseSourceController").enableStackTrace(2).w( "> (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 4fd9b6bff..82758e204 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 @@ -97,7 +97,7 @@ open class AutoComplete(val filter: Filter.AutoComplete) : AbstractFlexibleItem< addChipToGroup(name, holder) filter.state += name } else { - XLog.d("Invalid tag: $name") + XLog.tag("AutoComplete").d("Invalid tag: $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 23022c518..9300d555c 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 @@ -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.nst().d(hour) + XLog.disableStackTrace().d(hour) val minute = datetime.get(Calendar.MINUTE) - XLog.nst().d(minute) + XLog.disableStackTrace().d(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 c669bcef2..25aa92331 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 @@ -41,7 +41,7 @@ class BiometricTimesPresenter : BasePresenter() { preferences.biometricTimeRanges().asFlow().onEach { prefTimeRanges -> timeRanges = prefTimeRanges.toList() - .mapNotNull { TimeRange.fromPreferenceString(it) }.onEach { XLog.nst().d(it) } + .mapNotNull { TimeRange.fromPreferenceString(it) }.onEach { XLog.disableStackTrace().d(it) } Observable.just(timeRanges) .map { it.map(::BiometricTimesItem) } @@ -62,7 +62,7 @@ class BiometricTimesPresenter : BasePresenter() { return } - XLog.nst().d(timeRange) + XLog.disableStackTrace().d(timeRange) preferences.biometricTimeRanges() += timeRange.toPreferenceString() } 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 bcb55a9e0..f66ed42bf 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 @@ -74,7 +74,7 @@ class EditMergedSettingsHeaderAdapter(private val controller: EditMergedSettings 3 -> MergedMangaReference.CHAPTER_SORT_HIGHEST_CHAPTER_NUMBER else -> MergedMangaReference.CHAPTER_SORT_NO_DEDUPE } - XLog.nst().d(controller.mergeReference?.chapterSortMode) + XLog.d(controller.mergeReference?.chapterSortMode) editMergedMangaItemSortingListener.onSetPrioritySort(canMove()) } diff --git a/app/src/main/java/exh/EXHMigrations.kt b/app/src/main/java/exh/EXHMigrations.kt index 38a7fbd44..f84026b91 100644 --- a/app/src/main/java/exh/EXHMigrations.kt +++ b/app/src/main/java/exh/EXHMigrations.kt @@ -319,7 +319,7 @@ object EXHMigrations { try { dbLocation.copyTo(backupLocation, overwrite = true) } catch (t: Throwable) { - XLog.w("Failed to backup database!") + logger.enableStackTrace(2).w("Failed to backup database!") } } diff --git a/app/src/main/java/exh/GalleryAdder.kt b/app/src/main/java/exh/GalleryAdder.kt index 5cf4fae26..65493e0e5 100755 --- a/app/src/main/java/exh/GalleryAdder.kt +++ b/app/src/main/java/exh/GalleryAdder.kt @@ -22,6 +22,8 @@ class GalleryAdder { private val sourceManager: SourceManager by injectLazy() + private val logger = XLog.tag("GalleryAdder").enableStackTrace(2).build() + fun pickSource(url: String): List { val uri = url.toUri() return sourceManager.getVisibleCatalogueSources() @@ -43,7 +45,7 @@ class GalleryAdder { forceSource: UrlImportableSource? = null, throttleFunc: () -> Unit = {} ): GalleryAddEvent { - XLog.d(context.getString(R.string.gallery_adder_importing_manga, url, fav.toString(), forceSource)) + logger.d(context.getString(R.string.gallery_adder_importing_manga, url, fav.toString(), forceSource)) try { val uri = url.toUri() @@ -53,7 +55,7 @@ class GalleryAdder { if (forceSource.matchesUri(uri)) forceSource else return GalleryAddEvent.Fail.UnknownType(url, context) } catch (e: Exception) { - XLog.e(context.getString(R.string.gallery_adder_source_uri_must_match), e) + logger.e(context.getString(R.string.gallery_adder_source_uri_must_match), e) return GalleryAddEvent.Fail.UnknownType(url, context) } } else { @@ -73,7 +75,7 @@ class GalleryAdder { val realUrl = try { source.mapUrlToMangaUrl(uri) } catch (e: Exception) { - XLog.e(context.getString(R.string.gallery_adder_uri_map_to_manga_error), e) + logger.e(context.getString(R.string.gallery_adder_uri_map_to_manga_error), e) null } ?: return GalleryAddEvent.Fail.UnknownType(url, context) @@ -81,7 +83,7 @@ class GalleryAdder { val cleanedUrl = try { source.cleanMangaUrl(realUrl) } catch (e: Exception) { - XLog.e(context.getString(R.string.gallery_adder_uri_clean_error), e) + logger.e(context.getString(R.string.gallery_adder_uri_clean_error), e) null } ?: return GalleryAddEvent.Fail.UnknownType(url, context) @@ -125,13 +127,13 @@ class GalleryAdder { } else emptyList() to emptyList() }.awaitSingle() } catch (e: Exception) { - XLog.w(context.getString(R.string.gallery_adder_chapter_fetch_error, manga.title), e) + logger.w(context.getString(R.string.gallery_adder_chapter_fetch_error, manga.title), e) return GalleryAddEvent.Fail.Error(url, context.getString(R.string.gallery_adder_chapter_fetch_error, url)) } return GalleryAddEvent.Success(url, manga, context) } catch (e: Exception) { - XLog.w(context.getString(R.string.gallery_adder_could_not_add_manga, url), e) + logger.w(context.getString(R.string.gallery_adder_could_not_add_manga, url), e) if (e is EHentai.GalleryNotFoundException) { return GalleryAddEvent.Fail.NotFound(url, context) diff --git a/app/src/main/java/exh/debug/DebugFunctions.kt b/app/src/main/java/exh/debug/DebugFunctions.kt index 1a49a4842..24eb1013e 100644 --- a/app/src/main/java/exh/debug/DebugFunctions.kt +++ b/app/src/main/java/exh/debug/DebugFunctions.kt @@ -30,6 +30,7 @@ import kotlinx.serialization.json.Json import uy.kohesive.injekt.injectLazy import java.lang.RuntimeException +@Suppress("unused") object DebugFunctions { val app: Application by injectLazy() val db: DatabaseHelper by injectLazy() @@ -239,7 +240,7 @@ object DebugFunctions { Json.decodeFromString(it.substringAfter(':')) } catch (t: RuntimeException) { // Load failed - XLog.e("Failed to load saved search!", t) + XLog.tag("DebugFunctions").e("Failed to load saved search!", t) t.printStackTrace() null } @@ -251,7 +252,7 @@ object DebugFunctions { Json.decodeFromString(it.substringAfter(':')) } catch (t: RuntimeException) { // Load failed - XLog.e("Failed to load saved search!", t) + XLog.tag("DebugFunctions").e("Failed to load saved search!", t) t.printStackTrace() null } @@ -278,7 +279,7 @@ object DebugFunctions { Json.decodeFromString(it.substringAfter(':')) } catch (t: RuntimeException) { // Load failed - XLog.e("Failed to load saved search!", t) + XLog.tag("DebugFunctions").e("Failed to load saved search!", t) t.printStackTrace() null } @@ -290,7 +291,7 @@ object DebugFunctions { Json.decodeFromString(it.substringAfter(':')) } catch (t: RuntimeException) { // Load failed - XLog.e("Failed to load saved search!", t) + XLog.tag("DebugFunctions").e("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 8acc30b40..aeb8d3c5e 100644 --- a/app/src/main/java/exh/eh/MemAutoFlushingLookupTable.kt +++ b/app/src/main/java/exh/eh/MemAutoFlushingLookupTable.kt @@ -93,7 +93,7 @@ class MemAutoFlushingLookupTable( } } } catch (e: FileNotFoundException) { - XLog.d("Lookup table not found!", e) + XLog.tag("MemAutoFlushingLookupTable").enableStackTrace(2).d("Lookup table not found!", e) // Ignored } diff --git a/app/src/main/java/exh/log/EHNetworkLogging.kt b/app/src/main/java/exh/log/EHNetworkLogging.kt index aaa0f14cb..5087cca7b 100644 --- a/app/src/main/java/exh/log/EHNetworkLogging.kt +++ b/app/src/main/java/exh/log/EHNetworkLogging.kt @@ -11,9 +11,9 @@ fun OkHttpClient.Builder.maybeInjectEHLogger(): OkHttpClient.Builder { val logger: HttpLoggingInterceptor.Logger = HttpLoggingInterceptor.Logger { message -> try { Json.decodeFromString(message) - XLog.tag("||EH-NETWORK-JSON").nst().json(message) + XLog.tag("||EH-NETWORK-JSON").json(message) } catch (ex: Exception) { - XLog.tag("||EH-NETWORK").nb().nst().d(message) + XLog.tag("||EH-NETWORK").disableBorder().d(message) } } return addInterceptor(HttpLoggingInterceptor(logger).apply { level = HttpLoggingInterceptor.Level.BODY }) diff --git a/app/src/main/java/exh/log/EnhancedFilePrinter.kt b/app/src/main/java/exh/log/EnhancedFilePrinter.kt index 09387dc73..64a16fe19 100644 --- a/app/src/main/java/exh/log/EnhancedFilePrinter.kt +++ b/app/src/main/java/exh/log/EnhancedFilePrinter.kt @@ -1,6 +1,5 @@ package exh.log -import com.elvishew.xlog.flattener.Flattener2 import com.elvishew.xlog.internal.DefaultsFactory import com.elvishew.xlog.printer.Printer import com.elvishew.xlog.printer.file.backup.BackupStrategy @@ -12,6 +11,7 @@ import java.io.FileWriter import java.io.IOException import java.util.concurrent.BlockingQueue import java.util.concurrent.LinkedBlockingQueue +import com.elvishew.xlog.flattener.Flattener2 as Flattener /** * Log [Printer] using file system. When print a log, it will print it to the specified file. @@ -31,7 +31,7 @@ class EnhancedFilePrinter internal constructor( private val fileNameGenerator: FileNameGenerator, private val backupStrategy: BackupStrategy, private val cleanStrategy: CleanStrategy, - private val flattener: Flattener2 + private val flattener: Flattener ) : Printer { /** * Log writer. @@ -134,7 +134,7 @@ class EnhancedFilePrinter internal constructor( /** * The flattener when print a log. */ - private var flattener: Flattener2? = null + private var flattener: Flattener? = null /** * Set the file name generator for log file. @@ -174,9 +174,8 @@ class EnhancedFilePrinter internal constructor( * * @param flattener the flattener when print a log * @return the builder - * @since 1.6.0 */ - fun flattener(flattener: Flattener2): Builder { + fun flattener(flattener: Flattener): Builder { this.flattener = flattener return this } @@ -187,11 +186,13 @@ class EnhancedFilePrinter internal constructor( * @return the built configured [EnhancedFilePrinter] object */ fun build(): EnhancedFilePrinter { - val fileNameGenerator = fileNameGenerator ?: DefaultsFactory.createFileNameGenerator() - val backupStrategy = backupStrategy ?: DefaultsFactory.createBackupStrategy() - val cleanStrategy = cleanStrategy ?: DefaultsFactory.createCleanStrategy() - val flattener = flattener ?: DefaultsFactory.createFlattener2() - return EnhancedFilePrinter(folderPath, fileNameGenerator, backupStrategy, cleanStrategy, flattener) + return EnhancedFilePrinter( + folderPath, + fileNameGenerator ?: DefaultsFactory.createFileNameGenerator(), + backupStrategy ?: DefaultsFactory.createBackupStrategy(), + cleanStrategy ?: DefaultsFactory.createCleanStrategy(), + flattener ?: DefaultsFactory.createFlattener2() + ) } } @@ -244,8 +245,8 @@ class EnhancedFilePrinter internal constructor( } override fun run() { - var log: LogItem try { + var log: LogItem while (logs.take().also { log = it } != null) { doPrintln(log.timeMillis, log.level, log.tag, log.msg) } @@ -341,7 +342,7 @@ class EnhancedFilePrinter internal constructor( */ fun appendLog(flattenedLog: String) { val bufferedWriter = bufferedWriter - require(bufferedWriter != null) + requireNotNull(bufferedWriter) try { bufferedWriter.write(flattenedLog) bufferedWriter.newLine() diff --git a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt index 0146fb94c..b29f2b119 100644 --- a/app/src/main/java/exh/md/handlers/ApiMangaParser.kt +++ b/app/src/main/java/exh/md/handlers/ApiMangaParser.kt @@ -129,7 +129,7 @@ class ApiMangaParser(private val langs: List) { if (tags.isNotEmpty()) tags.clear() tags += genres.map { RaisedTag(null, it, MangaDexSearchMetadata.TAG_TYPE_DEFAULT) } } catch (e: Exception) { - XLog.e(e) + XLog.tag("ApiMangaParser").enableStackTrace(2).e(e) throw e } } @@ -239,7 +239,7 @@ class ApiMangaParser(private val langs: List) { val jsonObject = Json.decodeFromString(body) return jsonObject["manga_id"]?.jsonPrimitive?.intOrNull ?: throw Exception("No manga associated with chapter") } catch (e: Exception) { - XLog.e(e) + XLog.tag("ApiMangaParser").enableStackTrace(2).e(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 662fc4d5c..9bb49ec42 100644 --- a/app/src/main/java/exh/md/handlers/FollowsHandler.kt +++ b/app/src/main/java/exh/md/handlers/FollowsHandler.kt @@ -51,7 +51,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere response.body?.string().orEmpty() ) } catch (e: Exception) { - XLog.e("error parsing follows", e) + XLog.tag("FollowsHandler").enableStackTrace(2).e("error parsing follows", e) FollowsPageResult() } @@ -81,7 +81,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere response.body?.string().orEmpty() ) } catch (e: Exception) { - XLog.e("error parsing follows", e) + XLog.tag("FollowsHandler").enableStackTrace(2).e("error parsing follows", e) FollowsPageResult() } val track = Track.create(TrackManager.MDLIST) @@ -158,7 +158,7 @@ class FollowsHandler(val client: OkHttpClient, val headers: Headers, val prefere val mangaID = MdUtil.getMangaId(track.tracking_url) val formBody = FormBody.Builder() .add("chapter", track.last_chapter_read.toString()) - XLog.d("chapter to update %s", track.last_chapter_read.toString()) + XLog.tag("FollowsHandler").d("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", diff --git a/app/src/main/java/exh/md/handlers/MangaHandler.kt b/app/src/main/java/exh/md/handlers/MangaHandler.kt index 01fd02490..47bfdf133 100644 --- a/app/src/main/java/exh/md/handlers/MangaHandler.kt +++ b/app/src/main/java/exh/md/handlers/MangaHandler.kt @@ -27,7 +27,7 @@ class MangaHandler(val client: OkHttpClient, val headers: Headers, val langs: Li val jsonData = withContext(Dispatchers.IO) { response.body!!.string() } if (response.code != 200) { - XLog.e("error from MangaDex with response code ${response.code} \n body: \n$jsonData") + XLog.tag("MangaHandler").enableStackTrace(2).e("error from MangaDex with response code ${response.code} \n body: \n$jsonData") throw Exception("Error from MangaDex Response code ${response.code} ") } diff --git a/app/src/main/java/exh/md/similar/SimilarUpdateService.kt b/app/src/main/java/exh/md/similar/SimilarUpdateService.kt index 4091b0da7..ad2764ab6 100644 --- a/app/src/main/java/exh/md/similar/SimilarUpdateService.kt +++ b/app/src/main/java/exh/md/similar/SimilarUpdateService.kt @@ -118,7 +118,7 @@ class SimilarUpdateService( // Unsubscribe from any previous subscription if needed. job?.cancel() val handler = CoroutineExceptionHandler { _, exception -> - XLog.e(exception) + XLog.tag("SimilarUpdateService").enableStackTrace(2).e(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 dff8663fc..a9bf08828 100644 --- a/app/src/main/java/exh/uconfig/ConfiguringDialogController.kt +++ b/app/src/main/java/exh/uconfig/ConfiguringDialogController.kt @@ -37,7 +37,7 @@ class ConfiguringDialogController : DialogController() { .show() } } - XLog.e("Configuration error!", e) + XLog.tag("ConfiguringDialogController").enableStackTrace(2).e("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 943c3d7e5..b6d26ee25 100644 --- a/app/src/main/java/exh/uconfig/EHConfigurator.kt +++ b/app/src/main/java/exh/uconfig/EHConfigurator.kt @@ -81,7 +81,7 @@ class EHConfigurator(val context: Context) { } } - XLog.nst().d("Hath perks: $hathPerks") + XLog.tag("EHConfigurator").d("Hath perks: $hathPerks") 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 c3f59c8e2..f4e5bd3d2 100644 --- a/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt +++ b/app/src/main/java/exh/ui/batchadd/BatchAddPresenter.kt @@ -59,7 +59,7 @@ class BatchAddPresenter : BasePresenter() { currentlyAddingRelay.call(STATE_INPUT_TO_PROGRESS) val handler = CoroutineExceptionHandler { _, throwable -> - XLog.e(throwable) + XLog.tag("BatchAddPresenter").enableStackTrace(2).e(throwable) } scope.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 887347345..4d80b2662 100644 --- a/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt +++ b/app/src/main/java/exh/ui/captcha/BrowserActionActivity.kt @@ -187,7 +187,7 @@ class BrowserActionActivity : AppCompatActivity() { suspend fun captchaSolveFail() { currentLoopId = null validateCurrentLoopId = null - XLog.e(IllegalStateException("Captcha solve failure!")) + XLog.tag("BrowserActionActivity").enableStackTrace(2).e(IllegalStateException("Captcha solve failure!")) withContext(Dispatchers.Main) { binding.webview.evaluateJavascript(SOLVE_UI_SCRIPT_HIDE, null) MaterialDialog(this@BrowserActionActivity) @@ -231,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.nst().d("Found audio button coords: %f %f", x, y) + XLog.tag("BrowserActionActivity").d("Found audio button coords: %f %f", x, y) simulateClick(x + 50, y + 50) binding.webview.post { doStageDownloadAudio(loopId) @@ -247,12 +247,12 @@ class BrowserActionActivity : AppCompatActivity() { } STAGE_DOWNLOAD_AUDIO -> { if (result != null) { - XLog.nst().d("Got audio URL: $result") + XLog.tag("BrowserActionActivity").d("Got audio URL: $result") performRecognize(result) .observeOn(Schedulers.io()) .subscribe( { - XLog.nst().d("Got audio transcript: $it") + XLog.tag("BrowserActionActivity").d("Got audio transcript: $it") binding.webview.post { typeResult( loopId, @@ -465,7 +465,7 @@ class BrowserActionActivity : AppCompatActivity() { if (loopId != validateCurrentLoopId) return if (result) { - XLog.nst().d("Captcha solved!") + XLog.tag("BrowserActionActivity").d("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 b95192dd1..97f55e8a8 100755 --- a/app/src/main/java/exh/ui/login/LoginController.kt +++ b/app/src/main/java/exh/ui/login/LoginController.kt @@ -91,7 +91,7 @@ class LoginController : NucleusController if (flatMetadata != null) view.onNextMetaInfo(flatMetadata) else XLog.nst().d("Invalid metadata") }) + getMangaMetaObservable().subscribeLatestCache({ view, flatMetadata -> if (flatMetadata != null) view.onNextMetaInfo(flatMetadata) else XLog.tag("MetadataViewPresenter").disableStackTrace().d("Invalid metadata") }) getMangaObservable() .observeOn(AndroidSchedulers.mainThread()) diff --git a/app/src/main/java/exh/util/OkHttpUtil.kt b/app/src/main/java/exh/util/OkHttpUtil.kt index d1cbd22f9..ee4b55cbe 100644 --- a/app/src/main/java/exh/util/OkHttpUtil.kt +++ b/app/src/main/java/exh/util/OkHttpUtil.kt @@ -21,7 +21,7 @@ fun Response.interceptAsHtml(block: (Document) -> Unit): Response { block(parsed) } catch (t: Throwable) { // Ignore all errors - XLog.w("Interception error!", t) + XLog.tag("Response.interceptAsHtml").enableStackTrace(2).w("Interception error!", t) } finally { close() }