}
SearchResultsDialog *dialog = new SearchResultsDialog(results, this);
+ // FIXME
connect(dialog, SIGNAL(add(const Search::Result &)),
this, SLOT(onAddSearchResult(const Search::Result &)));
dialog->show();
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();
+ }
+}
QList<Result> results();
bool download(const Result &result, const QString &fileName);
void finished();
+ void downloadFinished();
-protected:
+private:
explicit Search();
QNetworkAccessManager *manager;
+ QNetworkAccessManager *downloadManager;
QNetworkReply *reply;
+ QNetworkReply *downloadReply;
QList<Result> searchResults;
};
addItemAction(tr("Download book"), this, SLOT(onDownload()));
connect(list, SIGNAL(activated(const QModelIndex &)),
this, SLOT(onItemActivated(const QModelIndex &)));
+ Search *search = Search::instance();
+ connect(search, SIGNAL(beginDownload(int)), this, SLOT(onBeginDownload(int)));
+ connect(search, SIGNAL(endDownload()), this, SLOT(onEndDownload()));
}
void SearchResultsDialog::onItemActivated(const QModelIndex &index)
int ret = d->exec();
if (ret == QDialog::Accepted) {
qDebug() << "Accepted -> Start download";
+ QString fileName = downloadName();
+ qDebug() << "Downloading to" << fileName;
+ Search::instance()->download(result, fileName);
}
}
{
onItemActivated(list->currentIndex());
}
+
+QString SearchResultsDialog::downloadName() const
+{
+ // FIXME
+ return QString("/tmp/book.epub");
+}
+
+void SearchResultsDialog::onBeginDownload(int size)
+{
+ Trace t("SearchResultsDialog::onBeginDownload");
+}
+
+void SearchResultsDialog::onEndDownload()
+{
+ Trace t("SearchResultsDialog::onEndDownload");
+}
protected slots:
void onDownload();
void onItemActivated(const QModelIndex &index);
+ void onBeginDownload(int size);
+ void onEndDownload();
protected:
+ QString downloadName() const;
+
+private:
const QList<Search::Result> results;
ListView *list;
QStringList data;