diff options
author | swirl <swurl@swurl.xyz> | 2022-02-03 13:45:20 -0500 |
---|---|---|
committer | swirl <swurl@swurl.xyz> | 2022-02-03 13:45:20 -0500 |
commit | e2952061af24e0b9a4639d5ff1eb24c57f65830a (patch) | |
tree | b5936e950cf149366366db156f90e51c25f2257a /launcher/ui/pages/modplatform/modrinth/ModrinthModel.h | |
parent | fcc4420cfec3fcd970ff1f35b8848559c7b5b6ef (diff) | |
parent | 11841c47e62ecdafc09eecd1998cff722ebcd1e7 (diff) | |
download | PrismLauncher-e2952061af24e0b9a4639d5ff1eb24c57f65830a.tar.gz PrismLauncher-e2952061af24e0b9a4639d5ff1eb24c57f65830a.tar.bz2 PrismLauncher-e2952061af24e0b9a4639d5ff1eb24c57f65830a.zip |
Merge branch 'feature/download_mods' of git://github.com/timoreo22/PolyMC into feature/download_mods
Diffstat (limited to 'launcher/ui/pages/modplatform/modrinth/ModrinthModel.h')
-rw-r--r-- | launcher/ui/pages/modplatform/modrinth/ModrinthModel.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h new file mode 100644 index 00000000..53f1f134 --- /dev/null +++ b/launcher/ui/pages/modplatform/modrinth/ModrinthModel.h @@ -0,0 +1,79 @@ +#pragma once + +#include <RWStorage.h> + +#include <QAbstractListModel> +#include <QSortFilterProxyModel> +#include <QThreadPool> +#include <QIcon> +#include <QStyledItemDelegate> +#include <QList> +#include <QString> +#include <QStringList> +#include <QMetaType> + +#include <functional> +#include <net/NetJob.h> + +#include <modplatform/flame/FlamePackIndex.h> +#include "modplatform/modrinth/ModrinthPackIndex.h" +#include "BaseInstance.h" +#include "ModrinthPage.h" + +namespace Modrinth { + + +typedef QMap<QString, QIcon> LogoMap; +typedef std::function<void(QString)> LogoCallback; + +class ListModel : public QAbstractListModel +{ + Q_OBJECT + +public: + ListModel(ModrinthPage *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; + Qt::ItemFlags flags(const QModelIndex &index) const override; + bool canFetchMore(const QModelIndex & parent) const override; + void fetchMore(const QModelIndex & parent) override; + + void getLogo(const QString &logo, const QString &logoUrl, LogoCallback callback); + void searchWithTerm(const QString &term, const int sort); + +private slots: + void performPaginatedSearch(); + + void logoFailed(QString logo); + void logoLoaded(QString logo, QIcon out); + + void searchRequestFinished(); + void searchRequestFailed(QString reason); + +private: + void requestLogo(QString file, QString url); + +private: + QList<IndexedPack> modpacks; + QStringList m_failedLogos; + QStringList m_loadingLogos; + LogoMap m_logoMap; + QMap<QString, LogoCallback> waitingCallbacks; + + QString currentSearchTerm; + int currentSort = 0; + int nextSearchOffset = 0; + enum SearchState { + None, + CanPossiblyFetchMore, + ResetRequested, + Finished + } searchState = None; + NetJob::Ptr jobPtr; + QByteArray response; +}; + +} |