#ifndef PICTURELOADER_H #define PICTURELOADER_H #include #include #include #include #include "carddatabase.h" class QNetworkAccessManager; class QNetworkReply; class QThread; class PictureToLoad { private: class SetDownloadPriorityComparator; CardInfoPtr card; QList sortedSets; QList urlTemplates; QList currentSetUrls; QString currentUrl; CardSetPtr currentSet; public: PictureToLoad(CardInfoPtr _card = CardInfoPtr()); CardInfoPtr getCard() const { return card; } void clear() { card.clear(); } QString getCurrentUrl() const { return currentUrl; } CardSetPtr getCurrentSet() const { return currentSet; } QString getSetName() const; QString transformUrl(QString urlTemplate) const; bool nextSet(); bool nextUrl(); void populateSetUrls(); }; class PictureLoaderWorker : public QObject { Q_OBJECT public: PictureLoaderWorker(); ~PictureLoaderWorker(); void enqueueImageLoad(CardInfoPtr card); private: static QStringList md5Blacklist; QThread *pictureLoaderThread; QString picsPath, customPicsPath; QList loadQueue; QMutex mutex; QNetworkAccessManager *networkManager; QList cardsToDownload; PictureToLoad cardBeingLoaded; PictureToLoad cardBeingDownloaded; bool picDownload, downloadRunning, loadQueueRunning; void startNextPicDownload(); 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(CardInfoPtr card, const QImage &image); }; class PictureLoader : public QObject { Q_OBJECT public: static PictureLoader &getInstance() { static PictureLoader instance; return instance; } private: PictureLoader(); ~PictureLoader(); // Singleton - Don't implement copy constructor and assign operator PictureLoader(PictureLoader const &); void operator=(PictureLoader const &); PictureLoaderWorker *worker; public: static void getPixmap(QPixmap &pixmap, CardInfoPtr card, QSize size); static void getCardBackPixmap(QPixmap &pixmap, QSize size); static void clearPixmapCache(CardInfoPtr card); static void clearPixmapCache(); static void cacheCardPixmaps(QList cards); private slots: void picDownloadChanged(); void picsPathChanged(); public slots: void imageLoaded(CardInfoPtr card, const QImage &image); }; #endif