summaryrefslogtreecommitdiffstats
path: root/webdownloader.cpp
diff options
context:
space:
mode:
authorArno <arno@disconnect.de>2017-07-06 10:33:13 +0200
committerArno <arno@disconnect.de>2017-07-06 10:33:13 +0200
commitdbc19ad71cbac5166aa0b82c97b726b464f4fdca (patch)
tree11b6de922f37b830eba36a9961b4deaefd68668c /webdownloader.cpp
parentf9771c52ff6b350c29db70216b79bb4f60081763 (diff)
downloadBeetPlayer-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.cpp49
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();
+}