aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/pages/modplatform/ModModel.h
blob: 39d062f912f9f04d33a9bce9f0b797cf8b72f56c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#pragma once

#include <QAbstractListModel>

#include "modplatform/ModIndex.h"
#include "modplatform/ResourceAPI.h"

#include "ui/pages/modplatform/ResourceModel.h"
#include "ui/widgets/ModFilterWidget.h"

class Version;

namespace ResourceDownload {

class ModPage;

class ModModel : public ResourceModel {
    Q_OBJECT

   public:
    ModModel(const BaseInstance&, ResourceAPI* api);

    /* Ask the API for more information */
    void searchWithTerm(const QString& term, const int sort, const bool filter_changed);

    virtual void loadIndexedPack(ModPlatform::IndexedPack& m, QJsonObject& obj) = 0;
    virtual void loadExtraPackInfo(ModPlatform::IndexedPack& m, QJsonObject& obj) = 0;
    virtual void loadIndexedPackVersions(ModPlatform::IndexedPack& m, QJsonArray& arr) = 0;

    void setFilter(std::shared_ptr<ModFilterWidget::Filter> filter) { m_filter = filter; }

   public slots:
    void searchRequestFinished(QJsonDocument& doc);
    void infoRequestFinished(QJsonDocument& doc, ModPlatform::IndexedPack& pack, const QModelIndex& index);
    void versionRequestSucceeded(QJsonDocument doc, ModPlatform::IndexedPack& pack, const QModelIndex& index);

   public slots:
    ResourceAPI::SearchArgs createSearchArguments() override;
    ResourceAPI::SearchCallbacks createSearchCallbacks() override;

    ResourceAPI::VersionSearchArgs createVersionsArguments(QModelIndex&) override;
    ResourceAPI::VersionSearchCallbacks createVersionsCallbacks(QModelIndex&) override;

    ResourceAPI::ProjectInfoArgs createInfoArguments(QModelIndex&) override;
    ResourceAPI::ProjectInfoCallbacks createInfoCallbacks(QModelIndex&) override;

   protected:
    virtual auto documentToArray(QJsonDocument& obj) const -> QJsonArray = 0;
    virtual auto getSorts() const -> const char** = 0;

   protected:
    int currentSort = 0;

    std::shared_ptr<ModFilterWidget::Filter> m_filter = nullptr;
};

}  // namespace ResourceDownload