rewrote picture downloader
This commit is contained in:
parent
7afb866961
commit
91a74abca8
2 changed files with 58 additions and 45 deletions
|
@ -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)
|
||||||
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()
|
||||||
|
|
||||||
void CardDatabase::startPicDownload(CardInfo *card)
|
void CardDatabase::startPicDownload(CardInfo *card)
|
||||||
{
|
{
|
||||||
QBuffer *buffer = new QBuffer(this);
|
if (card->getPicURL().isEmpty())
|
||||||
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<CardInfo *, QBuffer *>(card, buffer));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CardDatabase::picDownloadFinished(int id, bool error)
|
|
||||||
{
|
|
||||||
if (!downloadBuffers.contains(id))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const QPair<CardInfo *, QBuffer *> &temp = downloadBuffers.value(id);
|
cardsToDownload.append(card);
|
||||||
CardInfo *card = temp.first;
|
if (!downloadRunning)
|
||||||
QBuffer *buffer = temp.second;
|
startNextPicDownload();
|
||||||
downloadBuffers.remove(id);
|
}
|
||||||
buffer->close();
|
|
||||||
|
void CardDatabase::startNextPicDownload()
|
||||||
if (!error) {
|
{
|
||||||
QString picsPath = settingsCache->getPicsPath();
|
if (cardsToDownload.isEmpty()) {
|
||||||
const QByteArray &picData = buffer->data();
|
downloadRunning = false;
|
||||||
QPixmap testPixmap;
|
return;
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
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<CardInfo *>(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)
|
void CardDatabase::loadSetsFromXml(QXmlStreamReader &xml)
|
||||||
|
|
|
@ -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 {
|
||||||
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:
|
||||||
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();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue