diff options
author | Arno <arno@disconnect.de> | 2017-07-06 19:12:47 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2017-07-06 19:12:47 +0200 |
commit | ddd9067ee08e9b37d6a5ecca8ce0c5a53b9b539a (patch) | |
tree | 6f556fef6afee98868f1bfc6a4e69ef9f9b0006a /webdownloader.cpp | |
parent | dbc19ad71cbac5166aa0b82c97b726b464f4fdca (diff) | |
download | BeetPlayer-ddd9067ee08e9b37d6a5ecca8ce0c5a53b9b539a.tar.gz BeetPlayer-ddd9067ee08e9b37d6a5ecca8ce0c5a53b9b539a.tar.bz2 BeetPlayer-ddd9067ee08e9b37d6a5ecca8ce0c5a53b9b539a.zip |
Improved MusicBrainz lookup
Only show official albums and compilations, no bootlegs.
Wow, lambdas are so cool. Now std::predicates are finally useful!
Diffstat (limited to 'webdownloader.cpp')
-rw-r--r-- | webdownloader.cpp | 36 |
1 files changed, 23 insertions, 13 deletions
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(); |