Improve logging

This commit is contained in:
NerdNumber9 2019-04-14 10:09:43 -04:00
parent 5e13df9bd8
commit 863e349711
8 changed files with 121 additions and 9 deletions

View File

@ -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<Track>): Observable<Manga> {
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())
}

View File

@ -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

View File

@ -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> {
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 }
}

View File

@ -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()

View File

@ -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<ChaptersPresenter>(),
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) {

View File

@ -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<MangaInfoPresenter>(),
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)
}
/**

View File

@ -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)
}
}
/**

View File

@ -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 }
}