]> git.sur5r.net Git - minitube/blob - src/ytcategories.cpp
569fcd35f00642922ceaeaca5899c8e795b7976f
[minitube] / src / ytcategories.cpp
1 #include "ytcategories.h"
2 #include "networkaccess.h"
3 #include <QtXml>
4
5 namespace The {
6 NetworkAccess* http();
7 }
8
9 YTCategories::YTCategories(QObject *parent) : QObject(parent) { }
10
11 void YTCategories::loadCategories() {
12     QString url = "http://gdata.youtube.com/schemas/2007/categories.cat?hl=";
13 #if QT_VERSION >= 0x040800
14     url += QLocale::system().uiLanguages().first();
15 #else
16     url += QLocale::system().name().replace('_', '-');
17 #endif
18     qDebug() << url;
19     QObject *reply = The::http()->get(url);
20     connect(reply, SIGNAL(data(QByteArray)), SLOT(parseCategories(QByteArray)));
21     connect(reply, SIGNAL(error(QNetworkReply*)), SLOT(requestError(QNetworkReply*)));
22 }
23
24 void YTCategories::parseCategories(QByteArray bytes) {
25     QList<YTCategory> categories;
26
27     QXmlStreamReader xml(bytes);
28     while (!xml.atEnd()) {
29         xml.readNext();
30         if (xml.isStartElement() && xml.name() == "category") {
31             QString term = xml.attributes().value("term").toString();
32             QString label = xml.attributes().value("label").toString();
33             while(xml.readNextStartElement())
34                 if (xml.name() == "assignable") {
35                     YTCategory category;
36                     category.term = term;
37                     category.label = label;
38                     categories << category;
39                 } else xml.skipCurrentElement();
40         }
41     }
42
43     if (xml.hasError()) {
44         emit error(xml.errorString());
45         return;
46     }
47
48     emit categoriesLoaded(categories);
49 }
50
51 void YTCategories::requestError(QNetworkReply *reply) {
52     emit error(reply->errorString());
53 }