mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-03 19:04:39 -05:00
97 lines
3.4 KiB
Kotlin
97 lines
3.4 KiB
Kotlin
package suwayomi.tachidesk.manga.controller
|
|
|
|
import io.javalin.http.Context
|
|
import suwayomi.tachidesk.manga.impl.backup.BackupFlags
|
|
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupExport
|
|
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupImport
|
|
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupValidator
|
|
import suwayomi.tachidesk.server.JavalinSetup.future
|
|
import java.text.SimpleDateFormat
|
|
import java.util.Date
|
|
|
|
/*
|
|
* Copyright (C) Contributors to the Suwayomi project
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
object BackupController {
|
|
|
|
/** expects a Tachiyomi protobuf backup in the body */
|
|
fun protobufImport(ctx: Context) {
|
|
ctx.future(
|
|
future {
|
|
ProtoBackupImport.performRestore(ctx.bodyAsInputStream())
|
|
}
|
|
)
|
|
}
|
|
|
|
/** expects a Tachiyomi protobuf backup as a file upload, the file must be named "backup.proto.gz" */
|
|
fun protobufImportFile(ctx: Context) {
|
|
// TODO: rewrite this with ctx.uploadedFiles(), don't call the multipart field "backup.proto.gz"
|
|
ctx.future(
|
|
future {
|
|
ProtoBackupImport.performRestore(ctx.uploadedFile("backup.proto.gz")!!.content)
|
|
}
|
|
)
|
|
}
|
|
|
|
/** returns a Tachiyomi protobuf backup created from the current database as a body */
|
|
fun protobufExport(ctx: Context) {
|
|
ctx.contentType("application/octet-stream")
|
|
ctx.future(
|
|
future {
|
|
ProtoBackupExport.createBackup(
|
|
BackupFlags(
|
|
includeManga = true,
|
|
includeCategories = true,
|
|
includeChapters = true,
|
|
includeTracking = true,
|
|
includeHistory = true,
|
|
)
|
|
)
|
|
}
|
|
)
|
|
}
|
|
|
|
/** returns a Tachiyomi protobuf backup created from the current database as a file */
|
|
fun protobufExportFile(ctx: Context) {
|
|
ctx.contentType("application/octet-stream")
|
|
val currentDate = SimpleDateFormat("yyyy-MM-dd_HH-mm").format(Date())
|
|
|
|
ctx.header("Content-Disposition", """attachment; filename="tachidesk_$currentDate.proto.gz"""")
|
|
ctx.future(
|
|
future {
|
|
ProtoBackupExport.createBackup(
|
|
BackupFlags(
|
|
includeManga = true,
|
|
includeCategories = true,
|
|
includeChapters = true,
|
|
includeTracking = true,
|
|
includeHistory = true,
|
|
)
|
|
)
|
|
}
|
|
)
|
|
}
|
|
|
|
/** Reports missing sources and trackers, expects a Tachiyomi protobuf backup in the body */
|
|
fun protobufValidate(ctx: Context) {
|
|
ctx.future(
|
|
future {
|
|
ProtoBackupValidator.validate(ctx.bodyAsInputStream())
|
|
}
|
|
)
|
|
}
|
|
|
|
/** Reports missing sources and trackers, expects a Tachiyomi protobuf backup as a file upload, the file must be named "backup.proto.gz" */
|
|
fun protobufValidateFile(ctx: Context) {
|
|
ctx.future(
|
|
future {
|
|
ProtoBackupValidator.validate(ctx.uploadedFile("backup.proto.gz")!!.content)
|
|
}
|
|
)
|
|
}
|
|
}
|