Skip to content

Commit

Permalink
Fix library is backed up when disabled and make categories backup/res…
Browse files Browse the repository at this point in the history
…tore independent
  • Loading branch information
AntsyLich committed Jul 29, 2024
1 parent 0af9099 commit 56fb4f6
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -103,7 +102,7 @@ class CreateBackupScreen : Screen() {
}

@Composable
private fun ColumnScope.Options(
private fun Options(
options: ImmutableList<BackupOptions.Entry>,
state: CreateBackupScreenModel.State,
model: CreateBackupScreenModel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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),
)
Expand Down Expand Up @@ -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)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ data class BackupOptions(
privateSettings,
)

fun anyEnabled() = libraryEntries || appSettings || sourceSettings
fun canCreate() = libraryEntries || categories || appSettings || sourceSettings

companion object {
val libraryOptions = persistentListOf(
Expand All @@ -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,
Expand All @@ -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(
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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() }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -78,7 +81,7 @@ class BackupRestorer(
}

coroutineScope {
if (options.library) {
if (options.categories) {
restoreCategories(backup.backupCategories)
}
if (options.appSettings) {
Expand All @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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],
)
}

Expand Down

0 comments on commit 56fb4f6

Please sign in to comment.