Files
Suwayomi-Server/server/src/main/kotlin/suwayomi/tachidesk/graphql/queries/BackupQuery.kt
schroda 7ed8f43859 Fix/backup import failure not resetting status (#746)
* Reset backup status to idle in case of an exception

* Rename "performRestore" function

* Set backup status to failure on exception

Makes it possible to detect if the restore failed or not after the first status was received

* Set backup status to success on completion

Since the status is not provided over a subscription, but over a query that should be pulled, it is not really easily detectable if a restore finished or not, since both states will be indicated by "idle"

* Correctly wait for first new status when triggering backup import

The status is only "Idle" in case no backup import has ever run.
Once the first backup process finished it is either "Failure" or "Success"

* Rename "ProtoBackupImport::restore" function

* Add id to restore process

Makes it possible to differentiate between backup restore processes.
2023-10-31 21:21:11 -04:00

34 lines
1.0 KiB
Kotlin

package suwayomi.tachidesk.graphql.queries
import io.javalin.http.UploadedFile
import suwayomi.tachidesk.graphql.types.BackupRestoreStatus
import suwayomi.tachidesk.graphql.types.toStatus
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupImport
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupValidator
class BackupQuery {
data class ValidateBackupInput(
val backup: UploadedFile,
)
data class ValidateBackupSource(
val id: Long,
val name: String,
)
data class ValidateBackupResult(
val missingSources: List<ValidateBackupSource>,
)
fun validateBackup(input: ValidateBackupInput): ValidateBackupResult {
val result = ProtoBackupValidator.validate(input.backup.content)
return ValidateBackupResult(
result.missingSourceIds.map { ValidateBackupSource(it.first, it.second) },
)
}
fun restoreStatus(id: String): BackupRestoreStatus? {
return ProtoBackupImport.getRestoreState(id)?.toStatus()
}
}