disabled lax deps

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2023-11-04 00:07:51 +02:00
parent 4081c51573
commit a4978946d5
No known key found for this signature in database
GPG Key ID: 55EF5DA53DB36318
7 changed files with 41 additions and 19 deletions

View File

@ -259,9 +259,9 @@ void GetModDependenciesTask::removePack(const QVariant addonId)
#endif #endif
} }
QHash<QString, QStringList> GetModDependenciesTask::getRequiredBy() auto GetModDependenciesTask::getExtraInfo() -> QHash<QString, PackDependencyExtraInfo>
{ {
QHash<QString, QStringList> rby; QHash<QString, PackDependencyExtraInfo> rby;
auto fullList = m_selected + m_pack_dependencies; auto fullList = m_selected + m_pack_dependencies;
for (auto& mod : fullList) { for (auto& mod : fullList) {
auto addonId = mod->pack->addonId; auto addonId = mod->pack->addonId;
@ -283,7 +283,7 @@ QHash<QString, QStringList> GetModDependenciesTask::getRequiredBy()
req.append(smod->pack->name); req.append(smod->pack->name);
} }
} }
rby[addonId.toString()] = req; rby[addonId.toString()] = { maybeInstalled(mod), req };
} }
return rby; return rby;
} }
@ -335,7 +335,7 @@ bool GetModDependenciesTask::isLocalyInstalled(std::shared_ptr<PackDependency> p
}) != m_pack_dependencies.end(); // check loaded dependencies }) != m_pack_dependencies.end(); // check loaded dependencies
} }
bool GetModDependenciesTask::isLaxInstalled(std::shared_ptr<PackDependency> pDep) bool GetModDependenciesTask::maybeInstalled(std::shared_ptr<PackDependency> pDep)
{ {
return std::find_if(m_mods_file_names.begin(), m_mods_file_names.end(), [pDep](QString i) { return std::find_if(m_mods_file_names.begin(), m_mods_file_names.end(), [pDep](QString i) {
return !i.isEmpty() && laxCompare(i, pDep->version.fileName, true); return !i.isEmpty() && laxCompare(i, pDep->version.fileName, true);

View File

@ -50,6 +50,11 @@ class GetModDependenciesTask : public SequentialTask {
} }
}; };
struct PackDependencyExtraInfo {
bool maybe_installed;
QStringList required_by;
};
struct Provider { struct Provider {
ModPlatform::ResourceProvider name; ModPlatform::ResourceProvider name;
std::shared_ptr<ResourceDownload::ModModel> mod; std::shared_ptr<ResourceDownload::ModModel> mod;
@ -62,7 +67,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(); QHash<QString, PackDependencyExtraInfo> getExtraInfo();
protected slots: protected slots:
Task::Ptr prepareDependencyTask(const ModPlatform::Dependency&, const ModPlatform::ResourceProvider, int); Task::Ptr prepareDependencyTask(const ModPlatform::Dependency&, const ModPlatform::ResourceProvider, int);
@ -74,7 +79,7 @@ class GetModDependenciesTask : public SequentialTask {
void removePack(const QVariant addonId); void removePack(const QVariant addonId);
bool isLocalyInstalled(std::shared_ptr<PackDependency> pDep); bool isLocalyInstalled(std::shared_ptr<PackDependency> pDep);
bool isLaxInstalled(std::shared_ptr<PackDependency> pDep); bool maybeInstalled(std::shared_ptr<PackDependency> pDep);
private: private:
QList<std::shared_ptr<PackDependency>> m_pack_dependencies; QList<std::shared_ptr<PackDependency>> m_pack_dependencies;

View File

@ -28,6 +28,7 @@ class CheckUpdateTask : public Task {
QString changelog; QString changelog;
ModPlatform::ResourceProvider provider; ModPlatform::ResourceProvider provider;
shared_qobject_ptr<ResourceDownloadTask> download; shared_qobject_ptr<ResourceDownloadTask> download;
bool enabled = true;
public: public:
UpdatableMod(QString name, UpdatableMod(QString name,
@ -37,7 +38,8 @@ class CheckUpdateTask : public Task {
std::optional<ModPlatform::IndexedVersionType> new_v_type, std::optional<ModPlatform::IndexedVersionType> new_v_type,
QString changelog, QString changelog,
ModPlatform::ResourceProvider p, ModPlatform::ResourceProvider p,
shared_qobject_ptr<ResourceDownloadTask> t) shared_qobject_ptr<ResourceDownloadTask> t,
bool enabled = true)
: name(name) : name(name)
, old_hash(old_h) , old_hash(old_h)
, old_version(old_v) , old_version(old_v)
@ -46,6 +48,7 @@ class CheckUpdateTask : public Task {
, changelog(changelog) , changelog(changelog)
, provider(p) , provider(p)
, download(t) , download(t)
, enabled(enabled)
{} {}
}; };

View File

@ -212,19 +212,25 @@ void ModUpdateDialog::checkCandidates()
} }
static FlameAPI api; static FlameAPI api;
auto getRequiredBy = depTask->getRequiredBy(); auto dependencyExtraInfo = depTask->getExtraInfo();
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)
changelog = api.getModFileChangelog(dep->version.addonId.toInt(), dep->version.fileId.toInt()); changelog = api.getModFileChangelog(dep->version.addonId.toInt(), dep->version.fileId.toInt());
auto download_task = makeShared<ResourceDownloadTask>(dep->pack, dep->version, m_mod_model); auto download_task = makeShared<ResourceDownloadTask>(dep->pack, dep->version, m_mod_model);
CheckUpdateTask::UpdatableMod updatable = { auto extraInfo = dependencyExtraInfo.value(dep->version.addonId.toString());
dep->pack->name, dep->version.hash, "", dep->version.version, dep->version.version_type, CheckUpdateTask::UpdatableMod updatable = { dep->pack->name,
changelog, dep->pack->provider, download_task dep->version.hash,
}; "",
dep->version.version,
dep->version.version_type,
changelog,
dep->pack->provider,
download_task,
!extraInfo.maybe_installed };
appendMod(updatable, getRequiredBy.value(dep->version.addonId.toString())); appendMod(updatable, extraInfo.required_by);
m_tasks.insert(updatable.name, updatable.download); m_tasks.insert(updatable.name, updatable.download);
} }
} }
@ -404,7 +410,10 @@ void ModUpdateDialog::onMetadataFailed(Mod* mod, bool try_others, ModPlatform::R
void ModUpdateDialog::appendMod(CheckUpdateTask::UpdatableMod const& info, QStringList requiredBy) 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, info.enabled ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
if (!info.enabled) {
item_top->setToolTip(0, tr("Mod was disabled as it may be already instaled."));
}
item_top->setText(0, info.name); item_top->setText(0, info.name);
item_top->setExpanded(true); item_top->setExpanded(true);

View File

@ -132,7 +132,7 @@ 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; QHash<QString, GetModDependenciesTask::PackDependencyExtraInfo> dependencyExtraInfo;
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(); });
@ -157,7 +157,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(); dependencyExtraInfo = task->getExtraInfo();
} }
} }
@ -166,9 +166,10 @@ void ResourceDownloadDialog::confirm()
return QString::compare(a->getName(), b->getName(), Qt::CaseInsensitive) < 0; return QString::compare(a->getName(), b->getName(), Qt::CaseInsensitive) < 0;
}); });
for (auto& task : selected) { for (auto& task : selected) {
auto extraInfo = dependencyExtraInfo.value(task->getPack()->addonId.toString());
confirm_dialog->appendResource({ task->getName(), task->getFilename(), task->getCustomPath(), confirm_dialog->appendResource({ task->getName(), task->getFilename(), task->getCustomPath(),
ProviderCaps.name(task->getProvider()), getRequiredBy.value(task->getPack()->addonId.toString()), ProviderCaps.name(task->getProvider()), extraInfo.required_by,
task->getVersion().version_type.toString() }); task->getVersion().version_type.toString(), !extraInfo.maybe_installed });
} }
if (confirm_dialog->exec()) { if (confirm_dialog->exec()) {

View File

@ -34,8 +34,11 @@ auto ReviewMessageBox::create(QWidget* parent, QString&& title, QString&& icon)
void ReviewMessageBox::appendResource(ResourceInformation&& info) void ReviewMessageBox::appendResource(ResourceInformation&& info)
{ {
auto itemTop = new QTreeWidgetItem(ui->modTreeWidget); auto itemTop = new QTreeWidgetItem(ui->modTreeWidget);
itemTop->setCheckState(0, Qt::CheckState::Checked); itemTop->setCheckState(0, info.enabled ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
itemTop->setText(0, info.name); itemTop->setText(0, info.name);
if (!info.enabled) {
itemTop->setToolTip(0, tr("Mod was disabled as it may be already instaled."));
}
auto filenameItem = new QTreeWidgetItem(itemTop); auto filenameItem = new QTreeWidgetItem(itemTop);
filenameItem->setText(0, tr("Filename: %1").arg(info.filename)); filenameItem->setText(0, tr("Filename: %1").arg(info.filename));

View File

@ -19,6 +19,7 @@ class ReviewMessageBox : public QDialog {
QString provider; QString provider;
QStringList required_by; QStringList required_by;
QString version_type; QString version_type;
bool enabled = true;
}; };
void appendResource(ResourceInformation&& info); void appendResource(ResourceInformation&& info);