mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-03 10:54:38 -05:00
first instance of legacy import
This commit is contained in:
@@ -0,0 +1,40 @@
|
|||||||
|
package ir.armor.tachidesk.impl.backup.legacy
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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/. */
|
||||||
|
|
||||||
|
import com.github.salomonbrys.kotson.registerTypeAdapter
|
||||||
|
import com.github.salomonbrys.kotson.registerTypeHierarchyAdapter
|
||||||
|
import com.google.gson.Gson
|
||||||
|
import com.google.gson.GsonBuilder
|
||||||
|
import ir.armor.tachidesk.impl.backup.legacy.models.DHistory
|
||||||
|
import ir.armor.tachidesk.impl.backup.legacy.serializer.CategoryTypeAdapter
|
||||||
|
import ir.armor.tachidesk.impl.backup.legacy.serializer.ChapterTypeAdapter
|
||||||
|
import ir.armor.tachidesk.impl.backup.legacy.serializer.HistoryTypeAdapter
|
||||||
|
import ir.armor.tachidesk.impl.backup.legacy.serializer.MangaTypeAdapter
|
||||||
|
import ir.armor.tachidesk.impl.backup.legacy.serializer.TrackTypeAdapter
|
||||||
|
import ir.armor.tachidesk.impl.backup.models.CategoryImpl
|
||||||
|
import ir.armor.tachidesk.impl.backup.models.ChapterImpl
|
||||||
|
import ir.armor.tachidesk.impl.backup.models.MangaImpl
|
||||||
|
import ir.armor.tachidesk.impl.backup.models.TrackImpl
|
||||||
|
|
||||||
|
open class LegacyBackupBase {
|
||||||
|
internal val parser: Gson = when (version) {
|
||||||
|
2 -> GsonBuilder()
|
||||||
|
.registerTypeAdapter<MangaImpl>(MangaTypeAdapter.build())
|
||||||
|
.registerTypeHierarchyAdapter<ChapterImpl>(ChapterTypeAdapter.build())
|
||||||
|
.registerTypeAdapter<CategoryImpl>(CategoryTypeAdapter.build())
|
||||||
|
.registerTypeAdapter<DHistory>(HistoryTypeAdapter.build())
|
||||||
|
.registerTypeHierarchyAdapter<TrackImpl>(TrackTypeAdapter.build())
|
||||||
|
.create()
|
||||||
|
else -> throw Exception("Unknown backup version")
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
internal const val version = 2
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,11 +7,7 @@ package ir.armor.tachidesk.impl.backup.legacy
|
|||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* 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/. */
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
import com.github.salomonbrys.kotson.registerTypeAdapter
|
|
||||||
import com.github.salomonbrys.kotson.registerTypeHierarchyAdapter
|
|
||||||
import com.github.salomonbrys.kotson.set
|
import com.github.salomonbrys.kotson.set
|
||||||
import com.google.gson.Gson
|
|
||||||
import com.google.gson.GsonBuilder
|
|
||||||
import com.google.gson.JsonArray
|
import com.google.gson.JsonArray
|
||||||
import com.google.gson.JsonElement
|
import com.google.gson.JsonElement
|
||||||
import com.google.gson.JsonObject
|
import com.google.gson.JsonObject
|
||||||
@@ -19,38 +15,18 @@ import eu.kanade.tachiyomi.source.LocalSource
|
|||||||
import ir.armor.tachidesk.impl.backup.BackupFlags
|
import ir.armor.tachidesk.impl.backup.BackupFlags
|
||||||
import ir.armor.tachidesk.impl.backup.legacy.models.Backup
|
import ir.armor.tachidesk.impl.backup.legacy.models.Backup
|
||||||
import ir.armor.tachidesk.impl.backup.legacy.models.Backup.CURRENT_VERSION
|
import ir.armor.tachidesk.impl.backup.legacy.models.Backup.CURRENT_VERSION
|
||||||
import ir.armor.tachidesk.impl.backup.legacy.models.DHistory
|
|
||||||
import ir.armor.tachidesk.impl.backup.legacy.serializer.CategoryTypeAdapter
|
|
||||||
import ir.armor.tachidesk.impl.backup.legacy.serializer.ChapterTypeAdapter
|
|
||||||
import ir.armor.tachidesk.impl.backup.legacy.serializer.HistoryTypeAdapter
|
|
||||||
import ir.armor.tachidesk.impl.backup.legacy.serializer.MangaTypeAdapter
|
|
||||||
import ir.armor.tachidesk.impl.backup.legacy.serializer.TrackTypeAdapter
|
|
||||||
import ir.armor.tachidesk.impl.backup.models.CategoryImpl
|
|
||||||
import ir.armor.tachidesk.impl.backup.models.ChapterImpl
|
import ir.armor.tachidesk.impl.backup.models.ChapterImpl
|
||||||
import ir.armor.tachidesk.impl.backup.models.Manga
|
import ir.armor.tachidesk.impl.backup.models.Manga
|
||||||
import ir.armor.tachidesk.impl.backup.models.MangaImpl
|
import ir.armor.tachidesk.impl.backup.models.MangaImpl
|
||||||
import ir.armor.tachidesk.impl.backup.models.TrackImpl
|
|
||||||
import ir.armor.tachidesk.impl.util.GetHttpSource.getHttpSource
|
import ir.armor.tachidesk.impl.util.GetHttpSource.getHttpSource
|
||||||
import ir.armor.tachidesk.model.database.ChapterTable
|
import ir.armor.tachidesk.model.database.ChapterTable
|
||||||
import ir.armor.tachidesk.model.database.MangaTable
|
import ir.armor.tachidesk.model.database.MangaTable
|
||||||
import org.jetbrains.exposed.sql.select
|
import org.jetbrains.exposed.sql.select
|
||||||
import org.jetbrains.exposed.sql.transactions.transaction
|
import org.jetbrains.exposed.sql.transactions.transaction
|
||||||
|
|
||||||
object LegacyBackupExport {
|
object LegacyBackupExport : LegacyBackupBase() {
|
||||||
const val version = 2
|
|
||||||
|
|
||||||
private val parser: Gson = when (version) {
|
suspend fun createLegacyBackup(flags: BackupFlags): String? {
|
||||||
2 -> GsonBuilder()
|
|
||||||
.registerTypeAdapter<MangaImpl>(MangaTypeAdapter.build())
|
|
||||||
.registerTypeHierarchyAdapter<ChapterImpl>(ChapterTypeAdapter.build())
|
|
||||||
.registerTypeAdapter<CategoryImpl>(CategoryTypeAdapter.build())
|
|
||||||
.registerTypeAdapter<DHistory>(HistoryTypeAdapter.build())
|
|
||||||
.registerTypeHierarchyAdapter<TrackImpl>(TrackTypeAdapter.build())
|
|
||||||
.create()
|
|
||||||
else -> throw Exception("Unknown backup version")
|
|
||||||
}
|
|
||||||
|
|
||||||
suspend fun createBackup(flags: BackupFlags): String? {
|
|
||||||
// Create root object
|
// Create root object
|
||||||
val root = JsonObject()
|
val root = JsonObject()
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package ir.armor.tachidesk.impl.backup.legacy
|
||||||
|
|
||||||
|
import com.google.gson.JsonParser
|
||||||
|
import mu.KotlinLogging
|
||||||
|
import java.io.InputStream
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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/. */
|
||||||
|
|
||||||
|
private val logger = KotlinLogging.logger {}
|
||||||
|
|
||||||
|
object LegacyBackupImport : LegacyBackupBase() {
|
||||||
|
fun restoreLegacyBackup(sourceStream: InputStream) {
|
||||||
|
val reader = sourceStream.bufferedReader()
|
||||||
|
val json = JsonParser.parseReader(reader).asJsonObject
|
||||||
|
|
||||||
|
logger.info("$json")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -31,7 +31,8 @@ import ir.armor.tachidesk.impl.Search.sourceSearch
|
|||||||
import ir.armor.tachidesk.impl.Source.getSource
|
import ir.armor.tachidesk.impl.Source.getSource
|
||||||
import ir.armor.tachidesk.impl.Source.getSourceList
|
import ir.armor.tachidesk.impl.Source.getSourceList
|
||||||
import ir.armor.tachidesk.impl.backup.BackupFlags
|
import ir.armor.tachidesk.impl.backup.BackupFlags
|
||||||
import ir.armor.tachidesk.impl.backup.legacy.LegacyBackupExport.createBackup
|
import ir.armor.tachidesk.impl.backup.legacy.LegacyBackupExport.createLegacyBackup
|
||||||
|
import ir.armor.tachidesk.impl.backup.legacy.LegacyBackupImport.restoreLegacyBackup
|
||||||
import ir.armor.tachidesk.server.util.openInBrowser
|
import ir.armor.tachidesk.server.util.openInBrowser
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -325,17 +326,17 @@ object JavalinSetup {
|
|||||||
ctx.json(getCategoryMangaList(categoryId))
|
ctx.json(getCategoryMangaList(categoryId))
|
||||||
}
|
}
|
||||||
|
|
||||||
// expects a Tachiyomi legacy backup file to be uploaded
|
// expects a Tachiyomi legacy backup json to be uploaded
|
||||||
app.get("/api/v1/backup/legacy/import") { ctx ->
|
app.get("/api/v1/backup/legacy/import") { ctx ->
|
||||||
TODO()
|
restoreLegacyBackup(ctx.bodyAsInputStream())
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns a Tachiyomi legacy backup file created from the current database
|
// returns a Tachiyomi legacy backup json created from the current database
|
||||||
app.get("/api/v1/backup/legacy/export") { ctx ->
|
app.get("/api/v1/backup/legacy/export") { ctx ->
|
||||||
ctx.contentType("application/json")
|
ctx.contentType("application/json")
|
||||||
ctx.result(
|
ctx.result(
|
||||||
future {
|
future {
|
||||||
createBackup(
|
createLegacyBackup(
|
||||||
BackupFlags(
|
BackupFlags(
|
||||||
includeManga = true,
|
includeManga = true,
|
||||||
includeCategories = true,
|
includeCategories = true,
|
||||||
|
|||||||
Reference in New Issue
Block a user