fixed card picture download

This commit is contained in:
Max-Wilhelm Bruker 2009-10-13 14:31:32 +02:00
parent 912c0bcdbf
commit df8c01992b
2 changed files with 52 additions and 48 deletions

View file

@ -138,50 +138,10 @@ QPixmap *CardInfo::loadPixmap()
return pixmap; return pixmap;
} }
if (db->getPicDownload()) if (db->getPicDownload())
startDownload(); db->startPicDownload(this);
return pixmap; return pixmap;
} }
void CardInfo::startDownload()
{
downloadBuffer = new QBuffer(this);
downloadBuffer->open(QIODevice::ReadWrite);
http = new QHttp(this);
connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(picDownloadFinished(int, bool)));
QUrl url(picURL);
http->setHost(url.host(), url.port(80));
dlID = http->get(url.path(), downloadBuffer);
}
void CardInfo::picDownloadFinished(int id, bool error)
{
if (id != dlID)
return;
http->close();
disconnect(http, 0, this, 0);
http->deleteLater();
downloadBuffer->close();
if (!error) {
QString picsPath = db->getPicsPath();
const QByteArray &picData = downloadBuffer->data();
QPixmap testPixmap;
if (testPixmap.loadFromData(picData)) {
if (!QDir(QString(picsPath + "/downloadedPics/")).exists()) {
QDir dir(picsPath);
dir.mkdir("downloadedPics");
}
QFile newPic(picsPath + "/downloadedPics/" + getCorrectedName() + ".full.jpg");
newPic.open(QIODevice::WriteOnly);
newPic.write(picData);
newPic.close();
updatePixmapCache();
}
}
delete downloadBuffer;
}
QPixmap *CardInfo::getPixmap(QSize size) QPixmap *CardInfo::getPixmap(QSize size)
{ {
qDebug(QString("CardInfo::getPixmap(%1, %2) for %3").arg(size.width()).arg(size.height()).arg(getName()).toLatin1()); qDebug(QString("CardInfo::getPixmap(%1, %2) for %3").arg(size.width()).arg(size.height()).arg(getName()).toLatin1());
@ -266,6 +226,9 @@ QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardInfo *info)
CardDatabase::CardDatabase(QObject *parent) CardDatabase::CardDatabase(QObject *parent)
: QObject(parent), noCard(0) : QObject(parent), noCard(0)
{ {
http = new QHttp(this);
connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(picDownloadFinished(int, bool)));
updateDatabasePath(); updateDatabasePath();
updatePicDownload(); updatePicDownload();
updatePicsPath(); updatePicsPath();
@ -345,6 +308,49 @@ void CardDatabase::clearPixmapCache()
noCard->clearPixmapCache(); noCard->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<CardInfo *, QBuffer *>(card, buffer));
}
void CardDatabase::picDownloadFinished(int id, bool error)
{
if (!downloadBuffers.contains(id))
return;
const QPair<CardInfo *, QBuffer *> &temp = downloadBuffers.value(id);
CardInfo *card = temp.first;
QBuffer *buffer = temp.second;
downloadBuffers.remove(id);
buffer->close();
if (!error) {
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();
}
}
delete buffer;
}
void CardDatabase::loadSetsFromXml(QXmlStreamReader &xml) void CardDatabase::loadSetsFromXml(QXmlStreamReader &xml)
{ {
while (!xml.atEnd()) { while (!xml.atEnd()) {

View file

@ -46,14 +46,9 @@ private:
QString text; QString text;
QStringList colors; QStringList colors;
QString picURL; QString picURL;
QHttp *http;
QBuffer *downloadBuffer;
int dlID;
int tableRow; int tableRow;
QPixmap *pixmap; QPixmap *pixmap;
QMap<int, QPixmap *> scaledPixmapCache; QMap<int, QPixmap *> scaledPixmapCache;
void startDownload();
public: public:
CardInfo(CardDatabase *_db, CardInfo(CardDatabase *_db,
const QString &_name = QString(), const QString &_name = QString(),
@ -86,8 +81,6 @@ public:
void clearPixmapCache(); void clearPixmapCache();
void clearPixmapCacheMiss(); void clearPixmapCacheMiss();
void updatePixmapCache(); void updatePixmapCache();
private slots:
void picDownloadFinished(int id, bool error);
signals: signals:
void pixmapUpdated(); void pixmapUpdated();
}; };
@ -97,12 +90,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;
CardInfo *noCard; CardInfo *noCard;
QString picsPath, cardDatabasePath; QString picsPath, cardDatabasePath;
private: private:
void loadCardsFromXml(QXmlStreamReader &xml); void loadCardsFromXml(QXmlStreamReader &xml);
void loadSetsFromXml(QXmlStreamReader &xml); void loadSetsFromXml(QXmlStreamReader &xml);
bool picDownload; bool picDownload;
QHttp *http;
public: public:
CardDatabase(QObject *parent = 0); CardDatabase(QObject *parent = 0);
~CardDatabase(); ~CardDatabase();
@ -116,6 +111,9 @@ public:
int loadFromFile(const QString &fileName); int loadFromFile(const QString &fileName);
bool saveToFile(const QString &fileName); bool saveToFile(const QString &fileName);
const QString &getPicsPath() const { return picsPath; } const QString &getPicsPath() const { return picsPath; }
void startPicDownload(CardInfo *card);
private slots:
void picDownloadFinished(int id, bool error);
public slots: public slots:
void updatePicsPath(const QString &path = QString()); void updatePicsPath(const QString &path = QString());
void updateDatabasePath(const QString &path = QString()); void updateDatabasePath(const QString &path = QString());