diff options
author | Arno <arno@disconnect.de> | 2017-07-06 10:33:13 +0200 |
---|---|---|
committer | Arno <arno@disconnect.de> | 2017-07-06 10:33:13 +0200 |
commit | dbc19ad71cbac5166aa0b82c97b726b464f4fdca (patch) | |
tree | 11b6de922f37b830eba36a9961b4deaefd68668c /webdownloader.cpp | |
parent | f9771c52ff6b350c29db70216b79bb4f60081763 (diff) | |
download | BeetPlayer-dbc19ad71cbac5166aa0b82c97b726b464f4fdca.tar.gz BeetPlayer-dbc19ad71cbac5166aa0b82c97b726b464f4fdca.tar.bz2 BeetPlayer-dbc19ad71cbac5166aa0b82c97b726b464f4fdca.zip |
Implemented MusicBrainz lookup
Wow, what a convoluted api, to say the least...
They have documentation, which is good, but the query syntax definitely
needs more explaining, foremost how to encode non-ASCII characters and
names with whitspaces...
Well, it kinda works, but the Other Albums sections can be waaaaay
off...
Diffstat (limited to 'webdownloader.cpp')
-rw-r--r-- | webdownloader.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/webdownloader.cpp b/webdownloader.cpp new file mode 100644 index 0000000..8035fe1 --- /dev/null +++ b/webdownloader.cpp @@ -0,0 +1,49 @@ +#include <QNetworkReply> +#include <QNetworkRequest> +#include <QJsonDocument> +#include <QJsonObject> +#include <QJsonArray> + +#include "webdownloader.h" + +WebDownloader::WebDownloader(QObject *parent) : QObject(parent) { + mAccessMgr = new QNetworkAccessManager(this); + connect(mAccessMgr, &QNetworkAccessManager::finished, this, &WebDownloader::dlFinished); +} + +void WebDownloader::fetchData(QString artist, QString album){ + mArtist = artist; + mAlbum = album; + QString artistQ = QString("artist:\"%1\"").arg(artist); + QByteArray peq = QUrl::toPercentEncoding(artistQ); + QString url = QString("https://musicbrainz.org/ws/2/release/?query=%1&fmt=json&limit=100").arg(QString(peq)); + QUrl aUrl(url); + QNetworkRequest req(aUrl); + req.setHeader(QNetworkRequest::UserAgentHeader, "Beetplayer/1.0.0 (beetplayer@d-tor.org"); + mAccessMgr->get(req); +} + +void WebDownloader::dlFinished(QNetworkReply *reply){ + mData.clear(); + mOtherData.clear(); + QByteArray res = reply->readAll(); + QJsonParseError err; + QJsonDocument jDoc = QJsonDocument::fromJson(res, &err); + 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); + } + } + reply->deleteLater(); + emit done(); +} |