Commit 91a74abc authored by Max-Wilhelm Bruker's avatar Max-Wilhelm Bruker
Browse files

rewrote picture downloader

parent 7afb8669
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
#include <QPainter> #include <QPainter>
#include <QUrl> #include <QUrl>
#include <QSet> #include <QSet>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>
CardSet::CardSet(const QString &_shortName, const QString &_longName) CardSet::CardSet(const QString &_shortName, const QString &_longName)
: shortName(_shortName), longName(_longName) : shortName(_shortName), longName(_longName)
...@@ -235,8 +238,8 @@ CardDatabase::CardDatabase(QObject *parent) ...@@ -235,8 +238,8 @@ CardDatabase::CardDatabase(QObject *parent)
connect(settingsCache, SIGNAL(cardDatabasePathChanged()), this, SLOT(loadCardDatabase())); connect(settingsCache, SIGNAL(cardDatabasePathChanged()), this, SLOT(loadCardDatabase()));
connect(settingsCache, SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged())); connect(settingsCache, SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged()));
http = new QHttp(this); networkManager = new QNetworkAccessManager(this);
connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(picDownloadFinished(int, bool))); connect(networkManager, SIGNAL(finished(QNetworkReply *)), this, SLOT(picDownloadFinished(QNetworkReply *)));
loadCardDatabase(); loadCardDatabase();
...@@ -317,46 +320,54 @@ void CardDatabase::clearPixmapCache() ...@@ -317,46 +320,54 @@ void CardDatabase::clearPixmapCache()
void CardDatabase::startPicDownload(CardInfo *card) void CardDatabase::startPicDownload(CardInfo *card)
{ {
QBuffer *buffer = new QBuffer(this); if (card->getPicURL().isEmpty())
buffer->open(QIODevice::ReadWrite); return;
QUrl url(card->getPicURL());
http->setHost(url.host(), url.port(80)); cardsToDownload.append(card);
int dlID = http->get(url.path(), buffer); if (!downloadRunning)
downloadBuffers.insert(dlID, QPair<CardInfo *, QBuffer *>(card, buffer)); startNextPicDownload();
} }
void CardDatabase::picDownloadFinished(int id, bool error) void CardDatabase::startNextPicDownload()
{ {
if (!downloadBuffers.contains(id)) if (cardsToDownload.isEmpty()) {
downloadRunning = false;
return; return;
}
const QPair<CardInfo *, QBuffer *> &temp = downloadBuffers.value(id); downloadRunning = true;
CardInfo *card = temp.first;
QBuffer *buffer = temp.second;
downloadBuffers.remove(id);
buffer->close();
if (!error) { CardInfo *card = cardsToDownload.takeFirst();
QString picsPath = settingsCache->getPicsPath(); QNetworkRequest req(QUrl(card->getPicURL()));
const QByteArray &picData = buffer->data(); req.setOriginatingObject(card);
QPixmap testPixmap; networkManager->get(req);
if (testPixmap.loadFromData(picData)) { }
if (!QDir(QString(picsPath + "/downloadedPics/")).exists()) {
QDir dir(picsPath); void CardDatabase::picDownloadFinished(QNetworkReply *reply)
if (!dir.exists()) {
return; CardInfo *card = static_cast<CardInfo *>(reply->request().originatingObject());
dir.mkdir("downloadedPics");
} QString picsPath = settingsCache->getPicsPath();
QFile newPic(picsPath + "/downloadedPics/" + card->getCorrectedName() + ".full.jpg"); const QByteArray &picData = reply->readAll();
if (!newPic.open(QIODevice::WriteOnly)) QPixmap testPixmap;
if (testPixmap.loadFromData(picData)) {
if (!QDir(QString(picsPath + "/downloadedPics/")).exists()) {
QDir dir(picsPath);
if (!dir.exists())
return; return;
newPic.write(picData); dir.mkdir("downloadedPics");
newPic.close();
card->updatePixmapCache();
} }
QFile newPic(picsPath + "/downloadedPics/" + card->getCorrectedName() + ".full.jpg");
if (!newPic.open(QIODevice::WriteOnly))
return;
newPic.write(picData);
newPic.close();
card->updatePixmapCache();
} }
delete buffer;
reply->deleteLater();
startNextPicDownload();
} }
void CardDatabase::loadSetsFromXml(QXmlStreamReader &xml) void CardDatabase::loadSetsFromXml(QXmlStreamReader &xml)
......
...@@ -7,11 +7,12 @@ ...@@ -7,11 +7,12 @@
#include <QDataStream> #include <QDataStream>
#include <QList> #include <QList>
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QHttp>
#include <QBuffer>
class CardDatabase; class CardDatabase;
class CardInfo; class CardInfo;
class QNetworkAccessManager;
class QNetworkReply;
class QNetworkRequest;
class CardSet : public QList<CardInfo *> { class CardSet : public QList<CardInfo *> {
private: private:
...@@ -93,13 +94,14 @@ class CardDatabase : public QObject { ...@@ -93,13 +94,14 @@ class CardDatabase : public QObject {
protected: protected:
QHash<QString, CardInfo *> cardHash; QHash<QString, CardInfo *> cardHash;
QHash<QString, CardSet *> setHash; QHash<QString, CardSet *> setHash;
QMap<int, QPair<CardInfo *, QBuffer *> > downloadBuffers; QNetworkAccessManager *networkManager;
QList<CardInfo *> cardsToDownload;
bool downloadRunning;
CardInfo *noCard; CardInfo *noCard;
private: private:
void loadCardsFromXml(QXmlStreamReader &xml); void loadCardsFromXml(QXmlStreamReader &xml);
void loadSetsFromXml(QXmlStreamReader &xml); void loadSetsFromXml(QXmlStreamReader &xml);
bool picDownload; void startNextPicDownload();
QHttp *http;
public: public:
CardDatabase(QObject *parent = 0); CardDatabase(QObject *parent = 0);
~CardDatabase(); ~CardDatabase();
...@@ -116,7 +118,7 @@ public: ...@@ -116,7 +118,7 @@ public:
public slots: public slots:
void clearPixmapCache(); void clearPixmapCache();
private slots: private slots:
void picDownloadFinished(int id, bool error); void picDownloadFinished(QNetworkReply *reply);
void loadCardDatabase(); void loadCardDatabase();
void picDownloadChanged(); void picDownloadChanged();
}; };
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment