2020-02-03 Fred Gleason <fredg@paravelsystems.com>

* 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.
This commit is contained in:
Fred Gleason 2020-02-03 10:50:47 -05:00
parent b6033e9678
commit c3376084b6
2 changed files with 24 additions and 21 deletions

View File

@ -19481,3 +19481,8 @@
* Added a 'libcoverart' dependency. * Added a 'libcoverart' dependency.
* Added support for displaying cover art in the MusicBrainz release * Added support for displaying cover art in the MusicBrainz release
chooser. chooser.
2020-02-03 Fred Gleason <fredg@paravelsystems.com>
* 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.

View File

@ -262,7 +262,7 @@ RDDiscLookup::Result RDMbLookup::ProcessRelease(MusicBrainz5::CRelease *release)
// Extract Extended Release Data // Extract Extended Release Data
// //
MusicBrainz5::CQuery::tParamMap params; 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); MusicBrainz5::CMetadata metadata=mbq.Query("release",release->ID(),"",params);
if(metadata.Release()) { if(metadata.Release()) {
// //
@ -284,7 +284,7 @@ RDDiscLookup::Result RDMbLookup::ProcessRelease(MusicBrainz5::CRelease *release)
// Get Labels // Get Labels
// //
MusicBrainz5::CLabelInfoList *labels=metadata.Release()->LabelInfoList(); MusicBrainz5::CLabelInfoList *labels=metadata.Release()->LabelInfoList();
if(labels) { if(labels&&labels->Item(0)) {
discRecord()->setDiscLabel(QString::fromUtf8(labels->Item(0)-> discRecord()->setDiscLabel(QString::fromUtf8(labels->Item(0)->
Label()->Name().c_str())); Label()->Name().c_str()));
} }
@ -292,25 +292,23 @@ RDDiscLookup::Result RDMbLookup::ProcessRelease(MusicBrainz5::CRelease *release)
// //
// Get Per-Track Data // Get Per-Track Data
// //
MusicBrainz5::CMediumList *media=metadata.Release()->MediumList(); MusicBrainz5::CMediumList media=metadata.Release()->MediaMatchingDiscID(discRecord()->discMbId().toStdString());
if(media) { for(int j=0;j<media.NumItems();j++) {
for(int j=0;j<media->NumItems();j++) { MusicBrainz5::CMedium *medium=media.Item(j);
MusicBrainz5::CMedium *medium=media->Item(j); MusicBrainz5::CTrackList *tracks=medium->TrackList();
MusicBrainz5::CTrackList *tracks=medium->TrackList(); for(int k=0;k<tracks->NumItems();k++) {
for(int k=0;k<tracks->NumItems();k++) { MusicBrainz5::CTrack *track=tracks->Item(k);
MusicBrainz5::CTrack *track=tracks->Item(k); MusicBrainz5::CRecording *recording=track->Recording();
MusicBrainz5::CRecording *recording=track->Recording(); discRecord()->
discRecord()-> setTrackTitle(k,QString::fromUtf8(recording->Title().c_str()));
setTrackTitle(k,QString::fromUtf8(recording->Title().c_str())); discRecord()->
discRecord()-> setTrackMbId(k,QString::fromUtf8(recording->ID().c_str()));
setTrackMbId(k,QString::fromUtf8(recording->ID().c_str())); MusicBrainz5::CISRCList *isrcs=recording->ISRCList();
MusicBrainz5::CISRCList *isrcs=recording->ISRCList(); if(isrcs) {
if(isrcs) { if(isrcs->NumItems()>0) {
if(isrcs->NumItems()>0) { discRecord()->
discRecord()-> setIsrc(k,RDDiscLookup::normalizedIsrc(QString::fromUtf8(isrcs->
setIsrc(k,RDDiscLookup::normalizedIsrc(QString::fromUtf8(isrcs-> Item(0)->ID().c_str())));
Item(0)->ID().c_str())));
}
} }
} }
} }