From 91a74abca8563eaf7dc02d072fac227fd6a88442 Mon Sep 17 00:00:00 2001 From: Max-Wilhelm Bruker Date: Thu, 8 Apr 2010 17:18:13 +0200 Subject: [PATCH] rewrote picture downloader --- cockatrice/src/carddatabase.cpp | 89 ++++++++++++++++++--------------- cockatrice/src/carddatabase.h | 14 +++--- 2 files changed, 58 insertions(+), 45 deletions(-) diff --git a/cockatrice/src/carddatabase.cpp b/cockatrice/src/carddatabase.cpp index 0f0d5dd2..8a2065bb 100644 --- a/cockatrice/src/carddatabase.cpp +++ b/cockatrice/src/carddatabase.cpp @@ -9,6 +9,9 @@ #include #include #include +#include +#include +#include CardSet::CardSet(const QString &_shortName, const QString &_longName) : shortName(_shortName), longName(_longName) @@ -235,8 +238,8 @@ CardDatabase::CardDatabase(QObject *parent) connect(settingsCache, SIGNAL(cardDatabasePathChanged()), this, SLOT(loadCardDatabase())); connect(settingsCache, SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged())); - http = new QHttp(this); - connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(picDownloadFinished(int, bool))); + networkManager = new QNetworkAccessManager(this); + connect(networkManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(picDownloadFinished(QNetworkReply *))); loadCardDatabase(); @@ -317,46 +320,54 @@ void CardDatabase::clearPixmapCache() void CardDatabase::startPicDownload(CardInfo *card) { - QBuffer *buffer = new QBuffer(this); - buffer->open(QIODevice::ReadWrite); - QUrl url(card->getPicURL()); - http->setHost(url.host(), url.port(80)); - int dlID = http->get(url.path(), buffer); - downloadBuffers.insert(dlID, QPair(card, buffer)); -} - -void CardDatabase::picDownloadFinished(int id, bool error) -{ - if (!downloadBuffers.contains(id)) + if (card->getPicURL().isEmpty()) return; - const QPair &temp = downloadBuffers.value(id); - CardInfo *card = temp.first; - QBuffer *buffer = temp.second; - downloadBuffers.remove(id); - buffer->close(); - - if (!error) { - QString picsPath = settingsCache->getPicsPath(); - const QByteArray &picData = buffer->data(); - QPixmap testPixmap; - if (testPixmap.loadFromData(picData)) { - if (!QDir(QString(picsPath + "/downloadedPics/")).exists()) { - QDir dir(picsPath); - if (!dir.exists()) - return; - dir.mkdir("downloadedPics"); - } - QFile newPic(picsPath + "/downloadedPics/" + card->getCorrectedName() + ".full.jpg"); - if (!newPic.open(QIODevice::WriteOnly)) - return; - newPic.write(picData); - newPic.close(); - - card->updatePixmapCache(); - } + cardsToDownload.append(card); + if (!downloadRunning) + startNextPicDownload(); +} + +void CardDatabase::startNextPicDownload() +{ + if (cardsToDownload.isEmpty()) { + downloadRunning = false; + return; } - delete buffer; + + downloadRunning = true; + + CardInfo *card = cardsToDownload.takeFirst(); + QNetworkRequest req(QUrl(card->getPicURL())); + req.setOriginatingObject(card); + networkManager->get(req); +} + +void CardDatabase::picDownloadFinished(QNetworkReply *reply) +{ + CardInfo *card = static_cast(reply->request().originatingObject()); + + QString picsPath = settingsCache->getPicsPath(); + const QByteArray &picData = reply->readAll(); + QPixmap testPixmap; + if (testPixmap.loadFromData(picData)) { + if (!QDir(QString(picsPath + "/downloadedPics/")).exists()) { + QDir dir(picsPath); + if (!dir.exists()) + return; + dir.mkdir("downloadedPics"); + } + QFile newPic(picsPath + "/downloadedPics/" + card->getCorrectedName() + ".full.jpg"); + if (!newPic.open(QIODevice::WriteOnly)) + return; + newPic.write(picData); + newPic.close(); + + card->updatePixmapCache(); + } + + reply->deleteLater(); + startNextPicDownload(); } void CardDatabase::loadSetsFromXml(QXmlStreamReader &xml) diff --git a/cockatrice/src/carddatabase.h b/cockatrice/src/carddatabase.h index 04944a06..a544b7e4 100644 --- a/cockatrice/src/carddatabase.h +++ b/cockatrice/src/carddatabase.h @@ -7,11 +7,12 @@ #include #include #include -#include -#include class CardDatabase; class CardInfo; +class QNetworkAccessManager; +class QNetworkReply; +class QNetworkRequest; class CardSet : public QList { private: @@ -93,13 +94,14 @@ class CardDatabase : public QObject { protected: QHash cardHash; QHash setHash; - QMap > downloadBuffers; + QNetworkAccessManager *networkManager; + QList cardsToDownload; + bool downloadRunning; CardInfo *noCard; private: void loadCardsFromXml(QXmlStreamReader &xml); void loadSetsFromXml(QXmlStreamReader &xml); - bool picDownload; - QHttp *http; + void startNextPicDownload(); public: CardDatabase(QObject *parent = 0); ~CardDatabase(); @@ -116,7 +118,7 @@ public: public slots: void clearPixmapCache(); private slots: - void picDownloadFinished(int id, bool error); + void picDownloadFinished(QNetworkReply *reply); void loadCardDatabase(); void picDownloadChanged(); };