Search Project Gutenberg.
[dorian] / search.cpp
1 #include <QNetworkAccessManager>
2 #include <QNetworkReply>
3 #include <QNetworkRequest>
4
5 #include "search.h"
6 #include "platform.h"
7 #include "trace.h"
8
9 Search *inst = 0;
10
11 Search *Search::instance()
12 {
13     if (!inst) {
14         inst = new Search();
15     }
16     return inst;
17 }
18
19 void Search::close()
20 {
21     delete inst;
22     inst = 0;
23 }
24
25 Search::Search(): QObject(0), reply(0)
26 {
27     manager = new QNetworkAccessManager(this);
28     connect(manager, SIGNAL(finished(QNetworkReply *)),
29             this, SLOT(onFinished(QNetworkReply *)));
30 }
31
32 void Search::start(const Query &query)
33 {
34     Trace t("Search::start");
35
36     emit beginSearch();
37
38     QNetworkRequest request;
39     request.setUrl(QUrl("http://www.gutenberg.org/catalog/world/results"));
40     // request.setRawHeader("User-Agent", "Dorian " + Platform::version());
41     QByteArray data;
42     data = "title=" + QUrl::toPercentEncoding(query.title) + "&author=" +
43            QUrl::toPercentEncoding(query.author);
44     qDebug() << "Request:" << data;
45     reply = manager->post(request, data);
46     connect(reply, SIGNAL(finished()), this, SLOT(finished()));
47 }
48
49 QList<Search::Result> Search::results()
50 {
51     QList<Search::Result> ret;
52     return ret;
53 }
54
55 bool Search::download(const Search::Result &result, const QString &fileName)
56 {
57     Q_UNUSED(result);
58     Q_UNUSED(fileName);
59     emit beginDownload(0);
60     emit endDownload();
61     return false;
62 }
63
64 void Search::finished()
65 {
66     Trace t("Search::finished");
67     QByteArray data = reply->readAll();
68     qDebug() << data;
69     reply->deleteLater();
70     emit endSearch();
71 }