moved getRequiredBy
Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
parent
564e394ec8
commit
158b07a39e
@ -250,3 +250,32 @@ void GetModDependenciesTask::removePack(const QVariant addonId)
|
|||||||
++it;
|
++it;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QHash<QString, QStringList> GetModDependenciesTask::getRequiredBy()
|
||||||
|
{
|
||||||
|
QHash<QString, QStringList> rby;
|
||||||
|
auto fullList = m_selected + m_pack_dependencies;
|
||||||
|
for (auto mod : fullList) {
|
||||||
|
auto addonId = mod->pack->addonId;
|
||||||
|
auto provider = mod->pack->provider;
|
||||||
|
auto version = mod->version.fileId;
|
||||||
|
auto req = QStringList();
|
||||||
|
for (auto& smod : fullList) {
|
||||||
|
if (provider != smod->pack->provider)
|
||||||
|
continue;
|
||||||
|
auto deps = smod->version.dependencies;
|
||||||
|
if (auto dep = std::find_if(deps.begin(), deps.end(),
|
||||||
|
[addonId, provider, version](const ModPlatform::Dependency& d) {
|
||||||
|
return d.type == ModPlatform::DependencyType::REQUIRED &&
|
||||||
|
(provider == ModPlatform::ResourceProvider::MODRINTH && d.addonId.toString().isEmpty()
|
||||||
|
? version == d.version
|
||||||
|
: d.addonId == addonId);
|
||||||
|
});
|
||||||
|
dep != deps.end()) {
|
||||||
|
req.append(smod->pack->name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rby[addonId.toString()] = req;
|
||||||
|
}
|
||||||
|
return rby;
|
||||||
|
}
|
@ -62,6 +62,7 @@ class GetModDependenciesTask : public SequentialTask {
|
|||||||
QList<std::shared_ptr<PackDependency>> selected);
|
QList<std::shared_ptr<PackDependency>> selected);
|
||||||
|
|
||||||
auto getDependecies() const -> QList<std::shared_ptr<PackDependency>> { return m_pack_dependencies; }
|
auto getDependecies() const -> QList<std::shared_ptr<PackDependency>> { return m_pack_dependencies; }
|
||||||
|
QHash<QString, QStringList> getRequiredBy();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
Task::Ptr prepareDependencyTask(const ModPlatform::Dependency&, const ModPlatform::ResourceProvider, int);
|
Task::Ptr prepareDependencyTask(const ModPlatform::Dependency&, const ModPlatform::ResourceProvider, int);
|
||||||
|
@ -213,6 +213,8 @@ void ModUpdateDialog::checkCandidates()
|
|||||||
}
|
}
|
||||||
static FlameAPI api;
|
static FlameAPI api;
|
||||||
|
|
||||||
|
auto getRequiredBy = depTask->getRequiredBy();
|
||||||
|
|
||||||
for (auto dep : depTask->getDependecies()) {
|
for (auto dep : depTask->getDependecies()) {
|
||||||
auto changelog = dep->version.changelog;
|
auto changelog = dep->version.changelog;
|
||||||
if (dep->pack->provider == ModPlatform::ResourceProvider::FLAME)
|
if (dep->pack->provider == ModPlatform::ResourceProvider::FLAME)
|
||||||
@ -221,7 +223,7 @@ void ModUpdateDialog::checkCandidates()
|
|||||||
CheckUpdateTask::UpdatableMod updatable = { dep->pack->name, dep->version.hash, "", dep->version.version,
|
CheckUpdateTask::UpdatableMod updatable = { dep->pack->name, dep->version.hash, "", dep->version.version,
|
||||||
changelog, dep->pack->provider, download_task };
|
changelog, dep->pack->provider, download_task };
|
||||||
|
|
||||||
appendMod(updatable);
|
appendMod(updatable, getRequiredBy.value(dep->version.addonId.toString()));
|
||||||
m_tasks.insert(updatable.name, updatable.download);
|
m_tasks.insert(updatable.name, updatable.download);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -394,7 +396,7 @@ void ModUpdateDialog::onMetadataFailed(Mod* mod, bool try_others, ModPlatform::R
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModUpdateDialog::appendMod(CheckUpdateTask::UpdatableMod const& info)
|
void ModUpdateDialog::appendMod(CheckUpdateTask::UpdatableMod const& info, QStringList requiredBy)
|
||||||
{
|
{
|
||||||
auto item_top = new QTreeWidgetItem(ui->modTreeWidget);
|
auto item_top = new QTreeWidgetItem(ui->modTreeWidget);
|
||||||
item_top->setCheckState(0, Qt::CheckState::Checked);
|
item_top->setCheckState(0, Qt::CheckState::Checked);
|
||||||
@ -410,6 +412,24 @@ void ModUpdateDialog::appendMod(CheckUpdateTask::UpdatableMod const& info)
|
|||||||
auto new_version_item = new QTreeWidgetItem(item_top);
|
auto new_version_item = new QTreeWidgetItem(item_top);
|
||||||
new_version_item->setText(0, tr("New version: %1").arg(info.new_version));
|
new_version_item->setText(0, tr("New version: %1").arg(info.new_version));
|
||||||
|
|
||||||
|
if (!requiredBy.isEmpty()) {
|
||||||
|
auto new_version_item = new QTreeWidgetItem(item_top);
|
||||||
|
new_version_item->setText(0, tr("New version: %1").arg(info.new_version));
|
||||||
|
|
||||||
|
auto requiredByItem = new QTreeWidgetItem(item_top);
|
||||||
|
if (requiredBy.length() == 1) {
|
||||||
|
requiredByItem->setText(0, tr("Required by: %1").arg(requiredBy.back()));
|
||||||
|
} else {
|
||||||
|
requiredByItem->setText(0, tr("Required by:"));
|
||||||
|
auto i = 0;
|
||||||
|
for (auto req : requiredBy) {
|
||||||
|
auto reqItem = new QTreeWidgetItem(requiredByItem);
|
||||||
|
reqItem->setText(0, req);
|
||||||
|
reqItem->insertChildren(i++, { reqItem });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
auto changelog_item = new QTreeWidgetItem(item_top);
|
auto changelog_item = new QTreeWidgetItem(item_top);
|
||||||
changelog_item->setText(0, tr("Changelog of the latest version"));
|
changelog_item->setText(0, tr("Changelog of the latest version"));
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ class ModUpdateDialog final : public ReviewMessageBox {
|
|||||||
|
|
||||||
void checkCandidates();
|
void checkCandidates();
|
||||||
|
|
||||||
void appendMod(const CheckUpdateTask::UpdatableMod& info);
|
void appendMod(const CheckUpdateTask::UpdatableMod& info, QStringList requiredBy = {});
|
||||||
|
|
||||||
const QList<ResourceDownloadTask::Ptr> getTasks();
|
const QList<ResourceDownloadTask::Ptr> getTasks();
|
||||||
auto indexDir() const -> QDir { return m_mod_model->indexDir(); }
|
auto indexDir() const -> QDir { return m_mod_model->indexDir(); }
|
||||||
@ -36,7 +36,9 @@ class ModUpdateDialog final : public ReviewMessageBox {
|
|||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onMetadataEnsured(Mod*);
|
void onMetadataEnsured(Mod*);
|
||||||
void onMetadataFailed(Mod*, bool try_others = false, ModPlatform::ResourceProvider first_choice = ModPlatform::ResourceProvider::MODRINTH);
|
void onMetadataFailed(Mod*,
|
||||||
|
bool try_others = false,
|
||||||
|
ModPlatform::ResourceProvider first_choice = ModPlatform::ResourceProvider::MODRINTH);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QWidget* m_parent;
|
QWidget* m_parent;
|
||||||
|
@ -125,35 +125,12 @@ void ResourceDownloadDialog::connectButtons()
|
|||||||
|
|
||||||
static ModPlatform::ProviderCapabilities ProviderCaps;
|
static ModPlatform::ProviderCapabilities ProviderCaps;
|
||||||
|
|
||||||
QStringList getRequiredBy(QList<ResourceDownloadDialog::DownloadTaskPtr> tasks, ResourceDownloadDialog::DownloadTaskPtr pack)
|
|
||||||
{
|
|
||||||
auto addonId = pack->getPack()->addonId;
|
|
||||||
auto provider = pack->getPack()->provider;
|
|
||||||
auto version = pack->getVersionID();
|
|
||||||
auto req = QStringList();
|
|
||||||
for (auto& task : tasks) {
|
|
||||||
if (provider != task->getPack()->provider)
|
|
||||||
continue;
|
|
||||||
auto deps = task->getVersion().dependencies;
|
|
||||||
if (auto dep = std::find_if(deps.begin(), deps.end(),
|
|
||||||
[addonId, provider, version](const ModPlatform::Dependency& d) {
|
|
||||||
return d.type == ModPlatform::DependencyType::REQUIRED &&
|
|
||||||
(provider == ModPlatform::ResourceProvider::MODRINTH && d.addonId.toString().isEmpty()
|
|
||||||
? version == d.version
|
|
||||||
: d.addonId == addonId);
|
|
||||||
});
|
|
||||||
dep != deps.end()) {
|
|
||||||
req.append(task->getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return req;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ResourceDownloadDialog::confirm()
|
void ResourceDownloadDialog::confirm()
|
||||||
{
|
{
|
||||||
auto confirm_dialog = ReviewMessageBox::create(this, tr("Confirm %1 to download").arg(resourcesString()));
|
auto confirm_dialog = ReviewMessageBox::create(this, tr("Confirm %1 to download").arg(resourcesString()));
|
||||||
confirm_dialog->retranslateUi(resourcesString());
|
confirm_dialog->retranslateUi(resourcesString());
|
||||||
|
|
||||||
|
QHash<QString, QStringList> getRequiredBy;
|
||||||
if (auto task = getModDependenciesTask(); task) {
|
if (auto task = getModDependenciesTask(); task) {
|
||||||
connect(task.get(), &Task::failed, this,
|
connect(task.get(), &Task::failed, this,
|
||||||
[&](QString reason) { CustomMessageBox::selectable(this, tr("Error"), reason, QMessageBox::Critical)->exec(); });
|
[&](QString reason) { CustomMessageBox::selectable(this, tr("Error"), reason, QMessageBox::Critical)->exec(); });
|
||||||
@ -178,6 +155,7 @@ void ResourceDownloadDialog::confirm()
|
|||||||
} else {
|
} else {
|
||||||
for (auto dep : task->getDependecies())
|
for (auto dep : task->getDependecies())
|
||||||
addResource(dep->pack, dep->version);
|
addResource(dep->pack, dep->version);
|
||||||
|
getRequiredBy = task->getRequiredBy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -187,7 +165,8 @@ void ResourceDownloadDialog::confirm()
|
|||||||
});
|
});
|
||||||
for (auto& task : selected) {
|
for (auto& task : selected) {
|
||||||
confirm_dialog->appendResource({ task->getName(), task->getFilename(), task->getCustomPath(),
|
confirm_dialog->appendResource({ task->getName(), task->getFilename(), task->getCustomPath(),
|
||||||
ProviderCaps.name(task->getProvider()), getRequiredBy(selected, task) });
|
ProviderCaps.name(task->getProvider()),
|
||||||
|
getRequiredBy.value(task->getPack()->addonId.toString()) });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (confirm_dialog->exec()) {
|
if (confirm_dialog->exec()) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user