X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=search.cpp;h=df928c70bbbd6ea0ad8b3ca90c070fbb64865640;hb=7a3717897911dc312fc22afe687a42ed0afd1da1;hp=0d137338f8db1965c2c0fcd22a875112dec97181;hpb=8eea7446dbcf2df23b7633db28d6e8e78bb856f3;p=dorian diff --git a/search.cpp b/search.cpp index 0d13733..df928c7 100644 --- a/search.cpp +++ b/search.cpp @@ -1,10 +1,11 @@ -#include -#include #include -#include +#include +#include +#include +#include #include #include -#include +#include #include "search.h" #include "platform.h" @@ -34,7 +35,7 @@ Search::Search(): QObject(0), reply(0), downloadReply(0) void Search::start(const Query &query) { - Trace t("Search::start"); + TRACE; emit beginSearch(); @@ -59,9 +60,11 @@ QList Search::results() return searchResults; } -bool Search::download(const Search::Result &result, const QString &fileName) +void Search::download(const Search::Result &result, const QString &fileName) { - Trace t("Search::download"); + TRACE; + downloadResult = result; + downloadFileName = fileName; qDebug() << "UID" << result.id; Q_UNUSED(fileName); emit beginDownload(0); @@ -71,12 +74,11 @@ bool Search::download(const Search::Result &result, const QString &fileName) request.setUrl(url); downloadReply = downloadManager->get(request); connect(downloadReply, SIGNAL(finished()), this, SLOT(downloadFinished())); - return true; } void Search::finished() { - Trace t("Search::finished"); + TRACE; if (!reply) { return; @@ -127,25 +129,55 @@ void Search::finished() void Search::downloadFinished() { - Trace t("Search::downloadFinished"); + TRACE; if (!downloadReply) { return; } + // Handle download errors + if (QNetworkReply::NoError != downloadReply->error()) { + qCritical() << "Search::downloadFinished: Network error" + << downloadReply->error(); + downloadReply->deleteLater(); + downloadReply = 0; + emit endDownload(Search::DownloadError, downloadResult, downloadFileName); + return; + } + + // Handle redirection QVariant header = downloadReply->header(QNetworkRequest::LocationHeader); if (header.isValid()) { + // Handle redirection: Download again with the new URL qDebug() << "Redirected to" << header; - downloadReply->deleteLater(); QNetworkRequest request; request.setUrl(header.toUrl()); + downloadReply->deleteLater(); downloadReply = downloadManager->get(request); connect(downloadReply, SIGNAL(finished()), this, SLOT(downloadFinished())); + return; + } + + // Handle download success + QByteArray data = downloadReply->readAll(); + qint64 size = (qint64)data.size(); + qDebug() << "Got" << size << "bytes"; + downloadReply->deleteLater(); + downloadReply = 0; + QFile out(downloadFileName); + int status = Search::FileError; + if (out.open(QIODevice::WriteOnly)) { + if (size == out.write(data, size)) { + qDebug() << "Book saved to" << downloadFileName; + status = Search::Ok; + } else { + qCritical() << "Search::downloadFinished: Failed to write" << size + << "bytes to" << downloadFileName; + } + out.close(); } else { - QByteArray data = downloadReply->readAll(); - qDebug() << "Got" << data.size() << "bytes"; - downloadReply->deleteLater(); - downloadReply = 0; - emit endDownload(); + qCritical() << "Search::downloadFinished: Could not open" + << downloadFileName; } + emit endDownload(status, downloadResult, downloadFileName); }