]> git.sur5r.net Git - minitube/blob - src/ytsuggester.cpp
Imported Upstream version 2.0
[minitube] / src / ytsuggester.cpp
1 #include "ytsuggester.h"
2 #include <QtXml>
3 #include "networkaccess.h"
4
5 #define GSUGGEST_URL "http://suggestqueries.google.com/complete/search?ds=yt&output=toolbar&hl=%1&q=%2"
6
7 namespace The {
8     NetworkAccess* http();
9 }
10
11 YTSuggester::YTSuggester(QObject *parent) : Suggester(parent) {
12
13 }
14
15 void YTSuggester::suggest(QString query) {
16     if (query.startsWith("http")) return;
17
18 #if QT_VERSION >= 0x040800
19     QString locale = QLocale::system().uiLanguages().first();
20 #else
21     QString locale = QLocale::system().name().replace("_", "-");
22 #endif
23
24     // case for system locales such as "C"
25     if (locale.length() < 2) {
26         locale = "en-US";
27     }
28
29     QString url = QString(GSUGGEST_URL).arg(locale, query);
30
31     QObject *reply = The::http()->get(url);
32     connect(reply, SIGNAL(data(QByteArray)), SLOT(handleNetworkData(QByteArray)));
33 }
34
35 void YTSuggester::handleNetworkData(QByteArray response) {
36     QStringList choices;
37
38     QXmlStreamReader xml(response);
39     while (!xml.atEnd()) {
40         xml.readNext();
41         if (xml.tokenType() == QXmlStreamReader::StartElement) {
42             if (xml.name() == QLatin1String("suggestion")) {
43                 QStringRef str = xml.attributes().value("data");
44                 choices << str.toString();
45             }
46         }
47     }
48     emit ready(choices);
49 }