* main.cpp: removed path checking and db loading * card database: merge card loading methods into a single one * settings cache: take care of returning safe paths for decks, replays, etc.. * main window: if db loading fails (eg. first run), propose to run oracle NSIS: propose to run cockatrice instead of oracle Rework card database loading * Move carddatabase-related method out of deckeditor tab * Load cards in another thread and render them progressively * Optimize database reload after enabled sets change Fix deck editor column width * removed the noCard hack. * getCard() no more creates cards instead of just returning existing ones * Fix the “edit tokens” dialog. * PictureLoader: avoid trying to download twice the same card * PictureLoader: correct return of card background * AbstractCardItem: avoid recalculating card color at every paint Use a different file to save custom tokens Misc required improvements * Use nullptr; * Refactor CardInfoWidget to use CardInfoPicture and CardInfoText instead of duplicating code; * Added CardInfo::getColorChar() * Fixed some potential crashes * removed dead code related to CardInfoWidget * Don't require a restart after adding a new custom sets file * Bump CMake requirements to 3.1
96 lines
2.4 KiB
C++
96 lines
2.4 KiB
C++
#ifndef PICTURELOADER_H
|
|
#define PICTURELOADER_H
|
|
|
|
#include <QMap>
|
|
#include <QList>
|
|
#include <QNetworkRequest>
|
|
#include <QMutex>
|
|
|
|
class CardInfo;
|
|
class CardSet;
|
|
class QNetworkAccessManager;
|
|
class QNetworkReply;
|
|
class QThread;
|
|
|
|
class PictureToLoad {
|
|
private:
|
|
class SetDownloadPriorityComparator;
|
|
|
|
CardInfo *card;
|
|
QList<CardSet *> sortedSets;
|
|
int setIndex;
|
|
bool hq;
|
|
public:
|
|
PictureToLoad(CardInfo *_card = 0);
|
|
CardInfo *getCard() const { return card; }
|
|
CardSet *getCurrentSet() const;
|
|
QString getSetName() const;
|
|
bool nextSet();
|
|
};
|
|
|
|
class PictureLoaderWorker : public QObject {
|
|
Q_OBJECT
|
|
public:
|
|
PictureLoaderWorker();
|
|
~PictureLoaderWorker();
|
|
|
|
void enqueueImageLoad(CardInfo *card);
|
|
private:
|
|
static QStringList md5Blacklist;
|
|
|
|
QThread *pictureLoaderThread;
|
|
QString picsPath, customPicsPath;
|
|
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:
|
|
static PictureLoader& getInstance()
|
|
{
|
|
static PictureLoader instance;
|
|
return instance;
|
|
}
|
|
private:
|
|
PictureLoader();
|
|
~PictureLoader();
|
|
// Don't implement
|
|
PictureLoader(PictureLoader const&);
|
|
void operator=(PictureLoader const&);
|
|
|
|
PictureLoaderWorker * worker;
|
|
public:
|
|
static void getPixmap(QPixmap &pixmap, CardInfo *card, QSize size);
|
|
static void clearPixmapCache(CardInfo *card);
|
|
static void clearPixmapCache();
|
|
static void cacheCardPixmaps(QList<CardInfo *> cards);
|
|
protected:
|
|
static void internalGetCardBackPixmap(QPixmap &pixmap, QSize size);
|
|
private slots:
|
|
void picDownloadChanged();
|
|
void picsPathChanged();
|
|
public slots:
|
|
void imageLoaded(CardInfo *card, const QImage &image);
|
|
};
|
|
#endif
|