aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/pages/modplatform/ModModel.h
blob: 7c735d901f680dc59f0ba5d930c2b390759d2e7c (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
#pragma once

#include <QAbstractListModel>

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

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

class ModPage;
class Version;

namespace ModPlatform {

class ListModel : public ResourceModel {
    Q_OBJECT

   public:
    ListModel(ModPage* parent, 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;

   public slots:
    void searchRequestFinished(QJsonDocument& doc);

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

    void versionRequestSucceeded(QJsonDocument doc, QString addonId, 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;

    inline auto getMineVersions() const -> std::optional<std::list<Version>>;

   protected:
    int currentSort = 0;
};
}  // namespace ModPlatform