summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--playerwidget.cpp10
-rw-r--r--webdownloader.cpp36
-rw-r--r--webdownloader.h2
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