refactor(backup): Manage options from BackupCreator

This commit is contained in:
Ahmad Ansori Palembani 2024-11-04 13:42:17 +07:00
parent ca7496bda1
commit 231ece7bfb
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
4 changed files with 44 additions and 16 deletions

View file

@ -5,11 +5,17 @@ import android.net.Uri
import co.touchlab.kermit.Logger import co.touchlab.kermit.Logger
import com.hippo.unifile.UniFile import com.hippo.unifile.UniFile
import eu.kanade.tachiyomi.data.backup.BackupFileValidator import eu.kanade.tachiyomi.data.backup.BackupFileValidator
import eu.kanade.tachiyomi.data.backup.models.BackupCategory
import eu.kanade.tachiyomi.data.backup.models.BackupManga
import eu.kanade.tachiyomi.data.backup.models.BackupPreference
import eu.kanade.tachiyomi.data.backup.models.BackupSource
import eu.kanade.tachiyomi.data.backup.models.BackupSourcePreferences
import eu.kanade.tachiyomi.data.backup.create.creators.CategoriesBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.CategoriesBackupCreator
import eu.kanade.tachiyomi.data.backup.create.creators.MangaBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.MangaBackupCreator
import eu.kanade.tachiyomi.data.backup.create.creators.PreferenceBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.PreferenceBackupCreator
import eu.kanade.tachiyomi.data.backup.create.creators.SourcesBackupCreator import eu.kanade.tachiyomi.data.backup.create.creators.SourcesBackupCreator
import eu.kanade.tachiyomi.data.backup.models.Backup import eu.kanade.tachiyomi.data.backup.models.Backup
import eu.kanade.tachiyomi.domain.manga.models.Manga
import java.io.FileOutputStream import java.io.FileOutputStream
import java.time.Instant import java.time.Instant
import kotlinx.serialization.protobuf.ProtoBuf import kotlinx.serialization.protobuf.ProtoBuf
@ -67,13 +73,13 @@ class BackupCreator(
} }
val readNotFavorites = if (options.readManga) getManga.awaitReadNotFavorites() else emptyList() val readNotFavorites = if (options.readManga) getManga.awaitReadNotFavorites() else emptyList()
val backupManga = mangaBackupCreator(getManga.awaitFavorites() + readNotFavorites, options) val backupManga = backupMangas(getManga.awaitFavorites() + readNotFavorites, options)
val backup = Backup( val backup = Backup(
backupManga = backupManga, backupManga = backupManga,
backupCategories = categoriesBackupCreator(options), backupCategories = backupCategories(options),
backupSources = sourcesBackupCreator(backupManga), backupSources = backupSources(backupManga),
backupPreferences = preferenceBackupCreator.backupAppPreferences(options), backupPreferences = backupAppPreferences(options),
backupSourcePreferences = preferenceBackupCreator.backupSourcePreferences(options), backupSourcePreferences = backupSourcePreferences(options),
) )
val byteArray = parser.encodeToByteArray(Backup.serializer(), backup) val byteArray = parser.encodeToByteArray(Backup.serializer(), backup)
@ -101,4 +107,32 @@ class BackupCreator(
throw e throw e
} }
} }
private suspend fun backupCategories(options: BackupOptions): List<BackupCategory> {
if (!options.categories) return emptyList()
return categoriesBackupCreator()
}
private suspend fun backupMangas(mangas: List<Manga>, options: BackupOptions): List<BackupManga> {
if (!options.libraryEntries) return emptyList()
return mangaBackupCreator(mangas, options)
}
private fun backupSources(mangas: List<BackupManga>): List<BackupSource> {
return sourcesBackupCreator(mangas)
}
private fun backupAppPreferences(options: BackupOptions): List<BackupPreference> {
if (!options.appPrefs) return emptyList()
return preferenceBackupCreator.createApp(includePrivatePreferences = options.includePrivate)
}
private fun backupSourcePreferences(options: BackupOptions): List<BackupSourcePreferences> {
if (!options.sourcePrefs) return emptyList()
return preferenceBackupCreator.createSource(includePrivatePreferences = options.includePrivate)
}
} }

View file

@ -14,9 +14,7 @@ class CategoriesBackupCreator(
* *
* @return list of [BackupCategory] to be backed up * @return list of [BackupCategory] to be backed up
*/ */
suspend operator fun invoke(options: BackupOptions): List<BackupCategory> { suspend operator fun invoke(): List<BackupCategory> {
if (!options.categories) return emptyList()
return getCategories.await() return getCategories.await()
.map { BackupCategory.copyFrom(it) } .map { BackupCategory.copyFrom(it) }
} }

View file

@ -20,8 +20,6 @@ class MangaBackupCreator(
private val getChapter: GetChapter = Injekt.get(), private val getChapter: GetChapter = Injekt.get(),
) { ) {
suspend operator fun invoke(mangas: List<Manga>, options: BackupOptions): List<BackupManga> { suspend operator fun invoke(mangas: List<Manga>, options: BackupOptions): List<BackupManga> {
if (!options.libraryEntries) return emptyList()
return mangas.map { return mangas.map {
backupManga(it, options) backupManga(it, options)
} }

View file

@ -23,21 +23,19 @@ class PreferenceBackupCreator(
private val sourceManager: SourceManager = Injekt.get(), private val sourceManager: SourceManager = Injekt.get(),
private val preferenceStore: PreferenceStore = Injekt.get(), private val preferenceStore: PreferenceStore = Injekt.get(),
) { ) {
fun backupAppPreferences(options: BackupOptions): List<BackupPreference> { fun createApp(includePrivatePreferences: Boolean): List<BackupPreference> {
if (!options.appPrefs) return emptyList()
return preferenceStore.getAll().toBackupPreferences() return preferenceStore.getAll().toBackupPreferences()
.withPrivatePreferences(options.includePrivate) .withPrivatePreferences(includePrivatePreferences)
} }
fun backupSourcePreferences(options: BackupOptions): List<BackupSourcePreferences> { fun createSource(includePrivatePreferences: Boolean): List<BackupSourcePreferences> {
if (!options.sourcePrefs) return emptyList()
return sourceManager.getOnlineSources() return sourceManager.getOnlineSources()
.filterIsInstance<ConfigurableSource>() .filterIsInstance<ConfigurableSource>()
.map { .map {
BackupSourcePreferences( BackupSourcePreferences(
it.preferenceKey(), it.preferenceKey(),
it.sourcePreferences().all.toBackupPreferences() it.sourcePreferences().all.toBackupPreferences()
.withPrivatePreferences(options.includePrivate), .withPrivatePreferences(includePrivatePreferences),
) )
} }
} }