From 2f362abb91be875e943b1364eb86d70a4144dd6f Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Mon, 6 May 2024 15:29:34 +0200 Subject: [PATCH] Prevent importing unsupported tracker from backup (#944) * Prevent importing unsupported tracker from backup This will lead to graphql field validation errors (non null declared field is null) once the track records get used, since they will point to trackers that do not exist * Delete track records of unsupporter trackers * Always return all track records of manga Was already partially changed in 7df5f1c4c4408cfbbd56697ba10f018393df2b4a but this occurrence was missed --- .../impl/backup/proto/ProtoBackupImport.kt | 6 +++ .../tachidesk/manga/impl/track/Track.kt | 38 +++++++++---------- ...RemoveTrackRecordsOfUnsupportedTrackers.kt | 19 ++++++++++ 3 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0037_RemoveTrackRecordsOfUnsupportedTrackers.kt 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 10b3c176..d7d8f8ef 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 @@ -41,6 +41,7 @@ import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupHistory import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupManga import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupSerializer import suwayomi.tachidesk.manga.impl.backup.proto.models.BackupTracking +import suwayomi.tachidesk.manga.impl.track.tracker.TrackerManager import suwayomi.tachidesk.manga.impl.track.tracker.model.toTrack import suwayomi.tachidesk.manga.impl.track.tracker.model.toTrackRecordDataClass import suwayomi.tachidesk.manga.model.dataclass.TrackRecordDataClass @@ -405,6 +406,11 @@ object ProtoBackupImport : ProtoBackupBase() { ?: // new track return@mapNotNull track + val isUnsupportedTracker = TrackerManager.getTracker(track.sync_id) == null + if (isUnsupportedTracker) { + return@mapNotNull null + } + if (track.toTrackRecordDataClass().forComparison() == dbTrack.toTrackRecordDataClass().forComparison()) { return@mapNotNull null } diff --git a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/Track.kt b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/Track.kt index e3c6e951..baa624df 100644 --- a/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/Track.kt +++ b/server/src/main/kotlin/suwayomi/tachidesk/manga/impl/track/Track.kt @@ -81,27 +81,25 @@ object Track { }.associateBy { it.trackerId } val trackers = TrackerManager.services - return trackers - .filter { it.isLoggedIn } - .map { - val record = recordMap[it.id] - if (record != null) { - val track = - Track.create(it.id).also { t -> - t.score = record.score.toFloat() - } - record.scoreString = it.displayScore(track) - } - MangaTrackerDataClass( - id = it.id, - name = it.name, - icon = proxyThumbnailUrl(it.id), - statusList = it.getStatusList(), - statusTextMap = it.getStatusList().associateWith { k -> it.getStatus(k).orEmpty() }, - scoreList = it.getScoreList(), - record = record, - ) + return trackers.map { + val record = recordMap[it.id] + if (record != null) { + val track = + Track.create(it.id).also { t -> + t.score = record.score.toFloat() + } + record.scoreString = it.displayScore(track) } + MangaTrackerDataClass( + id = it.id, + name = it.name, + icon = proxyThumbnailUrl(it.id), + statusList = it.getStatusList(), + statusTextMap = it.getStatusList().associateWith { k -> it.getStatus(k).orEmpty() }, + scoreList = it.getScoreList(), + record = record, + ) + } } suspend fun search(input: SearchInput): List { diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0037_RemoveTrackRecordsOfUnsupportedTrackers.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0037_RemoveTrackRecordsOfUnsupportedTrackers.kt new file mode 100644 index 00000000..127ac4ca --- /dev/null +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0037_RemoveTrackRecordsOfUnsupportedTrackers.kt @@ -0,0 +1,19 @@ +package suwayomi.tachidesk.server.database.migration + +/* + * 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 de.neonew.exposed.migrations.helpers.SQLMigration +import suwayomi.tachidesk.manga.impl.track.tracker.TrackerManager + +@Suppress("ClassName", "unused") +class M0037_RemoveTrackRecordsOfUnsupportedTrackers : SQLMigration() { + override val sql: String = + """ + DELETE FROM TRACKRECORD WHERE SYNC_ID NOT IN (${TrackerManager.MYANIMELIST}, ${TrackerManager.ANILIST}, ${TrackerManager.MANGA_UPDATES}) + """.trimIndent() +}