From 863e349711b601f6f90793888c96124144f7b03e Mon Sep 17 00:00:00 2001 From: NerdNumber9 Date: Sun, 14 Apr 2019 10:09:43 -0400 Subject: [PATCH] Improve logging --- .../data/backup/BackupRestoreService.kt | 23 +++++++++++++- .../tachiyomi/data/download/Downloader.kt | 20 ++++++++++++ .../source/online/HttpSourceFetcher.kt | 14 ++++++++- .../browse/BrowseCatalogueController.kt | 7 ++++- .../ui/manga/chapter/ChaptersController.kt | 8 +++++ .../ui/manga/info/MangaInfoController.kt | 12 +++++-- .../ui/reader/loader/ChapterLoader.kt | 15 ++++++++- .../ui/reader/loader/HttpPageLoader.kt | 31 +++++++++++++++++-- 8 files changed, 121 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt index db6866e28..8ee9ab60d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/BackupRestoreService.kt @@ -6,6 +6,7 @@ import android.content.Intent import android.net.Uri import android.os.IBinder import android.os.PowerManager +import com.elvishew.xlog.XLog import com.github.salomonbrys.kotson.fromJson import com.google.gson.JsonArray import com.google.gson.JsonParser @@ -249,7 +250,10 @@ class BackupRestoreService : Service() { } .doOnError { error -> - Timber.e(error) + // [EXH] + XLog.w("> Failed to perform restore!", error) + XLog.w("> (uri: %s)", uri) + writeErrorLog() val errorIntent = Intent(BackupConst.INTENT_FILTER).apply { putExtra(BackupConst.ACTION, BackupConst.ACTION_ERROR_RESTORE_DIALOG) @@ -322,6 +326,14 @@ class BackupRestoreService : Service() { tracks: List): Observable { return backupManager.restoreMangaFetchObservable(source, manga) .onErrorReturn { + // [EXH] + XLog.w("> Failed to restore manga!", it) + XLog.w("> (source.id: %s, source.name: %s, manga.id: %s, manga.url: %s)", + source.id, + source.name, + manga.id, + manga.url) + errors.add(Date() to "${manga.title} - ${it.message}") manga } @@ -394,6 +406,15 @@ class BackupRestoreService : Service() { return backupManager.restoreChapterFetchObservable(source, manga, chapters) // If there's any error, return empty update and continue. .onErrorReturn { + // [EXH] + XLog.w("> Failed to restore chapter!", it) + XLog.w("> (source.id: %s, source.name: %s, manga.id: %s, manga.url: %s, chapters.size: %s)", + source.id, + source.name, + manga.id, + manga.url, + chapters.size) + errors.add(Date() to "${manga.title} - ${it.message}") Pair(emptyList(), emptyList()) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt index f49585bc2..6cf691cc4 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/download/Downloader.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.data.download import android.content.Context import android.webkit.MimeTypeMap +import com.elvishew.xlog.XLog import com.hippo.unifile.UniFile import com.jakewharton.rxrelay.BehaviorRelay import com.jakewharton.rxrelay.PublishRelay @@ -284,6 +285,16 @@ class Downloader( .doOnNext { ensureSuccessfulDownload(download, mangaDir, tmpDir, chapterDirname) } // If the page list threw, it will resume here .onErrorReturn { error -> + // [EXH] + XLog.w("> Download error!", error) + XLog.w("> (source.id: %s, source.name: %s, manga.id: %s, manga.url: %s, chapter.id: %s, chapter.url: %s)", + download.source.id, + download.source.name, + download.manga.id, + download.manga.url, + download.chapter.id, + download.chapter.url) + download.status = Download.ERROR notifier.onError(error.message, download.chapter.name) download @@ -355,6 +366,15 @@ class Downloader( val extension = getImageExtension(response, file) file.renameTo("$filename.$extension") } catch (e: Exception) { + // [EXH] + XLog.w("> Failed to fetch image!", e) + XLog.w("> (source.id: %s, source.name: %s, page.index: %s, page.url: %s, page.imageUrl: %s)", + source.id, + source.name, + page.index, + page.url, + page.imageUrl) + response.close() file.delete() throw e diff --git a/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSourceFetcher.kt b/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSourceFetcher.kt index e69581df3..07a3c4ca8 100755 --- a/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSourceFetcher.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/source/online/HttpSourceFetcher.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.source.online +import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.source.model.Page import rx.Observable @@ -7,7 +8,18 @@ fun HttpSource.getImageUrl(page: Page): Observable { page.status = Page.LOAD_PAGE return fetchImageUrl(page) .doOnError { page.status = Page.ERROR } - .onErrorReturn { null } + .onErrorReturn { + // [EXH] + XLog.w("> Failed to fetch image URL!", it) + XLog.w("> (source.id: %s, source.name: %s, page.index: %s, page.url: %s, page.imageUrl: %s)", + id, + name, + page.index, + page.url, + page.imageUrl) + + null + } .doOnNext { page.imageUrl = it } .map { page } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt index 82672cf6e..b7bac70c8 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/catalogue/browse/BrowseCatalogueController.kt @@ -7,6 +7,7 @@ import android.support.v4.widget.DrawerLayout import android.support.v7.widget.* import android.view.* import com.afollestad.materialdialogs.MaterialDialog +import com.elvishew.xlog.XLog import com.f2prateek.rx.preferences.Preference import com.jakewharton.rxbinding.support.v7.widget.queryTextChangeEvents import eu.davidea.flexibleadapter.FlexibleAdapter @@ -401,7 +402,11 @@ open class BrowseCatalogueController(bundle: Bundle) : * @param error the error received. */ fun onAddPageError(error: Throwable) { - Timber.e(error) + XLog.w("> Failed to load next catalogue page!", error) + XLog.w("> (source.id: %s, source.name: %s)", + presenter.source.id, + presenter.source.name) + val adapter = adapter ?: return adapter.onLoadMoreComplete(null) hideProgressBar() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt index 5ce540035..9b721857d 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChaptersController.kt @@ -11,6 +11,7 @@ import android.support.v7.view.ActionMode import android.support.v7.widget.DividerItemDecoration import android.support.v7.widget.LinearLayoutManager import android.view.* +import com.elvishew.xlog.XLog import com.jakewharton.rxbinding.support.v4.widget.refreshes import com.jakewharton.rxbinding.view.clicks import eu.davidea.flexibleadapter.FlexibleAdapter @@ -223,6 +224,13 @@ class ChaptersController : NucleusController(), fun onFetchChaptersError(error: Throwable) { swipe_refresh?.isRefreshing = false activity?.toast(error.message) + // [EXH] + XLog.w("> Failed to fetch chapters!", error) + XLog.w("> (source.id: %s, source.name: %s, manga.id: %s, manga.url: %s)", + presenter.source.id, + presenter.source.name, + presenter.manga.id, + presenter.manga.url) } fun onChapterStatusChange(download: Download) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt index afde6df72..5f00f7ac1 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaInfoController.kt @@ -22,6 +22,7 @@ import com.bumptech.glide.load.engine.DiskCacheStrategy import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.request.target.SimpleTarget import com.bumptech.glide.request.transition.Transition +import com.elvishew.xlog.XLog import com.jakewharton.rxbinding.support.v4.widget.refreshes import com.jakewharton.rxbinding.view.clicks import com.jakewharton.rxbinding.view.longClicks @@ -402,9 +403,14 @@ class MangaInfoController : NucleusController(), fun onFetchMangaError(error: Throwable) { setRefreshing(false) activity?.toast(error.message) - // EXH --> - Timber.e(error, "Failed to fetch manga details!") - // EXH <-- + + // [EXH] + XLog.w("> Failed to fetch manga details!", error) + XLog.w("> (source.id: %s, source.name: %s, manga.id: %s, manga.url: %s)", + presenter.source.id, + presenter.source.name, + presenter.manga.id, + presenter.manga.url) } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt index fb0d663f2..10f008e66 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/ChapterLoader.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.ui.reader.loader +import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.preference.getOrDefault @@ -62,7 +63,19 @@ class ChapterLoader( } } .toCompletable() - .doOnError { chapter.state = ReaderChapter.State.Error(it) } + .doOnError { + // [EXH] + XLog.w("> Failed to fetch page list!", it) + XLog.w("> (source.id: %s, source.name: %s, manga.id: %s, manga.url: %s, chapter.id: %s, chapter.url: %s)", + source.id, + source.name, + manga.id, + manga.url, + chapter.chapter.id, + chapter.chapter.url) + + chapter.state = ReaderChapter.State.Error(it) + } } /** diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt index a53723ac3..2a545c08e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/loader/HttpPageLoader.kt @@ -1,5 +1,6 @@ package eu.kanade.tachiyomi.ui.reader.loader +import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.data.cache.ChapterCache import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault @@ -203,7 +204,20 @@ class HttpPageLoader( page.status = Page.LOAD_PAGE return fetchImageUrl(page) .doOnError { page.status = Page.ERROR } - .onErrorReturn { null } + .onErrorReturn { + // [EXH] + XLog.w("> Failed to fetch image URL!", it) + XLog.w("> (source.id: %s, source.name: %s, page.index: %s, page.url: %s, page.imageUrl: %s, chapter.id: %s, chapter.url: %s)", + source.id, + source.name, + page.index, + page.url, + page.imageUrl, + page.chapter.chapter.id, + page.chapter.chapter.url) + + null + } .doOnNext { page.imageUrl = it } .map { page } } @@ -229,7 +243,20 @@ class HttpPageLoader( page.stream = { chapterCache.getImageFile(imageUrl).inputStream() } page.status = Page.READY } - .doOnError { page.status = Page.ERROR } + .doOnError { + // [EXH] + XLog.w("> Failed to fetch image!", it) + XLog.w("> (source.id: %s, source.name: %s, page.index: %s, page.url: %s, page.imageUrl: %s, chapter.id: %s, chapter.url: %s)", + source.id, + source.name, + page.index, + page.url, + page.imageUrl, + page.chapter.chapter.id, + page.chapter.chapter.url) + + page.status = Page.ERROR + } .onErrorReturn { page } }