From caa0d9b92e52af8c13a99ca1fdbc050520432ad8 Mon Sep 17 00:00:00 2001 From: Cuong-Tran Date: Tue, 11 Feb 2025 13:56:55 +0700 Subject: [PATCH] Fix (MangaRestorer): avoid exception caused by duplicate entries Duplicate chapters or duplicate merge-reference which would leads to the whole manga failed to restore/add to library --- .../data/backup/restore/restorers/MangaRestorer.kt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt index 1574876dc..77d7aa440 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/MangaRestorer.kt @@ -393,7 +393,10 @@ class MangaRestorer( private suspend fun restoreHistory(manga: Manga, backupHistory: List) { val toUpdate = backupHistory.mapNotNull { history -> - val dbHistory = handler.awaitOneOrNull { historyQueries.getHistoryByChapterUrl(manga.id, history.url) } + // KMK --> + val dbHistory = handler.awaitList { historyQueries.getHistoryByChapterUrl(manga.id, history.url) } + .firstOrNull() + // KMK <-- val item = history.getHistoryImpl() if (dbHistory == null) { @@ -514,13 +517,18 @@ class MangaRestorer( } ) { // Let the db assign the id - val mergedManga = handler.awaitOneOrNull { + // KMK --> + val mergedManga = handler.awaitList { + // KMK <-- mangasQueries.getMangaByUrlAndSource( backupMergedMangaReference.mangaUrl, backupMergedMangaReference.mangaSourceId, MangaMapper::mapManga, ) - } ?: return@forEach + // KMK --> + }.firstOrNull() + // KMK <-- + ?: return@forEach backupMergedMangaReference.getMergedMangaReference().run { handler.await { mergedQueries.insert(