diff --git a/ChangeLog b/ChangeLog index 115541ef..459fca7f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -19481,3 +19481,8 @@ * Added a 'libcoverart' dependency. * Added support for displaying cover art in the MusicBrainz release chooser. +2020-02-03 Fred Gleason + * Fixed a bug in the MusicBrainz CD lookup that caused it to + confound track info in multi-disc releases. + * Fixed a bug in the MusicBrainz CD lookup that caused it to + segfault when processing release with no Label information. diff --git a/lib/rdmblookup.cpp b/lib/rdmblookup.cpp index fcaa9d95..f6aaa31b 100644 --- a/lib/rdmblookup.cpp +++ b/lib/rdmblookup.cpp @@ -262,7 +262,7 @@ RDDiscLookup::Result RDMbLookup::ProcessRelease(MusicBrainz5::CRelease *release) // Extract Extended Release Data // MusicBrainz5::CQuery::tParamMap params; - params["inc"]="artists labels recordings isrcs"; + params["inc"]="artists labels recordings isrcs discids"; MusicBrainz5::CMetadata metadata=mbq.Query("release",release->ID(),"",params); if(metadata.Release()) { // @@ -284,7 +284,7 @@ RDDiscLookup::Result RDMbLookup::ProcessRelease(MusicBrainz5::CRelease *release) // Get Labels // MusicBrainz5::CLabelInfoList *labels=metadata.Release()->LabelInfoList(); - if(labels) { + if(labels&&labels->Item(0)) { discRecord()->setDiscLabel(QString::fromUtf8(labels->Item(0)-> Label()->Name().c_str())); } @@ -292,25 +292,23 @@ RDDiscLookup::Result RDMbLookup::ProcessRelease(MusicBrainz5::CRelease *release) // // Get Per-Track Data // - MusicBrainz5::CMediumList *media=metadata.Release()->MediumList(); - if(media) { - for(int j=0;jNumItems();j++) { - MusicBrainz5::CMedium *medium=media->Item(j); - MusicBrainz5::CTrackList *tracks=medium->TrackList(); - for(int k=0;kNumItems();k++) { - MusicBrainz5::CTrack *track=tracks->Item(k); - MusicBrainz5::CRecording *recording=track->Recording(); - discRecord()-> - setTrackTitle(k,QString::fromUtf8(recording->Title().c_str())); - discRecord()-> - setTrackMbId(k,QString::fromUtf8(recording->ID().c_str())); - MusicBrainz5::CISRCList *isrcs=recording->ISRCList(); - if(isrcs) { - if(isrcs->NumItems()>0) { - discRecord()-> - setIsrc(k,RDDiscLookup::normalizedIsrc(QString::fromUtf8(isrcs-> - Item(0)->ID().c_str()))); - } + MusicBrainz5::CMediumList media=metadata.Release()->MediaMatchingDiscID(discRecord()->discMbId().toStdString()); + for(int j=0;jTrackList(); + for(int k=0;kNumItems();k++) { + MusicBrainz5::CTrack *track=tracks->Item(k); + MusicBrainz5::CRecording *recording=track->Recording(); + discRecord()-> + setTrackTitle(k,QString::fromUtf8(recording->Title().c_str())); + discRecord()-> + setTrackMbId(k,QString::fromUtf8(recording->ID().c_str())); + MusicBrainz5::CISRCList *isrcs=recording->ISRCList(); + if(isrcs) { + if(isrcs->NumItems()>0) { + discRecord()-> + setIsrc(k,RDDiscLookup::normalizedIsrc(QString::fromUtf8(isrcs-> + Item(0)->ID().c_str()))); } } }