-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmusicbrainzclient.cpp
76 lines (68 loc) · 2.22 KB
/
musicbrainzclient.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "musicbrainzclient.h"
#include <QEventLoop>
#include <QDebug>
#include <QStringList>
MusicBrainZClient::MusicBrainZClient(QObject *parent) :
QObject(parent)
{
}
QStringList MusicBrainZClient::findArtist(const QString &artist)
{
QNetworkRequest req(QUrl::fromEncoded(QUrl("http://musicbrainz.org/ws/2/artist/?query=artist:"+encode(artist)+"&limit=1").toEncoded()));
QNetworkAccessManager man;
QXmlStreamReader reader(man.get(req));
QEventLoop loop;
QObject::connect(&man,SIGNAL(finished(QNetworkReply*)),&loop,SLOT(quit()));
loop.exec();
QStringList resultat;
while(reader.readNextStartElement()&&resultat.isEmpty())
{
if(reader.name()=="artist")
{
resultat<< reader.attributes().value("id").toString();
reader.readNext();
resultat<<reader.readElementText();
}
}
return resultat.isEmpty()?QStringList()<<""<<artist:resultat;
}
QStringList MusicBrainZClient::findAlbum(const QString &album, const QString &artist)
{
QNetworkRequest req(QUrl::fromEncoded(QUrl("http://musicbrainz.org/ws/2/release/?query=arid:"+artist+"AND("+encode(album)+")&limit=1").toEncoded()));
QNetworkAccessManager man;
QXmlStreamReader reader(man.get(req));
QEventLoop loop;
QObject::connect(&man,SIGNAL(finished(QNetworkReply*)),&loop,SLOT(quit()));
loop.exec();
QStringList resultat;
while(reader.readNextStartElement()&&resultat.isEmpty())
{
if(reader.name()=="release")
{
resultat<< reader.attributes().value("id").toString();
reader.readNext();
resultat<<reader.readElementText();
}
}
return resultat.isEmpty()?QStringList()<<""<<album:resultat;
}
QStringList MusicBrainZClient::findArtists(const QString &artist)
{
return QStringList();
}
QStringList MusicBrainZClient::findAlbums(const QString &album, const QString &artist)
{
return QStringList();
}
QString MusicBrainZClient::encode(const QString &term)
{
QStringList terms = term.split(" ");
QString encoded = "";
foreach (QString t, terms)
{
encoded.append("\""+t+"\"OR");
}
encoded = encoded.remove(encoded.length()-2,2);
qDebug()<<encoded;
return encoded;
}