diff options
-rw-r--r-- | playerwidget.cpp | 10 | ||||
-rw-r--r-- | webdownloader.cpp | 36 | ||||
-rw-r--r-- | webdownloader.h | 2 |
3 files changed, 32 insertions, 16 deletions
diff --git a/playerwidget.cpp b/playerwidget.cpp index 6eb5821..a595319 100644 --- a/playerwidget.cpp +++ b/playerwidget.cpp @@ -1258,9 +1258,13 @@ void PlayerWidget::webDlDone(){ text.append(QString("<li><a href=\"https://musicbrainz.org/release-group/%1\">%1</a></li>").arg(rg)); } text.append("</ul>"); - text.append(tr("<b>Other Albums</b><ul>")); - for(QMap<QString, QString>::const_iterator it = mWebDownloader->otherData().constBegin(); it != mWebDownloader->otherData().constEnd(); ++it){ - text.append(QString("<li><a href=\"https://musicbrainz.org/release-group/%1\">%2</a></li>").arg(it.value()).arg(it.key())); + const QMap<QString, QString> other = mWebDownloader->otherData(); + text.append(QString(tr("<b>Other Albums (%1):</b><ul>")).arg(QString::number(other.count()))); + QStringList albums = other.values(); + std::sort(albums.begin(), albums.end()); + foreach(QString a, albums){ + QString id = other.key(a); + text.append(QString("<li><a href=\"https://musicbrainz.org/release-group/%1\">%2</a></li>").arg(id).arg(a)); } text.append("</ul>"); mLeftTE->setText(text); 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(); diff --git a/webdownloader.h b/webdownloader.h index 522ec86..4382353 100644 --- a/webdownloader.h +++ b/webdownloader.h @@ -29,4 +29,6 @@ class WebDownloader : public QObject { QMap<QString, QString> mOtherData; }; + + #endif // WEBDOWNLOADER_H |