From 6dd9ed7fb0816b2f163bec43d04c433099e7e529 Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Tue, 7 May 2024 15:30:45 +0200 Subject: [PATCH] Fix/prevent importing unsupported trackers from backup II (#945) * Properly prevent importing unsupported trackers from backup Missed the early return in case no tracker record exists in the database in 2f362abb91be875e943b1364eb86d70a4144dd6f... * Remove incorrect non null assertion Prevented unbinding track records of unsupported trackers --- .../impl/backup/proto/ProtoBackupImport.kt | 9 +++++---- .../tachidesk/manga/impl/track/Track.kt | 2 +- ...moveTrackRecordsOfUnsupportedTrackersII.kt | 19 +++++++++++++++++++ 3 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0038_RemoveTrackRecordsOfUnsupportedTrackersII.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 d7d8f8ef..ff7a4da4 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 @@ -401,16 +401,17 @@ object ProtoBackupImport : ProtoBackupBase() { val (existingTracks, newTracks) = tracks.mapNotNull { backupTrack -> val track = backupTrack.toTrack(mangaId) - val dbTrack = - dbTrackRecordsByTrackerId[backupTrack.syncId] - ?: // new track - return@mapNotNull track val isUnsupportedTracker = TrackerManager.getTracker(track.sync_id) == null if (isUnsupportedTracker) { return@mapNotNull null } + val dbTrack = + dbTrackRecordsByTrackerId[backupTrack.syncId] + ?: // new track + return@mapNotNull track + 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 baa624df..de2e4c9e 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 @@ -204,7 +204,7 @@ object Track { TrackRecordTable.select { TrackRecordTable.id eq recordId }.first() } - val tracker = TrackerManager.getTracker(recordDb[TrackRecordTable.trackerId])!! + val tracker = TrackerManager.getTracker(recordDb[TrackRecordTable.trackerId]) if (deleteRemoteTrack == true && tracker is DeletableTrackService) { tracker.delete(recordDb.toTrack()) diff --git a/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0038_RemoveTrackRecordsOfUnsupportedTrackersII.kt b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0038_RemoveTrackRecordsOfUnsupportedTrackersII.kt new file mode 100644 index 00000000..2d24cfd6 --- /dev/null +++ b/server/src/main/kotlin/suwayomi/tachidesk/server/database/migration/M0038_RemoveTrackRecordsOfUnsupportedTrackersII.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 M0038_RemoveTrackRecordsOfUnsupportedTrackersII : SQLMigration() { + override val sql: String = + """ + DELETE FROM TRACKRECORD WHERE SYNC_ID NOT IN (${TrackerManager.MYANIMELIST}, ${TrackerManager.ANILIST}, ${TrackerManager.MANGA_UPDATES}) + """.trimIndent() +}