From c0d7b16ee64cf863cda042cad1060a02ed020936 Mon Sep 17 00:00:00 2001 From: len Date: Sat, 26 Aug 2017 12:46:35 +0200 Subject: [PATCH] Allow to update chapter metadata --- .../tachiyomi/util/ChapterSourceSync.kt | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt index 7a705fe66..e76217e09 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/ChapterSourceSync.kt @@ -37,8 +37,27 @@ fun syncChaptersWithSource(db: DatabaseHelper, } } - // Chapters from the source not in db. - val toAdd = sourceChapters.filterNot { it in dbChapters } + // Chapters from the db not in the source. + val toAdd = mutableListOf() + + // Chapters whose metadata have changed. + val toChange = mutableListOf() + + for (sourceChapter in sourceChapters) { + val dbChapter = dbChapters.find { it.url == sourceChapter.url } + + // Add the chapter if not in db already, or update if the metadata changed. + if (dbChapter == null) { + toAdd.add(sourceChapter) + } else if (dbChapter.scanlator != sourceChapter.scanlator || + dbChapter.name != sourceChapter.name) { + + dbChapter.scanlator = sourceChapter.scanlator + dbChapter.name = sourceChapter.name + + toChange.add(dbChapter) + } + } // Recognize number for new chapters. toAdd.forEach { @@ -49,10 +68,14 @@ fun syncChaptersWithSource(db: DatabaseHelper, } // Chapters from the db not in the source. - val toDelete = dbChapters.filterNot { it in sourceChapters } + val toDelete = dbChapters.filterNot { dbChapter -> + sourceChapters.any { sourceChapter -> + dbChapter.url == sourceChapter.url + } + } - // Return if there's nothing to add or delete, avoiding unnecessary db transactions. - if (toAdd.isEmpty() && toDelete.isEmpty()) { + // Return if there's nothing to add, delete or change, avoiding unnecessary db transactions. + if (toAdd.isEmpty() && toDelete.isEmpty() && toChange.isEmpty()) { return Pair(emptyList(), emptyList()) } @@ -90,6 +113,10 @@ fun syncChaptersWithSource(db: DatabaseHelper, db.insertChapters(toAdd).executeAsBlocking() } + if (!toChange.isEmpty()) { + db.insertChapters(toChange).executeAsBlocking() + } + // Fix order in source. db.fixChaptersSourceOrder(sourceChapters).executeAsBlocking() }