From ddd9067ee08e9b37d6a5ecca8ce0c5a53b9b539a Mon Sep 17 00:00:00 2001 From: Arno Date: Thu, 6 Jul 2017 19:12:47 +0200 Subject: Improved MusicBrainz lookup Only show official albums and compilations, no bootlegs. Wow, lambdas are so cool. Now std::predicates are finally useful! --- webdownloader.cpp | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) (limited to 'webdownloader.cpp') diff --git a/webdownloader.cpp b/webdownloader.cpp index 8035fe1..c0505b9 100644 --- a/webdownloader.cpp +++ b/webdownloader.cpp @@ -27,22 +27,32 @@ void WebDownloader::dlFinished(QNetworkReply *reply){ mData.clear(); mOtherData.clear(); QByteArray res = reply->readAll(); - QJsonParseError err; - QJsonDocument jDoc = QJsonDocument::fromJson(res, &err); + QJsonDocument jDoc = QJsonDocument::fromJson(res); QJsonObject docObj = jDoc.object(); QJsonArray relArr = docObj.value("releases").toArray(); - for(QJsonArray::const_iterator it = relArr.constBegin(); it != relArr.constEnd(); ++it){ - QJsonValue v = *it; - QString title = v.toObject().value("title").toString().toLower(); - QString curId = v.toObject().value("release-group").toObject().value("id").toString(); - qDebug() << mAlbum << title; - if(mAlbum == title){ - if(!mData.contains(curId)){ - mData << curId; - } - }else{ - mOtherData.insert(title, curId); + QJsonArray::const_iterator it = std::find_if(relArr.constBegin(), relArr.constEnd(), [this](auto c) { + QString title = c.toObject().value("title").toString().toLower(); + return title == mAlbum; + }); + if(it != relArr.constEnd()){ + QJsonValue titleRes = *it; + QString curId = titleRes.toObject().value("release-group").toObject().value("id").toString(); + if(!mData.contains(curId)){ + mData << curId; } + QString aId = titleRes.toObject().value("artist-credit").toArray().at(0).toObject().value("artist").toObject().value("id").toString(); + 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(); + 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); + } + } + }); } reply->deleteLater(); emit done(); -- cgit v1.2.3-70-g09d2