Merge pull request #1770 from ctrlaltca/fix_pixmaps
Fix pixmap usage in pictureloader
This commit is contained in:
commit
7ec3968c02
2 changed files with 78 additions and 43 deletions
|
@ -88,10 +88,10 @@ CardSet *PictureToLoad::getCurrentSet() const
|
|||
return 0;
|
||||
}
|
||||
|
||||
QStringList PictureLoader::md5Blacklist = QStringList()
|
||||
QStringList PictureLoaderWorker::md5Blacklist = QStringList()
|
||||
<< "db0c48db407a907c16ade38de048a441"; // card back returned by gatherer when card is not found
|
||||
|
||||
PictureLoader::PictureLoader()
|
||||
PictureLoaderWorker::PictureLoaderWorker()
|
||||
: QObject(0),
|
||||
downloadRunning(false), loadQueueRunning(false)
|
||||
{
|
||||
|
@ -110,12 +110,12 @@ PictureLoader::PictureLoader()
|
|||
moveToThread(pictureLoaderThread);
|
||||
}
|
||||
|
||||
PictureLoader::~PictureLoader()
|
||||
PictureLoaderWorker::~PictureLoaderWorker()
|
||||
{
|
||||
pictureLoaderThread->deleteLater();
|
||||
}
|
||||
|
||||
void PictureLoader::processLoadQueue()
|
||||
void PictureLoaderWorker::processLoadQueue()
|
||||
{
|
||||
if (loadQueueRunning)
|
||||
return;
|
||||
|
@ -160,7 +160,7 @@ void PictureLoader::processLoadQueue()
|
|||
}
|
||||
}
|
||||
|
||||
bool PictureLoader::cardImageExistsOnDisk(QString & setName, QString & correctedCardname)
|
||||
bool PictureLoaderWorker::cardImageExistsOnDisk(QString & setName, QString & correctedCardname)
|
||||
{
|
||||
QImage image;
|
||||
QImageReader imgReader;
|
||||
|
@ -194,7 +194,7 @@ bool PictureLoader::cardImageExistsOnDisk(QString & setName, QString & corrected
|
|||
return false;
|
||||
}
|
||||
|
||||
QString PictureLoader::getPicUrl()
|
||||
QString PictureLoaderWorker::getPicUrl()
|
||||
{
|
||||
if (!picDownload) return QString("");
|
||||
|
||||
|
@ -242,7 +242,7 @@ QString PictureLoader::getPicUrl()
|
|||
return picUrl;
|
||||
}
|
||||
|
||||
void PictureLoader::startNextPicDownload()
|
||||
void PictureLoaderWorker::startNextPicDownload()
|
||||
{
|
||||
if (cardsToDownload.isEmpty()) {
|
||||
cardBeingDownloaded = 0;
|
||||
|
@ -267,7 +267,7 @@ void PictureLoader::startNextPicDownload()
|
|||
}
|
||||
}
|
||||
|
||||
void PictureLoader::picDownloadFailed()
|
||||
void PictureLoaderWorker::picDownloadFailed()
|
||||
{
|
||||
if (cardBeingDownloaded.nextSet())
|
||||
{
|
||||
|
@ -283,13 +283,13 @@ void PictureLoader::picDownloadFailed()
|
|||
}
|
||||
}
|
||||
|
||||
bool PictureLoader::imageIsBlackListed(const QByteArray &picData)
|
||||
bool PictureLoaderWorker::imageIsBlackListed(const QByteArray &picData)
|
||||
{
|
||||
QString md5sum = QCryptographicHash::hash(picData, QCryptographicHash::Md5).toHex();
|
||||
return md5Blacklist.contains(md5sum);
|
||||
}
|
||||
|
||||
void PictureLoader::picDownloadFinished(QNetworkReply *reply)
|
||||
void PictureLoaderWorker::picDownloadFinished(QNetworkReply *reply)
|
||||
{
|
||||
if (reply->error()) {
|
||||
qDebug() << "Download failed:" << reply->errorString();
|
||||
|
@ -349,7 +349,7 @@ void PictureLoader::picDownloadFinished(QNetworkReply *reply)
|
|||
startNextPicDownload();
|
||||
}
|
||||
|
||||
void PictureLoader::enqueueImageLoad(CardInfo *card)
|
||||
void PictureLoaderWorker::enqueueImageLoad(CardInfo *card)
|
||||
{
|
||||
QMutexLocker locker(&mutex);
|
||||
|
||||
|
@ -367,20 +367,31 @@ void PictureLoader::enqueueImageLoad(CardInfo *card)
|
|||
emit startLoadQueue();
|
||||
}
|
||||
|
||||
void PictureLoader::picDownloadChanged()
|
||||
void PictureLoaderWorker::picDownloadChanged()
|
||||
{
|
||||
QMutexLocker locker(&mutex);
|
||||
picDownload = settingsCache->getPicDownload();
|
||||
|
||||
QPixmapCache::clear();
|
||||
}
|
||||
|
||||
void PictureLoader::picsPathChanged()
|
||||
void PictureLoaderWorker::picsPathChanged()
|
||||
{
|
||||
QMutexLocker locker(&mutex);
|
||||
picsPath = settingsCache->getPicsPath();
|
||||
}
|
||||
|
||||
QPixmapCache::clear();
|
||||
PictureLoader::PictureLoader()
|
||||
: QObject(0)
|
||||
{
|
||||
worker = new PictureLoaderWorker;
|
||||
connect(settingsCache, SIGNAL(picsPathChanged()), this, SLOT(picsPathChanged()));
|
||||
connect(settingsCache, SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged()));
|
||||
|
||||
connect(worker, SIGNAL(imageLoaded(CardInfo *, const QImage &)), this, SLOT(imageLoaded(CardInfo *, const QImage &)));
|
||||
}
|
||||
|
||||
PictureLoader::~PictureLoader()
|
||||
{
|
||||
worker->deleteLater();
|
||||
}
|
||||
|
||||
void PictureLoader::internalGetCardBackPixmap(QPixmap &pixmap, QSize size)
|
||||
|
@ -425,7 +436,7 @@ void PictureLoader::getPixmap(QPixmap &pixmap, CardInfo *card, QSize size)
|
|||
if(card)
|
||||
{
|
||||
// add the card to the load queue
|
||||
getInstance().enqueueImageLoad(card);
|
||||
getInstance().worker->enqueueImageLoad(card);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -471,6 +482,16 @@ void PictureLoader::cacheCardPixmaps(QList<CardInfo *> cards)
|
|||
if(QPixmapCache::find(key, &tmp))
|
||||
continue;
|
||||
|
||||
getInstance().enqueueImageLoad(card);
|
||||
getInstance().worker->enqueueImageLoad(card);
|
||||
}
|
||||
}
|
||||
|
||||
void PictureLoader::picDownloadChanged()
|
||||
{
|
||||
QPixmapCache::clear();
|
||||
}
|
||||
|
||||
void PictureLoader::picsPathChanged()
|
||||
{
|
||||
QPixmapCache::clear();
|
||||
}
|
|
@ -28,6 +28,42 @@ public:
|
|||
bool nextSet();
|
||||
};
|
||||
|
||||
class PictureLoaderWorker : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
PictureLoaderWorker();
|
||||
~PictureLoaderWorker();
|
||||
|
||||
void enqueueImageLoad(CardInfo *card);
|
||||
private:
|
||||
static QStringList md5Blacklist;
|
||||
|
||||
QThread *pictureLoaderThread;
|
||||
QString picsPath;
|
||||
QList<PictureToLoad> loadQueue;
|
||||
QMutex mutex;
|
||||
QNetworkAccessManager *networkManager;
|
||||
QList<PictureToLoad> cardsToDownload;
|
||||
PictureToLoad cardBeingLoaded;
|
||||
PictureToLoad cardBeingDownloaded;
|
||||
bool picDownload, downloadRunning, loadQueueRunning;
|
||||
void startNextPicDownload();
|
||||
QString getPicUrl();
|
||||
bool cardImageExistsOnDisk(QString & setName, QString & correctedCardname);
|
||||
bool imageIsBlackListed(const QByteArray &picData);
|
||||
private slots:
|
||||
void picDownloadFinished(QNetworkReply *reply);
|
||||
void picDownloadFailed();
|
||||
|
||||
void picDownloadChanged();
|
||||
void picsPathChanged();
|
||||
public slots:
|
||||
void processLoadQueue();
|
||||
signals:
|
||||
void startLoadQueue();
|
||||
void imageLoaded(CardInfo *card, const QImage &image);
|
||||
};
|
||||
|
||||
class PictureLoader : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
|
@ -43,24 +79,8 @@ private:
|
|||
PictureLoader(PictureLoader const&);
|
||||
void operator=(PictureLoader const&);
|
||||
|
||||
static QStringList md5Blacklist;
|
||||
|
||||
QThread *pictureLoaderThread;
|
||||
QString picsPath;
|
||||
QList<PictureToLoad> loadQueue;
|
||||
QMutex mutex;
|
||||
QNetworkAccessManager *networkManager;
|
||||
QList<PictureToLoad> cardsToDownload;
|
||||
PictureToLoad cardBeingLoaded;
|
||||
PictureToLoad cardBeingDownloaded;
|
||||
bool picDownload, downloadRunning, loadQueueRunning;
|
||||
void startNextPicDownload();
|
||||
void imageLoaded(CardInfo *card, const QImage &image);
|
||||
QString getPicUrl();
|
||||
bool cardImageExistsOnDisk(QString & setName, QString & correctedCardname);
|
||||
bool imageIsBlackListed(const QByteArray &picData);
|
||||
PictureLoaderWorker * worker;
|
||||
public:
|
||||
void enqueueImageLoad(CardInfo *card);
|
||||
static void getPixmap(QPixmap &pixmap, CardInfo *card, QSize size);
|
||||
static void clearPixmapCache(CardInfo *card);
|
||||
static void clearPixmapCache();
|
||||
|
@ -68,15 +88,9 @@ public:
|
|||
protected:
|
||||
static void internalGetCardBackPixmap(QPixmap &pixmap, QSize size);
|
||||
private slots:
|
||||
void picDownloadFinished(QNetworkReply *reply);
|
||||
void picDownloadFailed();
|
||||
|
||||
void picDownloadChanged();
|
||||
void picsPathChanged();
|
||||
public slots:
|
||||
void processLoadQueue();
|
||||
signals:
|
||||
void startLoadQueue();
|
||||
void imageLoaded(CardInfo *card, const QImage &image);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue