From 27d88969371ba8ec6e15ddf24941338d9391aa70 Mon Sep 17 00:00:00 2001 From: jobobby04 Date: Sun, 21 Jan 2024 00:38:36 -0500 Subject: [PATCH] Backup and Restore Excluded scanlators (#166) * Backup and Restore Excluded scanlators * Improve performance * This looks better (cherry picked from commit e0deeb800890c5e3be67c4ebe32ebe34d97e0e25) --- .../create/creators/MangaBackupCreator.kt | 4 ++++ .../data/backup/models/BackupManga.kt | 4 +--- .../backup/restore/restorers/MangaRestorer.kt | 24 +++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt index 10d8d3f84..3b5fb63cc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/MangaBackupCreator.kt @@ -66,6 +66,10 @@ class MangaBackupCreator( } // SY <-- + mangaObject.excludedScanlators = handler.awaitList { + excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(manga.id) + } + if (options.chapters) { // Backup all the chapters handler.awaitList { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt index 4f503a0db..7b900dab3 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/models/BackupManga.kt @@ -39,6 +39,7 @@ data class BackupManga( @ProtoNumber(105) var updateStrategy: UpdateStrategy = UpdateStrategy.ALWAYS_UPDATE, @ProtoNumber(106) var lastModifiedAt: Long = 0, @ProtoNumber(107) var favoriteModifiedAt: Long? = null, + @ProtoNumber(108) var excludedScanlators: List = emptyList(), // SY specific values @ProtoNumber(600) var mergedMangaReferences: List = emptyList(), @@ -52,9 +53,6 @@ data class BackupManga( // skipping 803 due to using duplicate value in previous builds @ProtoNumber(804) var customDescription: String? = null, @ProtoNumber(805) var customGenre: List? = null, - - // Neko specific values - @ProtoNumber(901) var filtered_scanlators: String? = null, ) { fun getMangaImpl(): Manga { return Manga.create().copy( 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 04be23abf..fd1fc3381 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 @@ -90,6 +90,7 @@ class MangaRestorer( backupCategories = backupCategories, history = backupManga.history + backupManga.brokenHistory.map { it.toBackupHistory() }, tracks = backupManga.tracking, + excludedScanlators = backupManga.excludedScanlators, // SY --> mergedMangaReferences = backupManga.mergedMangaReferences, flatMetadata = backupManga.flatMetadata, @@ -288,6 +289,7 @@ class MangaRestorer( backupCategories: List, history: List, tracks: List, + excludedScanlators: List, // SY --> mergedMangaReferences: List, flatMetadata: BackupFlatMetadata?, @@ -298,6 +300,7 @@ class MangaRestorer( restoreChapters(manga, chapters) restoreTracking(manga, tracks) restoreHistory(history) + restoreExcludedScanlators(manga, excludedScanlators) updateManga.awaitUpdateFetchInterval(manga, now, currentFetchWindow) // SY --> restoreMergedMangaReferencesForManga(manga.id, mergedMangaReferences) @@ -523,4 +526,25 @@ class MangaRestorer( // SY <-- private fun Track.forComparison() = this.copy(id = 0L, mangaId = 0L) + + /** + * Restores the excluded scanlators for the manga. + * + * @param manga the manga whose excluded scanlators have to be restored. + * @param excludedScanlators the excluded scanlators to restore. + */ + private suspend fun restoreExcludedScanlators(manga: Manga, excludedScanlators: List) { + if (excludedScanlators.isEmpty()) return + val existingExcludedScanlators = handler.awaitList { + excluded_scanlatorsQueries.getExcludedScanlatorsByMangaId(manga.id) + } + val toInsert = excludedScanlators.filter { it !in existingExcludedScanlators } + if (toInsert.isNotEmpty()) { + handler.await { + toInsert.forEach { + excluded_scanlatorsQueries.insert(manga.id, it) + } + } + } + } }