Feature/backup import add backup flags (#1697)

* Add backup flags to backup restore

* Cleanup default backup flags handling

* Optionally exclude manga from backup
This commit is contained in:
schroda
2025-10-06 00:52:45 +02:00
committed by GitHub
parent 3ce9f72e3f
commit 0d79ac68f8
7 changed files with 213 additions and 135 deletions

View File

@@ -1,11 +1,13 @@
package suwayomi.tachidesk.graphql.mutations
import com.expediagroup.graphql.generator.annotations.GraphQLDeprecated
import io.javalin.http.UploadedFile
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.withTimeout
import suwayomi.tachidesk.graphql.directives.RequireAuth
import suwayomi.tachidesk.graphql.server.TemporaryFileStorage
import suwayomi.tachidesk.graphql.types.BackupRestoreStatus
import suwayomi.tachidesk.graphql.types.PartialBackupFlags
import suwayomi.tachidesk.graphql.types.toStatus
import suwayomi.tachidesk.manga.impl.backup.BackupFlags
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupExport
@@ -19,6 +21,7 @@ class BackupMutation {
data class RestoreBackupInput(
val clientMutationId: String? = null,
val backup: UploadedFile,
val flags: PartialBackupFlags? = null,
)
data class RestoreBackupPayload(
@@ -29,10 +32,14 @@ class BackupMutation {
@RequireAuth
fun restoreBackup(input: RestoreBackupInput): CompletableFuture<RestoreBackupPayload> {
val (clientMutationId, backup) = input
val (clientMutationId, backup, flags) = input
return future {
val restoreId = ProtoBackupImport.restore(backup.content())
val restoreId =
ProtoBackupImport.restore(
backup.content(),
BackupFlags.fromPartial(flags),
)
withTimeout(10.seconds) {
ProtoBackupImport.notifyFlow.first {
@@ -46,11 +53,18 @@ class BackupMutation {
data class CreateBackupInput(
val clientMutationId: String? = null,
val flags: PartialBackupFlags? = null,
@GraphQLDeprecated("Will get removed", replaceWith = ReplaceWith("flags"))
val includeChapters: Boolean? = null,
@GraphQLDeprecated("Will get removed", replaceWith = ReplaceWith("flags"))
val includeCategories: Boolean? = null,
@GraphQLDeprecated("Will get removed", replaceWith = ReplaceWith("flags"))
val includeTracking: Boolean? = null,
@GraphQLDeprecated("Will get removed", replaceWith = ReplaceWith("flags"))
val includeHistory: Boolean? = null,
@GraphQLDeprecated("Will get removed", replaceWith = ReplaceWith("flags"))
val includeClientData: Boolean? = null,
@GraphQLDeprecated("Will get removed", replaceWith = ReplaceWith("flags"))
val includeServerSettings: Boolean? = null,
)
@@ -65,15 +79,19 @@ class BackupMutation {
val backup =
ProtoBackupExport.createBackup(
BackupFlags(
includeManga = true,
includeCategories = input?.includeCategories ?: true,
includeChapters = input?.includeChapters ?: true,
includeTracking = input?.includeTracking ?: true,
includeHistory = input?.includeHistory ?: true,
includeClientData = input?.includeClientData ?: true,
includeServerSettings = input?.includeServerSettings ?: true,
),
if (input?.flags != null) {
BackupFlags.fromPartial(input.flags)
} else {
BackupFlags(
includeManga = BackupFlags.DEFAULT.includeManga,
includeCategories = input?.includeCategories ?: BackupFlags.DEFAULT.includeCategories,
includeChapters = input?.includeChapters ?: BackupFlags.DEFAULT.includeChapters,
includeTracking = input?.includeTracking ?: BackupFlags.DEFAULT.includeTracking,
includeHistory = input?.includeHistory ?: BackupFlags.DEFAULT.includeHistory,
includeClientData = input?.includeClientData ?: BackupFlags.DEFAULT.includeClientData,
includeServerSettings = input?.includeServerSettings ?: BackupFlags.DEFAULT.includeServerSettings,
)
},
)
TemporaryFileStorage.saveFile(filename, backup)