summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2017-07-07 17:18:07 +0200
committerArno <arno@disconnect.de>2017-07-07 17:18:07 +0200
commitc692d78080dc503e795345e6c48a753da10ae153 (patch)
tree038bd532d5239beeb50b07b04e902e97b43ebabd
parent61d7332826007600367985b953f2dac2453ea765 (diff)
downloadBeetPlayer-c692d78080dc503e795345e6c48a753da10ae153.tar.gz
BeetPlayer-c692d78080dc503e795345e6c48a753da10ae153.tar.bz2
BeetPlayer-c692d78080dc503e795345e6c48a753da10ae153.zip
Improve MusicBrainz search
Don't display crap when we don't have a match. Show alternative artists instead, or nothing...
-rw-r--r--playerwidget.cpp41
-rw-r--r--webdownloader.cpp19
-rw-r--r--webdownloader.h2
3 files changed, 46 insertions, 16 deletions
diff --git a/playerwidget.cpp b/playerwidget.cpp
index 54c2cca..0810487 100644
--- a/playerwidget.cpp
+++ b/playerwidget.cpp
@@ -1265,22 +1265,35 @@ void PlayerWidget::searchMusicbrainzLeft(){
void PlayerWidget::webDlDone(){
- QString text(tr("<b>Musicbrainz:</b><table style=\"margin-bottom: 20px\">"));
QString aId = mWebDownloader->artistId();
- text.append(QString(tr("<tr><td style=\"padding-left: 30px\">Artist</td><td style=\"padding-left: 30px\"><a href=\"https://musicbrainz.org/artist/%1\">%2</a></td></tr>")).arg(aId).arg(mWebDownloader->artist()));
- foreach(QString alId, mWebDownloader->data()){
- text.append(QString("<tr><td style=\"padding-left: 30px\">Album</td><td style=\"padding-left: 30px\"><a href=\"https://musicbrainz.org/release-group/%1\">%2</a></td></tr>").arg(alId).arg(mWebDownloader->album()));
- }
- text.append("</table>");
- const QMap<QString, QString> other = mWebDownloader->otherData();
- text.append(QString(tr("<b>All 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));
+ QString text;
+ if(!aId.isEmpty()){
+ text.append(QString(tr("<b>Musicbrainz:</b><table style=\"margin-bottom: 20px\">")));
+ text.append(QString(tr("<tr><td style=\"padding-left: 30px\">Artist</td><td style=\"padding-left: 30px\"><a href=\"https://musicbrainz.org/artist/%1\">%2</a></td></tr>")).arg(aId).arg(mWebDownloader->artist()));
+ foreach(QString alId, mWebDownloader->data()){
+ text.append(QString("<tr><td style=\"padding-left: 30px\">Album</td><td style=\"padding-left: 30px\"><a href=\"https://musicbrainz.org/release-group/%1\">%2</a></td></tr>").arg(alId).arg(mWebDownloader->album()));
+ }
+ text.append("</table>");
+ const QMap<QString, QString> other = mWebDownloader->otherData();
+ text.append(QString(tr("<b>All 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>");
+ }else{
+ text.append(QString(tr("<b>Musicbrainz: No match!</b><br/>")));
+ const QMap<QString, QString> alt = mWebDownloader->alternateArtists();
+ if(!alt.isEmpty()){
+ text.append(QString(tr("<b>Guesses:</b><ul>")));
+ for(QMap<QString, QString>::const_iterator it = alt.constBegin(); it != alt.constEnd(); ++it){
+ text.append(QString("<li><a href=\"https://musicbrainz.org/artist/%1\">%2</a></li>").arg(it.key()).arg(it.value()));
+ }
+ text.append("</ul>");
+ }
}
- text.append("</ul>");
mLeftTE->setText(text);
}
diff --git a/webdownloader.cpp b/webdownloader.cpp
index 897ce80..78941fb 100644
--- a/webdownloader.cpp
+++ b/webdownloader.cpp
@@ -26,6 +26,8 @@ void WebDownloader::fetchData(QString artist, QString album){
void WebDownloader::dlFinished(QNetworkReply *reply){
mData.clear();
mOtherData.clear();
+ mArtistId.clear();
+ mAlternateArtists.clear();
QByteArray res = reply->readAll();
QJsonDocument jDoc = QJsonDocument::fromJson(res);
QJsonObject docObj = jDoc.object();
@@ -44,16 +46,29 @@ void WebDownloader::dlFinished(QNetworkReply *reply){
mArtistId = aId;
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();
+ QString linkId = c.toObject().value("release-group").toObject().value("id").toString();
+ QString title = c.toObject().value("title").toString().toLower();
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);
}
}
});
+ }else{
+ std::for_each(relArr.constBegin(), relArr.constEnd(), [this](auto c){
+ QString disamb = c.toObject().value("artist-credit").toArray().at(0).toObject().value("artist").toObject().value("disambiguation").toString();
+ QString name = c.toObject().value("artist-credit").toArray().at(0).toObject().value("artist").toObject().value("name").toString();
+ QString linkId = c.toObject().value("artist-credit").toArray().at(0).toObject().value("artist").toObject().value("id").toString();
+ QString t;
+ if(!disamb.isEmpty()){
+ t = QString("%1 (%2)").arg(name).arg(disamb);
+ }else{
+ t = name;
+ }
+ mAlternateArtists.insert(linkId, t);
+ });
}
reply->deleteLater();
emit done();
diff --git a/webdownloader.h b/webdownloader.h
index 6fec7f4..f07ed52 100644
--- a/webdownloader.h
+++ b/webdownloader.h
@@ -15,6 +15,7 @@ class WebDownloader : public QObject {
const QString artistId() const { return mArtistId; }
const QStringList data() const { return mData; }
const QMap<QString, QString> otherData() const { return mOtherData; }
+ const QMap<QString, QString> alternateArtists() const { return mAlternateArtists; }
signals:
void done();
@@ -29,6 +30,7 @@ class WebDownloader : public QObject {
QString mArtistId;
QStringList mData;
QMap<QString, QString> mOtherData;
+ QMap<QString, QString> mAlternateArtists;
};