#pragma once #include #include "modplatform/modpacksch/FTBPackManifest.h" #include "net/NetJob.h" #include namespace Ftb { struct Logo { QString fullpath; NetJobPtr downloadJob; QIcon result; bool failed = false; }; typedef QMap LogoMap; typedef std::function LogoCallback; class ListModel : public QAbstractListModel { Q_OBJECT public: ListModel(QObject *parent); virtual ~ListModel(); int rowCount(const QModelIndex &parent) const override; int columnCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; void getLogo(const QString &logo, const QString &logoUrl, LogoCallback callback); void searchWithTerm(const QString & term); private slots: void performSearch(); void searchRequestFinished(); void searchRequestFailed(QString reason); void requestPack(); void packRequestFinished(); void packRequestFailed(QString reason); void logoFailed(QString logo); void logoLoaded(QString logo, bool stale); private: void requestLogo(QString file, QString url); private: QList modpacks; LogoMap m_logoMap; QString currentSearchTerm; enum SearchState { None, CanPossiblyFetchMore, ResetRequested, Finished, Failed, } searchState = None; NetJobPtr jobPtr; int currentPack; QList remainingPacks; QByteArray response; }; }