From e303b88b907a16f2bd3af982ec8e5e07163f2c8b Mon Sep 17 00:00:00 2001 From: AntsyLich <59261191+AntsyLich@users.noreply.github.com> Date: Tue, 30 Jul 2024 04:59:16 +0600 Subject: [PATCH] Cleanup backup/restore related code (cherry picked from commit c201b341a716b90d378dcda4bd9b8ac4a343d4fc) # Conflicts: # app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt --- .../data/backup/create/BackupCreator.kt | 48 +++++++++---------- .../data/backup/create/BackupOptions.kt | 8 ++++ .../creators/CategoriesBackupCreator.kt | 2 +- .../create/creators/MangaBackupCreator.kt | 2 +- .../creators/PreferenceBackupCreator.kt | 4 +- .../creators/SavedSearchBackupCreator.kt | 2 +- .../create/creators/SourcesBackupCreator.kt | 2 +- .../data/backup/restore/BackupRestorer.kt | 8 ++-- .../restore/restorers/CategoriesRestorer.kt | 2 +- .../backup/restore/restorers/MangaRestorer.kt | 2 +- .../restore/restorers/PreferenceRestorer.kt | 4 +- 11 files changed, 46 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt index b1b924dd8..7b0a69c33 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupCreator.kt @@ -61,24 +61,22 @@ class BackupCreator( suspend fun backup(uri: Uri, options: BackupOptions): String { var file: UniFile? = null try { - file = ( - if (isAutoBackup) { - // Get dir of file and create - val dir = UniFile.fromUri(context, uri) + file = if (isAutoBackup) { + // Get dir of file and create + val dir = UniFile.fromUri(context, uri) - // Delete older backups - dir?.listFiles { _, filename -> FILENAME_REGEX.matches(filename) } - .orEmpty() - .sortedByDescending { it.name } - .drop(MAX_AUTO_BACKUPS - 1) - .forEach { it.delete() } + // Delete older backups + dir?.listFiles { _, filename -> FILENAME_REGEX.matches(filename) } + .orEmpty() + .sortedByDescending { it.name } + .drop(MAX_AUTO_BACKUPS - 1) + .forEach { it.delete() } - // Create new file to place backup - dir?.createFile(getFilename()) - } else { - UniFile.fromUri(context, uri) - } - ) + // Create new file to place backup + dir?.createFile(getFilename()) + } else { + UniFile.fromUri(context, uri) + } if (file == null || !file.isFile) { throw IllegalStateException(context.stringResource(MR.strings.create_backup_file_error)) @@ -100,7 +98,7 @@ class BackupCreator( backupPreferences = backupAppPreferences(options), backupSourcePreferences = backupSourcePreferences(options), // SY --> - backupSavedSearches = backupSavedSearches(), + backupSavedSearches = backupSavedSearches(options), // SY <-- ) @@ -137,34 +135,36 @@ class BackupCreator( suspend fun backupCategories(options: BackupOptions): List { if (!options.categories) return emptyList() - return categoriesBackupCreator.backupCategories() + return categoriesBackupCreator() } suspend fun backupMangas(mangas: List, options: BackupOptions): List { if (!options.libraryEntries) return emptyList() - return mangaBackupCreator.backupMangas(mangas, options) + return mangaBackupCreator(mangas, options) } fun backupSources(mangas: List): List { - return sourcesBackupCreator.backupSources(mangas) + return sourcesBackupCreator(mangas) } fun backupAppPreferences(options: BackupOptions): List { if (!options.appSettings) return emptyList() - return preferenceBackupCreator.backupAppPreferences(includePrivatePreferences = options.privateSettings) + return preferenceBackupCreator.createApp(includePrivatePreferences = options.privateSettings) } fun backupSourcePreferences(options: BackupOptions): List { if (!options.sourceSettings) return emptyList() - return preferenceBackupCreator.backupSourcePreferences(includePrivatePreferences = options.privateSettings) + return preferenceBackupCreator.createSource(includePrivatePreferences = options.privateSettings) } // SY --> - suspend fun backupSavedSearches(): List { - return savedSearchBackupCreator.backupSavedSearches() + suspend fun backupSavedSearches(options: BackupOptions): List { + if (!options.savedSearches) return emptyList() + + return savedSearchBackupCreator() } // SY <-- diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt index 56c279cb7..fe1f0e137 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/BackupOptions.kt @@ -17,6 +17,7 @@ data class BackupOptions( // SY --> val customInfo: Boolean = true, val readEntries: Boolean = true, + val savedSearches: Boolean = true, // SY <-- ) { @@ -32,6 +33,7 @@ data class BackupOptions( // SY --> customInfo, readEntries, + savedSearches, // SY <-- ) @@ -80,6 +82,11 @@ data class BackupOptions( setter = { options, enabled -> options.copy(readEntries = enabled) }, enabled = { it.libraryEntries }, ), + Entry( + label = SYMR.strings.saved_searches, + getter = BackupOptions::savedSearches, + setter = { options, enabled -> options.copy(savedSearches = enabled) }, + ), // SY <-- ) @@ -114,6 +121,7 @@ data class BackupOptions( // SY --> customInfo = array[8], readEntries = array[9], + savedSearches = array[10], // SY <-- ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/CategoriesBackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/CategoriesBackupCreator.kt index e1ed56ee1..945f32d86 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/CategoriesBackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/CategoriesBackupCreator.kt @@ -11,7 +11,7 @@ class CategoriesBackupCreator( private val getCategories: GetCategories = Injekt.get(), ) { - suspend fun backupCategories(): List { + suspend operator fun invoke(): List { return getCategories.await() .filterNot(Category::isSystemCategory) .map(backupCategoryMapper) 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 395393f3e..1f02dc29d 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 @@ -34,7 +34,7 @@ class MangaBackupCreator( // SY <-- ) { - suspend fun backupMangas(mangas: List, options: BackupOptions): List { + suspend operator fun invoke(mangas: List, options: BackupOptions): List { return mangas.map { backupManga(it, options) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/PreferenceBackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/PreferenceBackupCreator.kt index d14cef230..5b72ce384 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/PreferenceBackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/PreferenceBackupCreator.kt @@ -22,12 +22,12 @@ class PreferenceBackupCreator( private val preferenceStore: PreferenceStore = Injekt.get(), ) { - fun backupAppPreferences(includePrivatePreferences: Boolean): List { + fun createApp(includePrivatePreferences: Boolean): List { return preferenceStore.getAll().toBackupPreferences() .withPrivatePreferences(includePrivatePreferences) } - fun backupSourcePreferences(includePrivatePreferences: Boolean): List { + fun createSource(includePrivatePreferences: Boolean): List { return sourceManager.getCatalogueSources() .filterIsInstance() .map { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/SavedSearchBackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/SavedSearchBackupCreator.kt index 22941e799..293a864e0 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/SavedSearchBackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/SavedSearchBackupCreator.kt @@ -10,7 +10,7 @@ class SavedSearchBackupCreator( private val handler: DatabaseHandler = Injekt.get() ) { - suspend fun backupSavedSearches(): List { + suspend operator fun invoke(): List { return handler.awaitList { saved_searchQueries.selectAll(backupSavedSearchMapper) } } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/SourcesBackupCreator.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/SourcesBackupCreator.kt index 0052c2c93..d3bc573a7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/SourcesBackupCreator.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/create/creators/SourcesBackupCreator.kt @@ -11,7 +11,7 @@ class SourcesBackupCreator( private val sourceManager: SourceManager = Injekt.get(), ) { - fun backupSources(mangas: List): List { + operator fun invoke(mangas: List): List { return mangas .asSequence() .map(BackupManga::source) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/BackupRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/BackupRestorer.kt index ae87568e8..34cbf715e 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/BackupRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/BackupRestorer.kt @@ -117,7 +117,7 @@ class BackupRestorer( private fun CoroutineScope.restoreCategories(backupCategories: List) = launch { ensureActive() - categoriesRestorer.restoreCategories(backupCategories) + categoriesRestorer(backupCategories) restoreProgress += 1 notifier.showRestoreProgress( @@ -153,7 +153,7 @@ class BackupRestorer( ensureActive() try { - mangaRestorer.restoreManga(it, backupCategories) + mangaRestorer.restore(it, backupCategories) } catch (e: Exception) { val sourceName = sourceMapping[it.source] ?: it.source.toString() errors.add(Date() to "${it.title} [$sourceName]: ${e.message}") @@ -166,7 +166,7 @@ class BackupRestorer( private fun CoroutineScope.restoreAppPreferences(preferences: List) = launch { ensureActive() - preferenceRestorer.restoreAppPreferences(preferences) + preferenceRestorer.restoreApp(preferences) restoreProgress += 1 notifier.showRestoreProgress( @@ -179,7 +179,7 @@ class BackupRestorer( private fun CoroutineScope.restoreSourcePreferences(preferences: List) = launch { ensureActive() - preferenceRestorer.restoreSourcePreferences(preferences) + preferenceRestorer.restoreSource(preferences) restoreProgress += 1 notifier.showRestoreProgress( diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt index 23a2d47fa..15080f8ee 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/CategoriesRestorer.kt @@ -13,7 +13,7 @@ class CategoriesRestorer( private val libraryPreferences: LibraryPreferences = Injekt.get(), ) { - suspend fun restoreCategories(backupCategories: List) { + suspend operator fun invoke(backupCategories: List) { if (backupCategories.isNotEmpty()) { val dbCategories = getCategories.await() val dbCategoriesByName = dbCategories.associateBy { it.name } 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 e62417e4d..9c750d615 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 @@ -68,7 +68,7 @@ class MangaRestorer( ) } - suspend fun restoreManga( + suspend fun restore( backupManga: BackupManga, backupCategories: List, ) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/PreferenceRestorer.kt b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/PreferenceRestorer.kt index 4871e3949..b70280c55 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/PreferenceRestorer.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/backup/restore/restorers/PreferenceRestorer.kt @@ -22,14 +22,14 @@ class PreferenceRestorer( private val preferenceStore: PreferenceStore = Injekt.get(), ) { - fun restoreAppPreferences(preferences: List) { + fun restoreApp(preferences: List) { restorePreferences(preferences, preferenceStore) LibraryUpdateJob.setupTask(context) BackupCreateJob.setupTask(context) } - fun restoreSourcePreferences(preferences: List) { + fun restoreSource(preferences: List) { preferences.forEach { val sourcePrefs = AndroidPreferenceStore(context, sourcePreferences(it.sourceKey)) restorePreferences(it.prefs, sourcePrefs)