From c692d78080dc503e795345e6c48a753da10ae153 Mon Sep 17 00:00:00 2001 From: Arno Date: Fri, 7 Jul 2017 17:18:07 +0200 Subject: Improve MusicBrainz search Don't display crap when we don't have a match. Show alternative artists instead, or nothing... --- playerwidget.cpp | 41 +++++++++++++++++++++++++++-------------- webdownloader.cpp | 19 +++++++++++++++++-- webdownloader.h | 2 ++ 3 files changed, 46 insertions(+), 16 deletions(-) diff --git a/playerwidget.cpp b/playerwidget.cpp index 54c2cca..0810487 100644 --- a/playerwidget.cpp +++ b/playerwidget.cpp @@ -1265,22 +1265,35 @@ void PlayerWidget::searchMusicbrainzLeft(){ void PlayerWidget::webDlDone(){ - QString text(tr("Musicbrainz:")); QString aId = mWebDownloader->artistId(); - text.append(QString(tr("")).arg(aId).arg(mWebDownloader->artist())); - foreach(QString alId, mWebDownloader->data()){ - text.append(QString("").arg(alId).arg(mWebDownloader->album())); - } - text.append("
Artist%2
Album%2
"); - const QMap other = mWebDownloader->otherData(); - text.append(QString(tr("All Albums (%1):"); mLeftTE->setText(text); } diff --git a/webdownloader.cpp b/webdownloader.cpp index 897ce80..78941fb 100644 --- a/webdownloader.cpp +++ b/webdownloader.cpp @@ -26,6 +26,8 @@ void WebDownloader::fetchData(QString artist, QString album){ void WebDownloader::dlFinished(QNetworkReply *reply){ mData.clear(); mOtherData.clear(); + mArtistId.clear(); + mAlternateArtists.clear(); QByteArray res = reply->readAll(); QJsonDocument jDoc = QJsonDocument::fromJson(res); QJsonObject docObj = jDoc.object(); @@ -44,16 +46,29 @@ void WebDownloader::dlFinished(QNetworkReply *reply){ mArtistId = aId; std::for_each(relArr.constBegin(), relArr.constEnd(), [this, aId](auto c){ QString id = c.toObject().value("artist-credit").toArray().at(0).toObject().value("artist").toObject().value("id").toString(); + QString linkId = c.toObject().value("release-group").toObject().value("id").toString(); + QString title = c.toObject().value("title").toString().toLower(); if(id == aId){ QString primary = c.toObject().value("release-group").toObject().value("primary-type").toString().toLower(); QString status = c.toObject().value("status").toString().toLower(); if(primary == "album" && status == "official"){ - QString linkId = c.toObject().value("release-group").toObject().value("id").toString(); - QString title = c.toObject().value("title").toString().toLower(); mOtherData.insert(linkId, title); } } }); + }else{ + std::for_each(relArr.constBegin(), relArr.constEnd(), [this](auto c){ + QString disamb = c.toObject().value("artist-credit").toArray().at(0).toObject().value("artist").toObject().value("disambiguation").toString(); + QString name = c.toObject().value("artist-credit").toArray().at(0).toObject().value("artist").toObject().value("name").toString(); + QString linkId = c.toObject().value("artist-credit").toArray().at(0).toObject().value("artist").toObject().value("id").toString(); + QString t; + if(!disamb.isEmpty()){ + t = QString("%1 (%2)").arg(name).arg(disamb); + }else{ + t = name; + } + mAlternateArtists.insert(linkId, t); + }); } reply->deleteLater(); emit done(); diff --git a/webdownloader.h b/webdownloader.h index 6fec7f4..f07ed52 100644 --- a/webdownloader.h +++ b/webdownloader.h @@ -15,6 +15,7 @@ class WebDownloader : public QObject { const QString artistId() const { return mArtistId; } const QStringList data() const { return mData; } const QMap otherData() const { return mOtherData; } + const QMap alternateArtists() const { return mAlternateArtists; } signals: void done(); @@ -29,6 +30,7 @@ class WebDownloader : public QObject { QString mArtistId; QStringList mData; QMap mOtherData; + QMap mAlternateArtists; }; -- cgit v1.2.3-70-g09d2