From 7eb267652befb6703720baf98e9bcac0bc0c5df7 Mon Sep 17 00:00:00 2001 From: emeric Date: Wed, 13 Jul 2022 20:18:25 +0200 Subject: [PATCH] Listenbrainz: skip tracks that do not have mbid instead of crashing. fixes #249 --- .../listenbrainz/FeedbacksSynchronizer.cpp | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/src/libs/services/scrobbling/impl/listenbrainz/FeedbacksSynchronizer.cpp b/src/libs/services/scrobbling/impl/listenbrainz/FeedbacksSynchronizer.cpp index 22f8be18..649303f3 100644 --- a/src/libs/services/scrobbling/impl/listenbrainz/FeedbacksSynchronizer.cpp +++ b/src/libs/services/scrobbling/impl/listenbrainz/FeedbacksSynchronizer.cpp @@ -179,25 +179,32 @@ namespace Scrobbling::ListenBrainz switch (type) { case FeedbackType::Love: - starredTrack.modify()->setScrobblingState(ScrobblingState::PendingAdd); - break; + if (starredTrack->getScrobblingState() != ScrobblingState::PendingAdd) + starredTrack.modify()->setScrobblingState(ScrobblingState::PendingAdd); + break; case FeedbackType::Erase: - if (!recordingMBID) - { - LOG(DEBUG) << "Track has no recording MBID: erasing star"; - starredTrack.remove(); - } - else - { - // Send the erase order even if it is not on the remote LB server (it may be - // queued for add, or not) - starredTrack.modify()->setScrobblingState(ScrobblingState::PendingRemove); - } - break; + if (!recordingMBID) + { + LOG(DEBUG) << "Track has no recording MBID: erasing star"; + starredTrack.remove(); + } + else + { + // Send the erase order even if it is not on the remote LB server (it may be + // queued for add, or not) + starredTrack.modify()->setScrobblingState(ScrobblingState::PendingRemove); + } + break; - default: - throw Exception {"Unhandled feedback type"}; + default: + throw Exception {"Unhandled feedback type"}; + } + + if (!recordingMBID) + { + LOG(DEBUG) << "Track has no recording MBID: skipping"; + return; } const std::optional listenBrainzToken {starredTrack->getUser()->getListenBrainzToken()};