From 4f50fcadebc5bd6da6d746c3340614531e5c2f59 Mon Sep 17 00:00:00 2001 From: arkon Date: Wed, 27 Jan 2021 17:43:26 -0500 Subject: [PATCH] Ignore failures when updating metadata as part of library update (cherry picked from commit 58860b51a211522e39a66dab1c9a3c3473824e64) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/data/library/LibraryUpdateService.kt --- .../data/library/LibraryUpdateService.kt | 56 ++++++++++--------- 1 file changed, 30 insertions(+), 26 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 8c73e0e39..3d0c3d972 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 @@ -49,6 +49,7 @@ import exh.source.mangaDexSourceIds import exh.util.executeOnIO import exh.util.nullIfBlank import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope @@ -227,24 +228,22 @@ class LibraryUpdateService( val mangaList = getMangaToUpdate(intent, target) .sortedWith(rankingScheme[selectedScheme]) - updateJob = ioScope.launch { - try { - when (target) { - Target.CHAPTERS -> updateChapterList(mangaList) - Target.COVERS -> updateCovers(mangaList) - Target.TRACKING -> updateTrackings(mangaList) - // SY --> - Target.SYNC_FOLLOWS -> syncFollows() - Target.PUSH_FAVORITES -> pushFavorites() - // SY <-- - } - } catch (e: Throwable) { - Timber.e(e) - stopSelf(startId) - } finally { - stopSelf(startId) + val handler = CoroutineExceptionHandler { _, exception -> + Timber.e(exception) + stopSelf(startId) + } + updateJob = ioScope.launch(handler) { + when (target) { + Target.CHAPTERS -> updateChapterList(mangaList) + Target.COVERS -> updateCovers(mangaList) + Target.TRACKING -> updateTrackings(mangaList) + // SY --> + Target.SYNC_FOLLOWS -> syncFollows() + Target.PUSH_FAVORITES -> pushFavorites() + // SY <-- } } + updateJob?.invokeOnCompletion { stopSelf(startId) } return START_REDELIVER_INTENT } @@ -421,17 +420,22 @@ class LibraryUpdateService( // Update manga details metadata in the background if (preferences.autoUpdateMetadata()) { GlobalScope.launchIO { - 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 - } + 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() + manga.copyFrom(sManga) + db.insertManga(manga).executeAsBlocking() + } catch (e: Throwable) { + // Ignore errors and continue + Timber.e(e) + } } }