mirror of
https://github.com/Suwayomi/Suwayomi-Server.git
synced 2026-07-04 03:14:40 -05:00
include list of mangas missing source in restore report (#421)
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
package suwayomi.tachidesk.manga.controller
|
package suwayomi.tachidesk.manga.controller
|
||||||
|
|
||||||
import io.javalin.http.HttpCode
|
import io.javalin.http.HttpCode
|
||||||
import suwayomi.tachidesk.manga.impl.backup.AbstractBackupValidator
|
|
||||||
import suwayomi.tachidesk.manga.impl.backup.BackupFlags
|
import suwayomi.tachidesk.manga.impl.backup.BackupFlags
|
||||||
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupExport
|
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupExport
|
||||||
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupImport
|
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupImport
|
||||||
@@ -144,7 +143,7 @@ object BackupController {
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
withResults = {
|
withResults = {
|
||||||
json<AbstractBackupValidator.ValidationResult>(HttpCode.OK)
|
json<ProtoBackupValidator.ValidationResult>(HttpCode.OK)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -168,7 +167,7 @@ object BackupController {
|
|||||||
)
|
)
|
||||||
},
|
},
|
||||||
withResults = {
|
withResults = {
|
||||||
json<AbstractBackupValidator.ValidationResult>(HttpCode.OK)
|
json<ProtoBackupValidator.ValidationResult>(HttpCode.OK)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
package suwayomi.tachidesk.manga.impl.backup
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 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/. */
|
|
||||||
|
|
||||||
abstract class AbstractBackupValidator {
|
|
||||||
data class ValidationResult(val missingSources: List<String>, val missingTrackers: List<String>)
|
|
||||||
}
|
|
||||||
@@ -19,10 +19,10 @@ import org.jetbrains.exposed.sql.transactions.transaction
|
|||||||
import org.jetbrains.exposed.sql.update
|
import org.jetbrains.exposed.sql.update
|
||||||
import suwayomi.tachidesk.manga.impl.Category
|
import suwayomi.tachidesk.manga.impl.Category
|
||||||
import suwayomi.tachidesk.manga.impl.CategoryManga
|
import suwayomi.tachidesk.manga.impl.CategoryManga
|
||||||
import suwayomi.tachidesk.manga.impl.backup.AbstractBackupValidator.ValidationResult
|
|
||||||
import suwayomi.tachidesk.manga.impl.backup.models.Chapter
|
import suwayomi.tachidesk.manga.impl.backup.models.Chapter
|
||||||
import suwayomi.tachidesk.manga.impl.backup.models.Manga
|
import suwayomi.tachidesk.manga.impl.backup.models.Manga
|
||||||
import suwayomi.tachidesk.manga.impl.backup.models.Track
|
import suwayomi.tachidesk.manga.impl.backup.models.Track
|
||||||
|
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupValidator.ValidationResult
|
||||||
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupValidator.validate
|
import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupValidator.validate
|
||||||
import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupCategory
|
import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupCategory
|
||||||
import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupHistory
|
import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupHistory
|
||||||
@@ -77,6 +77,8 @@ object ProtoBackupImport : ProtoBackupBase() {
|
|||||||
Restore Summary:
|
Restore Summary:
|
||||||
- Missing Sources:
|
- Missing Sources:
|
||||||
${validationResult.missingSources.joinToString("\n ")}
|
${validationResult.missingSources.joinToString("\n ")}
|
||||||
|
- Titles missing Sources:
|
||||||
|
${validationResult.mangasMissingSources.joinToString("\n ")}
|
||||||
- Missing Trackers:
|
- Missing Trackers:
|
||||||
${validationResult.missingTrackers.joinToString("\n ")}
|
${validationResult.missingTrackers.joinToString("\n ")}
|
||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
|
|||||||
@@ -12,13 +12,18 @@ import okio.gzip
|
|||||||
import okio.source
|
import okio.source
|
||||||
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
|
||||||
import suwayomi.tachidesk.manga.impl.backup.AbstractBackupValidator
|
|
||||||
import suwayomi.tachidesk.manga.impl.backup.proto.models.Backup
|
import suwayomi.tachidesk.manga.impl.backup.proto.models.Backup
|
||||||
import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupSerializer
|
import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupSerializer
|
||||||
import suwayomi.tachidesk.manga.model.table.SourceTable
|
import suwayomi.tachidesk.manga.model.table.SourceTable
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
object ProtoBackupValidator : AbstractBackupValidator() {
|
object ProtoBackupValidator {
|
||||||
|
data class ValidationResult(
|
||||||
|
val missingSources: List<String>,
|
||||||
|
val missingTrackers: List<String>,
|
||||||
|
val mangasMissingSources: List<String>
|
||||||
|
)
|
||||||
|
|
||||||
fun validate(backup: Backup): ValidationResult {
|
fun validate(backup: Backup): ValidationResult {
|
||||||
if (backup.backupManga.isEmpty()) {
|
if (backup.backupManga.isEmpty()) {
|
||||||
throw Exception("Backup does not contain any manga.")
|
throw Exception("Backup does not contain any manga.")
|
||||||
@@ -33,6 +38,12 @@ object ProtoBackupValidator : AbstractBackupValidator() {
|
|||||||
.sorted()
|
.sorted()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val brokenSourceIds = backup.brokenBackupSources.map { it.sourceId }
|
||||||
|
|
||||||
|
val mangasMissingSources = backup.backupManga
|
||||||
|
.filter { it.source in brokenSourceIds }
|
||||||
|
.map { manga -> "${manga.title} (from ${backup.brokenBackupSources.first { it.sourceId == manga.source }.name})" }
|
||||||
|
|
||||||
// val trackers = backup.backupManga
|
// val trackers = backup.backupManga
|
||||||
// .flatMap { it.tracking }
|
// .flatMap { it.tracking }
|
||||||
// .map { it.syncId }
|
// .map { it.syncId }
|
||||||
@@ -45,7 +56,7 @@ object ProtoBackupValidator : AbstractBackupValidator() {
|
|||||||
// .map { context.getString(it.nameRes()) }
|
// .map { context.getString(it.nameRes()) }
|
||||||
// .sorted()
|
// .sorted()
|
||||||
|
|
||||||
return ValidationResult(missingSources, missingTrackers)
|
return ValidationResult(missingSources, missingTrackers, mangasMissingSources)
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun validate(sourceStream: InputStream): ValidationResult {
|
suspend fun validate(sourceStream: InputStream): ValidationResult {
|
||||||
|
|||||||
Reference in New Issue
Block a user