mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-30 22:07:57 +01:00 
			
		
		
		
	Fix library is backed up when disabled and make categories backup/restore independent
This commit is contained in:
		| @@ -6,7 +6,6 @@ import android.content.Intent | ||||
| import android.net.Uri | ||||
| import androidx.activity.compose.rememberLauncherForActivityResult | ||||
| import androidx.activity.result.contract.ActivityResultContracts | ||||
| import androidx.compose.foundation.layout.ColumnScope | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.Immutable | ||||
| import androidx.compose.runtime.collectAsState | ||||
| @@ -68,7 +67,7 @@ class CreateBackupScreen : Screen() { | ||||
|             LazyColumnWithAction( | ||||
|                 contentPadding = contentPadding, | ||||
|                 actionLabel = stringResource(MR.strings.action_create), | ||||
|                 actionEnabled = state.options.anyEnabled(), | ||||
|                 actionEnabled = state.options.canCreate(), | ||||
|                 onClickAction = { | ||||
|                     if (!BackupCreateJob.isManualJobRunning(context)) { | ||||
|                         try { | ||||
| @@ -103,7 +102,7 @@ class CreateBackupScreen : Screen() { | ||||
|     } | ||||
|  | ||||
|     @Composable | ||||
|     private fun ColumnScope.Options( | ||||
|     private fun Options( | ||||
|         options: ImmutableList<BackupOptions.Entry>, | ||||
|         state: CreateBackupScreenModel.State, | ||||
|         model: CreateBackupScreenModel, | ||||
|   | ||||
| @@ -63,7 +63,7 @@ class RestoreBackupScreen( | ||||
|             LazyColumnWithAction( | ||||
|                 contentPadding = contentPadding, | ||||
|                 actionLabel = stringResource(MR.strings.action_restore), | ||||
|                 actionEnabled = state.canRestore && state.options.anyEnabled(), | ||||
|                 actionEnabled = state.canRestore && state.options.canRestore(), | ||||
|                 onClickAction = { | ||||
|                     model.startRestore() | ||||
|                     navigator.pop() | ||||
|   | ||||
| @@ -74,11 +74,11 @@ class BackupCreator( | ||||
|                 throw IllegalStateException(context.stringResource(MR.strings.create_backup_file_error)) | ||||
|             } | ||||
|  | ||||
|             val databaseManga = getFavorites.await() | ||||
|             val backupManga = backupMangas(getFavorites.await(), options) | ||||
|             val backup = Backup( | ||||
|                 backupManga = backupMangas(databaseManga, options), | ||||
|                 backupManga = backupManga, | ||||
|                 backupCategories = backupCategories(options), | ||||
|                 backupSources = backupSources(databaseManga), | ||||
|                 backupSources = backupSources(backupManga), | ||||
|                 backupPreferences = backupAppPreferences(options), | ||||
|                 backupSourcePreferences = backupSourcePreferences(options), | ||||
|             ) | ||||
| @@ -120,10 +120,12 @@ class BackupCreator( | ||||
|     } | ||||
|  | ||||
|     private suspend fun backupMangas(mangas: List<Manga>, options: BackupOptions): List<BackupManga> { | ||||
|         if (!options.libraryEntries) return emptyList() | ||||
|  | ||||
|         return mangaBackupCreator.backupMangas(mangas, options) | ||||
|     } | ||||
|  | ||||
|     private fun backupSources(mangas: List<Manga>): List<BackupSource> { | ||||
|     private fun backupSources(mangas: List<BackupManga>): List<BackupSource> { | ||||
|         return sourcesBackupCreator.backupSources(mangas) | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -26,7 +26,7 @@ data class BackupOptions( | ||||
|         privateSettings, | ||||
|     ) | ||||
|  | ||||
|     fun anyEnabled() = libraryEntries || appSettings || sourceSettings | ||||
|     fun canCreate() = libraryEntries || categories || appSettings || sourceSettings | ||||
|  | ||||
|     companion object { | ||||
|         val libraryOptions = persistentListOf( | ||||
| @@ -35,12 +35,6 @@ data class BackupOptions( | ||||
|                 getter = BackupOptions::libraryEntries, | ||||
|                 setter = { options, enabled -> options.copy(libraryEntries = enabled) }, | ||||
|             ), | ||||
|             Entry( | ||||
|                 label = MR.strings.categories, | ||||
|                 getter = BackupOptions::categories, | ||||
|                 setter = { options, enabled -> options.copy(categories = enabled) }, | ||||
|                 enabled = { it.libraryEntries }, | ||||
|             ), | ||||
|             Entry( | ||||
|                 label = MR.strings.chapters, | ||||
|                 getter = BackupOptions::chapters, | ||||
| @@ -59,6 +53,11 @@ data class BackupOptions( | ||||
|                 setter = { options, enabled -> options.copy(history = enabled) }, | ||||
|                 enabled = { it.libraryEntries }, | ||||
|             ), | ||||
|             Entry( | ||||
|                 label = MR.strings.categories, | ||||
|                 getter = BackupOptions::categories, | ||||
|                 setter = { options, enabled -> options.copy(categories = enabled) }, | ||||
|             ), | ||||
|         ) | ||||
|  | ||||
|         val settingsOptions = persistentListOf( | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| package eu.kanade.tachiyomi.data.backup.create.creators | ||||
|  | ||||
| import eu.kanade.tachiyomi.data.backup.models.BackupManga | ||||
| import eu.kanade.tachiyomi.data.backup.models.BackupSource | ||||
| import eu.kanade.tachiyomi.source.Source | ||||
| import tachiyomi.domain.manga.model.Manga | ||||
| import tachiyomi.domain.source.service.SourceManager | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
| @@ -11,10 +11,10 @@ class SourcesBackupCreator( | ||||
|     private val sourceManager: SourceManager = Injekt.get(), | ||||
| ) { | ||||
|  | ||||
|     fun backupSources(mangas: List<Manga>): List<BackupSource> { | ||||
|     fun backupSources(mangas: List<BackupManga>): List<BackupSource> { | ||||
|         return mangas | ||||
|             .asSequence() | ||||
|             .map(Manga::source) | ||||
|             .map(BackupManga::source) | ||||
|             .distinct() | ||||
|             .map(sourceManager::getOrStub) | ||||
|             .map { it.toBackupSource() } | ||||
|   | ||||
| @@ -67,8 +67,11 @@ class BackupRestorer( | ||||
|         val backupMaps = backup.backupSources + backup.backupBrokenSources.map { it.toBackupSource() } | ||||
|         sourceMapping = backupMaps.associate { it.sourceId to it.name } | ||||
|  | ||||
|         if (options.library) { | ||||
|             restoreAmount += backup.backupManga.size + 1 // +1 for categories | ||||
|         if (options.libraryEntries) { | ||||
|             restoreAmount += backup.backupManga.size | ||||
|         } | ||||
|         if (options.categories) { | ||||
|             restoreAmount += 1 | ||||
|         } | ||||
|         if (options.appSettings) { | ||||
|             restoreAmount += 1 | ||||
| @@ -78,7 +81,7 @@ class BackupRestorer( | ||||
|         } | ||||
|  | ||||
|         coroutineScope { | ||||
|             if (options.library) { | ||||
|             if (options.categories) { | ||||
|                 restoreCategories(backup.backupCategories) | ||||
|             } | ||||
|             if (options.appSettings) { | ||||
| @@ -87,8 +90,8 @@ class BackupRestorer( | ||||
|             if (options.sourceSettings) { | ||||
|                 restoreSourcePreferences(backup.backupSourcePreferences) | ||||
|             } | ||||
|             if (options.library) { | ||||
|                 restoreManga(backup.backupManga, backup.backupCategories) | ||||
|             if (options.libraryEntries) { | ||||
|                 restoreManga(backup.backupManga, if (options.categories) backup.backupCategories else emptyList()) | ||||
|             } | ||||
|  | ||||
|             // TODO: optionally trigger online library + tracker update | ||||
|   | ||||
| @@ -5,25 +5,32 @@ import kotlinx.collections.immutable.persistentListOf | ||||
| import tachiyomi.i18n.MR | ||||
|  | ||||
| data class RestoreOptions( | ||||
|     val library: Boolean = true, | ||||
|     val libraryEntries: Boolean = true, | ||||
|     val categories: Boolean = true, | ||||
|     val appSettings: Boolean = true, | ||||
|     val sourceSettings: Boolean = true, | ||||
| ) { | ||||
|  | ||||
|     fun asBooleanArray() = booleanArrayOf( | ||||
|         library, | ||||
|         libraryEntries, | ||||
|         categories, | ||||
|         appSettings, | ||||
|         sourceSettings, | ||||
|     ) | ||||
|  | ||||
|     fun anyEnabled() = library || appSettings || sourceSettings | ||||
|     fun canRestore() = libraryEntries || categories || appSettings || sourceSettings | ||||
|  | ||||
|     companion object { | ||||
|         val options = persistentListOf( | ||||
|             Entry( | ||||
|                 label = MR.strings.label_library, | ||||
|                 getter = RestoreOptions::library, | ||||
|                 setter = { options, enabled -> options.copy(library = enabled) }, | ||||
|                 getter = RestoreOptions::libraryEntries, | ||||
|                 setter = { options, enabled -> options.copy(libraryEntries = enabled) }, | ||||
|             ), | ||||
|             Entry( | ||||
|                 label = MR.strings.categories, | ||||
|                 getter = RestoreOptions::categories, | ||||
|                 setter = { options, enabled -> options.copy(categories = enabled) }, | ||||
|             ), | ||||
|             Entry( | ||||
|                 label = MR.strings.app_settings, | ||||
| @@ -38,9 +45,10 @@ data class RestoreOptions( | ||||
|         ) | ||||
|  | ||||
|         fun fromBooleanArray(array: BooleanArray) = RestoreOptions( | ||||
|             library = array[0], | ||||
|             appSettings = array[1], | ||||
|             sourceSettings = array[2], | ||||
|             libraryEntries = array[0], | ||||
|             categories = array[1], | ||||
|             appSettings = array[2], | ||||
|             sourceSettings = array[3], | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user