refactor(backup/creator): Source backup creator should depends on BackupManga

This eliminates the need to check libraryEntries backup option twice
This commit is contained in:
Ahmad Ansori Palembani 2024-08-03 21:24:15 +07:00
parent 66ee8fb0cd
commit 2a073f6154
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
2 changed files with 16 additions and 21 deletions

View file

@ -46,27 +46,25 @@ class BackupCreator(
*/
@Suppress("RedundantSuspendModifier")
suspend fun createBackup(uri: Uri, options: BackupOptions, isAutoBackup: Boolean): String {
// Create root object
var backup: Backup? = null
db.inTransaction {
val databaseManga = db.getFavoriteMangas().executeAsBlocking() +
val databaseManga = db.inTransactionReturn {
db.getFavoriteMangas().executeAsBlocking() +
if (options.readManga) {
db.getReadNotInLibraryMangas().executeAsBlocking()
} else {
emptyList()
}
backup = Backup(
mangaBackupCreator.backupMangas(databaseManga, options),
categoriesBackupCreator.backupCategories(options),
emptyList(),
sourcesBackupCreator.backupExtensionInfo(databaseManga, options),
preferenceBackupCreator.backupAppPreferences(options),
preferenceBackupCreator.backupSourcePreferences(options),
)
}
val backupManga = mangaBackupCreator.backupMangas(databaseManga, options)
val backup = Backup(
backupManga,
categoriesBackupCreator.backupCategories(options),
emptyList(),
sourcesBackupCreator.backupExtensionInfo(backupManga),
preferenceBackupCreator.backupAppPreferences(options),
preferenceBackupCreator.backupSourcePreferences(options),
)
var file: UniFile? = null
try {
file = if (isAutoBackup) {
@ -91,8 +89,8 @@ class BackupCreator(
throw IllegalStateException("Failed to get handle on file")
}
val byteArray = backup?.let { parser.encodeToByteArray(Backup.serializer(), it) }
if (byteArray == null || byteArray.isEmpty()) {
val byteArray = parser.encodeToByteArray(Backup.serializer(), backup)
if (byteArray.isEmpty()) {
throw IllegalStateException(context.getString(MR.strings.empty_backup_error))
}

View file

@ -1,8 +1,7 @@
package eu.kanade.tachiyomi.data.backup.create.creators
import eu.kanade.tachiyomi.data.backup.create.BackupOptions
import eu.kanade.tachiyomi.data.backup.models.BackupManga
import eu.kanade.tachiyomi.data.backup.models.BackupSource
import eu.kanade.tachiyomi.domain.manga.models.Manga
import eu.kanade.tachiyomi.source.SourceManager
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
@ -10,9 +9,7 @@ import uy.kohesive.injekt.api.get
class SourcesBackupCreator(
private val sourceManager: SourceManager = Injekt.get(),
) {
fun backupExtensionInfo(mangas: List<Manga>, options: BackupOptions): List<BackupSource> {
if (!options.libraryEntries) return emptyList()
fun backupExtensionInfo(mangas: List<BackupManga>): List<BackupSource> {
return mangas
.asSequence()
.map { it.source }