inst = 0;
}
-Search::Search(): QObject(0), reply(0)
+Search::Search(): QObject(0), reply(0), downloadReply(0)
{
manager = new QNetworkAccessManager(this);
+ downloadManager = new QNetworkAccessManager(this);
}
void Search::start(const Query &query)
bool Search::download(const Search::Result &result, const QString &fileName)
{
- Q_UNUSED(result);
+ Trace t("Search::download");
+ qDebug() << "UID" << result.id;
Q_UNUSED(fileName);
emit beginDownload(0);
- emit endDownload();
- return false;
+ QUrl url("http://www.gutenberg.org/ebooks/" + result.id + ".epub");
+ qDebug() << "Requesting" << url;
+ QNetworkRequest request;
+ request.setUrl(url);
+ downloadReply = downloadManager->get(request);
+ connect(downloadReply, SIGNAL(finished()), this, SLOT(downloadFinished()));
+ return true;
}
void Search::finished()
}
QByteArray data = reply->readAll();
- qDebug() << data;
// Parse search results
reply = 0;
emit endSearch();
}
+
+void Search::downloadFinished()
+{
+ Trace t("Search::downloadFinished");
+
+ if (!downloadReply) {
+ return;
+ }
+
+ QVariant header = downloadReply->header(QNetworkRequest::LocationHeader);
+ if (header.isValid()) {
+ qDebug() << "Redirected to" << header;
+ downloadReply->deleteLater();
+ QNetworkRequest request;
+ request.setUrl(header.toUrl());
+ downloadReply = downloadManager->get(request);
+ connect(downloadReply, SIGNAL(finished()), this, SLOT(downloadFinished()));
+ } else {
+ QByteArray data = downloadReply->readAll();
+ qDebug() << "Got" << data.size() << "bytes";
+ downloadReply->deleteLater();
+ downloadReply = 0;
+ emit endDownload();
+ }
+}