mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-10 22:34:33 -05:00
Backup creation and restore gql endpoints (#587)
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
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(): BackupRestoreStatus {
|
||||
return ProtoBackupImport.backupRestoreState.value.toStatus()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package suwayomi.tachidesk.graphql.queries
|
||||
|
||||
import org.jetbrains.exposed.sql.select
|
||||
import org.jetbrains.exposed.sql.transactions.transaction
|
||||
import org.kodein.di.DI
|
||||
import org.kodein.di.conf.global
|
||||
import org.kodein.di.instance
|
||||
import suwayomi.tachidesk.graphql.types.MangaType
|
||||
import suwayomi.tachidesk.manga.impl.update.IUpdater
|
||||
import suwayomi.tachidesk.manga.impl.update.JobStatus
|
||||
import suwayomi.tachidesk.manga.impl.update.UpdaterSocket
|
||||
import suwayomi.tachidesk.manga.model.table.MangaTable
|
||||
|
||||
class UpdaterQuery {
|
||||
sealed interface UpdaterStatus {
|
||||
data class UpdaterJob(val status: JobStatus, val manga: MangaType)
|
||||
|
||||
data class Running(val jobs: Map<JobStatus, List<MangaType>>) : UpdaterStatus
|
||||
|
||||
// data class Idle
|
||||
}
|
||||
|
||||
private val updater by DI.global.instance<IUpdater>()
|
||||
|
||||
fun updaterStatus() {
|
||||
val status = updater.status.value
|
||||
if (status.running) {
|
||||
val mangaIds = status.statusMap.values.flatMap { mangas -> mangas.map { it.id } }
|
||||
val mangaMap = transaction {
|
||||
MangaTable.select { MangaTable.id inList mangaIds }
|
||||
.map { MangaType(it) }
|
||||
.associateBy { it.id }
|
||||
}
|
||||
UpdaterStatus.Running(
|
||||
status.statusMap.mapValues { (_, mangas) ->
|
||||
mangas.mapNotNull { mangaMap[it.id] }
|
||||
}
|
||||
)
|
||||
}
|
||||
UpdaterSocket
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user