From d029e65b8e6c109d22b3d57835d5b3a095f58f1f Mon Sep 17 00:00:00 2001 From: Aria Moradi Date: Thu, 20 Oct 2022 00:20:39 +0330 Subject: [PATCH] include list of mangas missing source in restore report (#421) --- .../manga/controller/BackupController.kt | 5 ++--- .../impl/backup/AbstractBackupValidator.kt | 12 ------------ .../impl/backup/proto/ProtoBackupImport.kt | 4 +++- .../impl/backup/proto/ProtoBackupValidator.kt | 17 ++++++++++++++--- 4 files changed, 19 insertions(+), 19 deletions(-) delete mode 100644 server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/AbstractBackupValidator.kt diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/BackupController.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/BackupController.kt index 499e2e15..0ede03fe 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/BackupController.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/controller/BackupController.kt @@ -1,7 +1,6 @@ package suwayomi.tachidesk.manga.controller 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.proto.ProtoBackupExport import suwayomi.tachidesk.manga.impl.backup.proto.ProtoBackupImport @@ -144,7 +143,7 @@ object BackupController { ) }, withResults = { - json(HttpCode.OK) + json(HttpCode.OK) } ) @@ -168,7 +167,7 @@ object BackupController { ) }, withResults = { - json(HttpCode.OK) + json(HttpCode.OK) } ) } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/AbstractBackupValidator.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/AbstractBackupValidator.kt deleted file mode 100644 index 85fcce41..00000000 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/AbstractBackupValidator.kt +++ /dev/null @@ -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, val missingTrackers: List) -} diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupImport.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupImport.kt index 125ac59c..8123b87d 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupImport.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupImport.kt @@ -19,10 +19,10 @@ import org.jetbrains.exposed.sql.transactions.transaction import org.jetbrains.exposed.sql.update import suwayomi.tachidesk.manga.impl.Category 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.Manga 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.models.BackupCategory import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupHistory @@ -77,6 +77,8 @@ object ProtoBackupImport : ProtoBackupBase() { Restore Summary: - Missing Sources: ${validationResult.missingSources.joinToString("\n ")} + - Titles missing Sources: + ${validationResult.mangasMissingSources.joinToString("\n ")} - Missing Trackers: ${validationResult.missingTrackers.joinToString("\n ")} """.trimIndent() diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupValidator.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupValidator.kt index 57a1ecd9..2dca58d3 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupValidator.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/backup/proto/ProtoBackupValidator.kt @@ -12,13 +12,18 @@ import okio.gzip import okio.source import org.jetbrains.exposed.sql.select 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.BackupSerializer import suwayomi.tachidesk.manga.model.table.SourceTable import java.io.InputStream -object ProtoBackupValidator : AbstractBackupValidator() { +object ProtoBackupValidator { + data class ValidationResult( + val missingSources: List, + val missingTrackers: List, + val mangasMissingSources: List + ) + fun validate(backup: Backup): ValidationResult { if (backup.backupManga.isEmpty()) { throw Exception("Backup does not contain any manga.") @@ -33,6 +38,12 @@ object ProtoBackupValidator : AbstractBackupValidator() { .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 // .flatMap { it.tracking } // .map { it.syncId } @@ -45,7 +56,7 @@ object ProtoBackupValidator : AbstractBackupValidator() { // .map { context.getString(it.nameRes()) } // .sorted() - return ValidationResult(missingSources, missingTrackers) + return ValidationResult(missingSources, missingTrackers, mangasMissingSources) } suspend fun validate(sourceStream: InputStream): ValidationResult {