From dd2f97903efeae3d1922d8805ab30016e545d938 Mon Sep 17 00:00:00 2001 From: emeric Date: Sat, 21 Jun 2025 18:37:36 +0200 Subject: [PATCH] Fixed regression when removing an artwork --- src/libs/database/impl/Track.cpp | 10 ++++++-- src/libs/database/test/Track.cpp | 43 ++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/src/libs/database/impl/Track.cpp b/src/libs/database/impl/Track.cpp index a66d9c27..b27575c4 100644 --- a/src/libs/database/impl/Track.cpp +++ b/src/libs/database/impl/Track.cpp @@ -329,14 +329,20 @@ namespace lms::db { session.checkWriteTransaction(); - utils::executeCommand(*session.getDboSession(), "UPDATE track SET preferred_artwork_id = ? WHERE id = ?", artworkId, trackId); + if (artworkId.isValid()) + utils::executeCommand(*session.getDboSession(), "UPDATE track SET preferred_artwork_id = ? WHERE id = ?", artworkId, trackId); + else + utils::executeCommand(*session.getDboSession(), "UPDATE track SET preferred_artwork_id = NULL WHERE id = ?", trackId); } void Track::updatePreferredMediaArtwork(Session& session, TrackId trackId, ArtworkId artworkId) { session.checkWriteTransaction(); - utils::executeCommand(*session.getDboSession(), "UPDATE track SET preferred_media_artwork_id = ? WHERE id = ?", artworkId, trackId); + if (artworkId.isValid()) + utils::executeCommand(*session.getDboSession(), "UPDATE track SET preferred_media_artwork_id = ? WHERE id = ?", artworkId, trackId); + else + utils::executeCommand(*session.getDboSession(), "UPDATE track SET preferred_media_artwork_id = NULL WHERE id = ?", trackId); } std::vector Track::getClusters() const diff --git a/src/libs/database/test/Track.cpp b/src/libs/database/test/Track.cpp index 8d65c4ba..3f1744e0 100644 --- a/src/libs/database/test/Track.cpp +++ b/src/libs/database/test/Track.cpp @@ -21,8 +21,14 @@ #include +#include "database/Artwork.hpp" +#include "database/Image.hpp" + namespace lms::db::tests { + using ScopedArtwork = ScopedEntity; + using ScopedImage = ScopedEntity; + TEST_F(DatabaseFixture, Track) { { @@ -439,4 +445,41 @@ namespace lms::db::tests EXPECT_EQ(tracks.results[3], track3.getId()); } } + + TEST_F(DatabaseFixture, Track_updateArtworks) + { + ScopedTrack track{ session }; + { + auto transaction{ session.createReadTransaction() }; + EXPECT_EQ(track->getPreferredArtwork(), Artwork::pointer{}); + EXPECT_EQ(track->getPreferredMediaArtwork(), Artwork::pointer{}); + } + + ScopedImage image1{ session, "/image1.jpg" }; + ScopedArtwork artwork1{ session, image1.lockAndGet() }; + ScopedImage image2{ session, "/image2.jpg" }; + ScopedArtwork artwork2{ session, image2.lockAndGet() }; + + { + auto transaction{ session.createWriteTransaction() }; + Track::updatePreferredArtwork(session, track->getId(), artwork1->getId()); + Track::updatePreferredMediaArtwork(session, track->getId(), artwork2->getId()); + } + { + auto transaction{ session.createReadTransaction() }; + EXPECT_EQ(track->getPreferredArtwork()->getId(), artwork1->getId()); + EXPECT_EQ(track->getPreferredMediaArtwork()->getId(), artwork2->getId()); + } + + { + auto transaction{ session.createWriteTransaction() }; + Track::updatePreferredArtwork(session, track->getId(), ArtworkId{}); + Track::updatePreferredMediaArtwork(session, track->getId(), ArtworkId{}); + } + { + auto transaction{ session.createReadTransaction() }; + EXPECT_EQ(track->getPreferredArtwork(), Artwork::pointer{}); + EXPECT_EQ(track->getPreferredMediaArtwork(), Artwork::pointer{}); + } + } } // namespace lms::db::tests \ No newline at end of file