Refator task to work with multiple providers

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97
2023-04-20 00:57:09 +03:00
parent fac33498db
commit c1490cd627
12 changed files with 220 additions and 280 deletions

View File

@ -449,46 +449,4 @@ void ResourceModel::infoRequestSucceeded(QJsonDocument& doc, ModPlatform::Indexe
emit projectInfoUpdated();
}
QList<ModPlatform::IndexedVersion> ResourceModel::getDependecies(QDir& dir, QList<ModPlatform::IndexedVersion> selected)
{
auto task = std::make_unique<GetModDependenciesTask>(
dir, selected,
[this](const ModPlatform::Dependency& dependency, std::function<void(const ModPlatform::IndexedVersion&)> succeeded) -> Task::Ptr {
auto args{ createDependecyArguments(dependency) };
auto callbacks{ createDependecyCallbacks() };
// Use default if no callbacks are set
if (!callbacks.on_succeed)
callbacks.on_succeed = [this, dependency, succeeded](auto& doc, auto& pack) {
ModPlatform::IndexedVersion ver;
try {
QJsonArray arr;
if (dependency.version.length() != 0 && doc.isObject()) {
arr.append(doc.object());
} else {
arr = doc.isObject() ? Json::ensureArray(doc.object(), "data") : doc.array();
}
ver = loadDependencyVersions(dependency, arr);
if (!ver.addonId.isValid()) {
qWarning() << "Error while reading " << debugName() << " resource version empty ";
qDebug() << doc;
return;
}
} catch (const JSONValidationError& e) {
qDebug() << doc;
qWarning() << "Error while reading " << debugName() << " resource version: " << e.cause();
return;
}
succeeded(ver);
};
return m_api->getDependencyVersion(std::move(args), std::move(callbacks));
});
task->start();
return task->getDependecies();
};
} // namespace ResourceDownload

View File

@ -85,8 +85,6 @@ class ResourceModel : public QAbstractListModel {
/** Gets the icon at the URL for the given index. If it's not fetched yet, fetch it and update when fisinhed. */
std::optional<QIcon> getIcon(QModelIndex&, const QUrl&);
QList<ModPlatform::IndexedVersion> getDependecies(QDir& dir, QList<ModPlatform::IndexedVersion> m_selected);
protected:
/** Resets the model's data. */
void clearData();

View File

@ -405,9 +405,4 @@ void ResourcePage::openUrl(const QUrl& url)
QDesktopServices::openUrl(url);
}
QList<ModPlatform::IndexedVersion> ResourcePage::getDependecies(QDir& dir, QList<ModPlatform::IndexedVersion> selected)
{
return m_model->getDependecies(dir, selected);
};
} // namespace ResourceDownload

View File

@ -75,8 +75,6 @@ class ResourcePage : public QWidget, public BasePage {
virtual void addResourceToDialog(ModPlatform::IndexedPack&, ModPlatform::IndexedVersion&);
virtual void removeResourceFromDialog(ModPlatform::IndexedPack&, ModPlatform::IndexedVersion&);
QList<ModPlatform::IndexedVersion> getDependecies(QDir& dir, QList<ModPlatform::IndexedVersion> m_selected);
protected slots:
virtual void triggerSearch() {}