70 lines
1.5 KiB
C++
70 lines
1.5 KiB
C++
#pragma once
|
|
|
|
#include <QAbstractListModel>
|
|
|
|
#include "modplatform/modpacksch/FTBPackManifest.h"
|
|
#include "net/NetJob.h"
|
|
#include <QIcon>
|
|
|
|
namespace Ftb {
|
|
|
|
struct Logo {
|
|
QString fullpath;
|
|
NetJobPtr downloadJob;
|
|
QIcon result;
|
|
bool failed = false;
|
|
};
|
|
|
|
typedef QMap<QString, Logo> LogoMap;
|
|
typedef std::function<void(QString)> 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<ModpacksCH::Modpack> modpacks;
|
|
LogoMap m_logoMap;
|
|
|
|
QString currentSearchTerm;
|
|
enum SearchState {
|
|
None,
|
|
CanPossiblyFetchMore,
|
|
ResetRequested,
|
|
Finished,
|
|
Failed,
|
|
} searchState = None;
|
|
NetJobPtr jobPtr;
|
|
int currentPack;
|
|
QList<int> remainingPacks;
|
|
QByteArray response;
|
|
};
|
|
|
|
}
|