From 284a4561849b55d2194c11c10c40cb8fe4f1bd32 Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Thu, 28 Jan 2021 15:04:17 -0500 Subject: [PATCH] Handle failures in the library updater --- .../data/library/LibraryUpdateService.kt | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) 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 3d0c3d972..1b9b84376 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 @@ -6,6 +6,7 @@ import android.content.Intent import android.os.IBinder import android.os.PowerManager import androidx.core.content.ContextCompat +import com.elvishew.xlog.XLog import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.database.DatabaseHelper @@ -32,7 +33,6 @@ import eu.kanade.tachiyomi.ui.library.LibraryGroup import eu.kanade.tachiyomi.ui.manga.track.TrackItem import eu.kanade.tachiyomi.util.chapter.NoChaptersException import eu.kanade.tachiyomi.util.chapter.syncChaptersWithSource -import eu.kanade.tachiyomi.util.lang.launchIO import eu.kanade.tachiyomi.util.prepUpdateCover import eu.kanade.tachiyomi.util.shouldDownloadNewChapters import eu.kanade.tachiyomi.util.storage.getUriCompat @@ -52,7 +52,6 @@ import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.async @@ -408,6 +407,10 @@ class LibraryUpdateService( downloadManager.downloadChapters(manga, /* SY --> */ chapters.filter { it.manga_id !in chapterFilter } /* SY <-- */, false) } + val handler = CoroutineExceptionHandler { _, throwable -> + XLog.e(throwable) + } + /** * Updates the chapters for the given manga and adds them to the database. * @@ -419,27 +422,22 @@ class LibraryUpdateService( // Update manga details metadata in the background if (preferences.autoUpdateMetadata()) { - GlobalScope.launchIO { - try { - val updatedManga = source.getMangaDetails(manga.toMangaInfo()) - val sManga = updatedManga.toSManga() - // Avoid "losing" existing cover - if (!sManga.thumbnail_url.isNullOrEmpty()) { - manga.prepUpdateCover(coverCache, sManga, false) - } else { - sManga.thumbnail_url = manga.thumbnail_url - } - - manga.copyFrom(sManga) - db.insertManga(manga).executeAsBlocking() - } catch (e: Throwable) { - // Ignore errors and continue - Timber.e(e) + ioScope.launch(handler) { + val updatedManga = source.getMangaDetails(manga.toMangaInfo()) + val sManga = updatedManga.toSManga() + // Avoid "losing" existing cover + if (!sManga.thumbnail_url.isNullOrEmpty()) { + manga.prepUpdateCover(coverCache, sManga, false) + } else { + sManga.thumbnail_url = manga.thumbnail_url } + + manga.copyFrom(sManga) + db.insertManga(manga).executeAsBlocking() } } - ioScope.launchIO { + ioScope.launch(handler) { if (source is MangaDex && trackManager.mdList.isLogged) { val tracks = db.getTracks(manga).executeOnIO() if (tracks.isEmpty() || tracks.none { it.sync_id == TrackManager.MDLIST }) {