summaryrefslogtreecommitdiffstats
path: root/webdownloader.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2017-07-06 19:12:47 +0200
committerArno <arno@disconnect.de>2017-07-06 19:12:47 +0200
commitddd9067ee08e9b37d6a5ecca8ce0c5a53b9b539a (patch)
tree6f556fef6afee98868f1bfc6a4e69ef9f9b0006a /webdownloader.cpp
parentdbc19ad71cbac5166aa0b82c97b726b464f4fdca (diff)
downloadBeetPlayer-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.cpp36
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();