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
This commit is contained in:
Cuong-Tran 2025-02-11 13:56:55 +07:00
parent 58dc3b3e79
commit caa0d9b92e

View file

@ -393,7 +393,10 @@ class MangaRestorer(
private suspend fun restoreHistory(manga: Manga, backupHistory: List<BackupHistory>) { private suspend fun restoreHistory(manga: Manga, backupHistory: List<BackupHistory>) {
val toUpdate = backupHistory.mapNotNull { history -> 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() val item = history.getHistoryImpl()
if (dbHistory == null) { if (dbHistory == null) {
@ -514,13 +517,18 @@ class MangaRestorer(
} }
) { ) {
// Let the db assign the id // Let the db assign the id
val mergedManga = handler.awaitOneOrNull { // KMK -->
val mergedManga = handler.awaitList {
// KMK <--
mangasQueries.getMangaByUrlAndSource( mangasQueries.getMangaByUrlAndSource(
backupMergedMangaReference.mangaUrl, backupMergedMangaReference.mangaUrl,
backupMergedMangaReference.mangaSourceId, backupMergedMangaReference.mangaSourceId,
MangaMapper::mapManga, MangaMapper::mapManga,
) )
} ?: return@forEach // KMK -->
}.firstOrNull()
// KMK <--
?: return@forEach
backupMergedMangaReference.getMergedMangaReference().run { backupMergedMangaReference.getMergedMangaReference().run {
handler.await { handler.await {
mergedQueries.insert( mergedQueries.insert(