Refator task to work with multiple providers
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
@ -18,48 +18,64 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <qlist.h>
|
||||
#include <qvariant.h>
|
||||
#include <QDir>
|
||||
#include <QEventLoop>
|
||||
#include <QList>
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
|
||||
#include "minecraft/mod/MetadataHandler.h"
|
||||
#include "minecraft/mod/tasks/LocalModGetAllTask.h"
|
||||
#include "minecraft/mod/ModFolderModel.h"
|
||||
#include "modplatform/ModIndex.h"
|
||||
#include "modplatform/ResourceAPI.h"
|
||||
#include "tasks/SequentialTask.h"
|
||||
#include "tasks/Task.h"
|
||||
#include "ui/pages/modplatform/ModModel.h"
|
||||
|
||||
class GetModDependenciesTask : public Task {
|
||||
class GetModDependenciesTask : public SequentialTask {
|
||||
Q_OBJECT
|
||||
public:
|
||||
using Ptr = shared_qobject_ptr<GetModDependenciesTask>;
|
||||
using LocalModGetAllTaskPtr = shared_qobject_ptr<LocalModGetAllTask>;
|
||||
|
||||
using NewDependecyVersionAPITask =
|
||||
std::function<Task::Ptr(const ModPlatform::Dependency&, std::function<void(const ModPlatform::IndexedVersion&)>)>;
|
||||
struct PackDependecny {
|
||||
ModPlatform::Dependency dependency;
|
||||
ModPlatform::IndexedPack pack;
|
||||
ModPlatform::IndexedVersion version;
|
||||
PackDependecny(){};
|
||||
PackDependecny(const ModPlatform::IndexedPack& p, const ModPlatform::IndexedVersion& v)
|
||||
{
|
||||
pack = p;
|
||||
version = v;
|
||||
}
|
||||
};
|
||||
|
||||
explicit GetModDependenciesTask(QDir index_dir, QList<ModPlatform::IndexedVersion> selected, NewDependecyVersionAPITask api);
|
||||
struct Provider {
|
||||
ModPlatform::ResourceProvider name;
|
||||
std::shared_ptr<ResourceDownload::ModModel> mod;
|
||||
std::shared_ptr<ResourceAPI> api;
|
||||
};
|
||||
|
||||
auto canAbort() const -> bool override { return true; }
|
||||
auto abort() -> bool override;
|
||||
explicit GetModDependenciesTask(QObject* parent,
|
||||
BaseInstance* instance,
|
||||
ModFolderModel* folder,
|
||||
QList<std::shared_ptr<PackDependecny>> selected);
|
||||
|
||||
auto getDependecies() const -> QList<ModPlatform::IndexedVersion> { return m_dependencies; }
|
||||
auto getDependecies() const -> QList<std::shared_ptr<PackDependecny>> { return m_pack_dependencies; }
|
||||
|
||||
protected slots:
|
||||
//! Entry point for tasks.
|
||||
void executeTask() override;
|
||||
|
||||
void prepareDependecies();
|
||||
void addDependecies(const ModPlatform::IndexedVersion&, int);
|
||||
QList<ModPlatform::Dependency> getDependenciesForVersions(const QList<ModPlatform::IndexedVersion>&);
|
||||
QList<ModPlatform::Dependency> getDependenciesForVersion(const ModPlatform::IndexedVersion&);
|
||||
Task::Ptr prepareDependencyTask(const ModPlatform::Dependency&, const ModPlatform::ResourceProvider, int);
|
||||
QList<ModPlatform::Dependency> getDependenciesForVersion(const ModPlatform::IndexedVersion&,
|
||||
const ModPlatform::ResourceProvider providerName);
|
||||
void prepare();
|
||||
|
||||
private:
|
||||
QList<ModPlatform::IndexedVersion> m_selected;
|
||||
QList<ModPlatform::IndexedVersion> m_dependencies;
|
||||
QList<Metadata::ModStruct> m_mods;
|
||||
QList<std::shared_ptr<PackDependecny>> m_pack_dependencies;
|
||||
QList<std::shared_ptr<Metadata::ModStruct>> m_mods;
|
||||
QList<std::shared_ptr<PackDependecny>> m_selected;
|
||||
QList<Provider> m_providers;
|
||||
|
||||
LocalModGetAllTaskPtr m_getAllMods = nullptr;
|
||||
NewDependecyVersionAPITask m_getDependenciesVersionAPI;
|
||||
SequentialTask::Ptr m_getNetworkDep;
|
||||
QEventLoop loop;
|
||||
Version m_version;
|
||||
ResourceAPI::ModLoaderTypes m_loaderType;
|
||||
};
|
||||
|
Reference in New Issue
Block a user