1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-02-13 13:18:43 +02:00

Implement some TODO's, fix sonar warnings

This commit is contained in:
Ivan Savenko 2024-11-18 14:40:15 +00:00
parent 5ca65f14bd
commit 879eb2184f
6 changed files with 39 additions and 72 deletions

View File

@ -457,7 +457,6 @@ void CModListView::selectMod(const QModelIndex & index)
//FIXME: this function should be recursive
//FIXME: ensure that this is also reflected correctly in "Notes" section of mod description
bool hasInvalidDeps = !findInvalidDependencies(modName).empty();
//bool hasBlockingMods = !findBlockingMods(modName).empty();
bool hasDependentMods = !findDependentMods(modName, true).empty();
ui->disableButton->setVisible(modStateModel->isModEnabled(mod.getID()));
@ -521,29 +520,6 @@ QStringList CModListView::findInvalidDependencies(QString mod)
return ret;
}
QStringList CModListView::findBlockingMods(QString modUnderTest)
{
QStringList ret;
auto required = modStateModel->getMod(modUnderTest).getDependencies();
for(QString name : modStateModel->getAllMods())
{
auto mod = modStateModel->getMod(name);
if(modStateModel->isModEnabled(mod.getID()))
{
// one of enabled mods have requirement (or this mod) marked as conflict
for(const auto & conflict : mod.getConflicts())
{
if(required.contains(conflict))
ret.push_back(name);
}
}
}
return ret;
}
QStringList CModListView::findDependentMods(QString mod, bool excludeDisabled)
{
QStringList ret;
@ -691,7 +667,9 @@ void CModListView::manualInstallFile(QString filePath)
for(const auto widget : qApp->allWidgets())
if(auto settingsView = qobject_cast<CSettingsView *>(widget))
settingsView->loadSettings();
// TODO: rescan local mods
modStateModel->reloadLocalState();
modModel->reloadRepositories();
}
}
}
@ -879,8 +857,8 @@ void CModListView::installFiles(QStringList files)
if(futureExtract.get())
{
//update
CResourceHandler::get("initial")->updateFilteredFiles([](const std::string &){ return true; });
// TODO: rescan local mods
modStateModel->reloadLocalState();
modModel->reloadRepositories();
}
}
@ -1080,7 +1058,6 @@ void CModListView::on_allModsView_doubleClicked(const QModelIndex &index)
auto mod = modStateModel->getMod(modName);
bool hasInvalidDeps = !findInvalidDependencies(modName).empty();
bool hasBlockingMods = !findBlockingMods(modName).empty();
bool hasDependentMods = !findDependentMods(modName, true).empty();
if(!hasInvalidDeps && mod.isAvailable() && !mod.isSubmod())
@ -1105,7 +1082,7 @@ void CModListView::on_allModsView_doubleClicked(const QModelIndex &index)
return;
}
if(!hasBlockingMods && !hasInvalidDeps && !modStateModel->isModEnabled(modName))
if(!hasInvalidDeps && !modStateModel->isModEnabled(modName))
{
on_enableButton_clicked();
return;

View File

@ -48,8 +48,6 @@ class CModListView : public QWidget
// find mods unknown to mod list (not present in repo and not installed)
QStringList findInvalidDependencies(QString mod);
// find mods that block enabling of this mod: conflicting with this mod or one of required mods
QStringList findBlockingMods(QString modUnderTest);
// find mods that depend on this one
QStringList findDependentMods(QString mod, bool excludeDisabled);

View File

@ -14,17 +14,6 @@
#include <QIcon>
namespace ModStatus
{
static const QString iconDelete = ":/icons/mod-delete.png";
static const QString iconDisabled = ":/icons/mod-disabled.png";
static const QString iconDisabledSubmod = ":/icons/submod-disabled.png";
static const QString iconDownload = ":/icons/mod-download.png";
static const QString iconEnabled = ":/icons/mod-enabled.png";
static const QString iconEnabledSubmod = ":/icons/submod-enabled.png";
static const QString iconUpdate = ":/icons/mod-update.png";
}
ModStateItemModel::ModStateItemModel(std::shared_ptr<ModStateModel> model, QObject * parent)
: QAbstractItemModel(parent)
, model(model)
@ -109,6 +98,13 @@ QVariant ModStateItemModel::getText(const ModState & mod, int field) const
QVariant ModStateItemModel::getIcon(const ModState & mod, int field) const
{
static const QString iconDisabled = ":/icons/mod-disabled.png";
static const QString iconDisabledSubmod = ":/icons/submod-disabled.png";
static const QString iconDownload = ":/icons/mod-download.png";
static const QString iconEnabled = ":/icons/mod-enabled.png";
static const QString iconEnabledSubmod = ":/icons/submod-enabled.png";
static const QString iconUpdate = ":/icons/mod-update.png";
if (field == ModFields::STATUS_ENABLED)
{
if (!model->isModInstalled(mod.getID()))
@ -119,24 +115,24 @@ QVariant ModStateItemModel::getIcon(const ModState & mod, int field) const
if (!model->isModEnabled(mod.getTopParentID()))
{
if (model->isModEnabled(mod.getID()))
return QIcon(ModStatus::iconEnabledSubmod);
return QIcon(iconEnabledSubmod);
else
return QIcon(ModStatus::iconDisabledSubmod);
return QIcon(iconDisabledSubmod);
}
}
if (model->isModEnabled(mod.getID()))
return QIcon(ModStatus::iconEnabled);
return QIcon(iconEnabled);
else
return QIcon(ModStatus::iconDisabled);
return QIcon(iconDisabled);
}
if(field == ModFields::STATUS_UPDATE)
{
if (model->isModUpdateAvailable(mod.getID()))
return QIcon(ModStatus::iconUpdate);
return QIcon(iconUpdate);
if (!model->isModInstalled(mod.getID()))
return QIcon(ModStatus::iconDownload);
return QIcon(iconDownload);
}
return QVariant();
@ -189,7 +185,7 @@ Qt::ItemFlags ModStateItemModel::flags(const QModelIndex &) const
QVariant ModStateItemModel::headerData(int section, Qt::Orientation orientation, int role) const
{
static const QString header[ModFields::COUNT] =
static const std::array header =
{
QT_TRANSLATE_NOOP("ModFields", "Name"),
QT_TRANSLATE_NOOP("ModFields", ""), // status icon
@ -198,7 +194,7 @@ QVariant ModStateItemModel::headerData(int section, Qt::Orientation orientation,
};
if(role == Qt::DisplayRole && orientation == Qt::Horizontal)
return QCoreApplication::translate("ModFields", header[section].toStdString().c_str());
return QCoreApplication::translate("ModFields", header[section]);
return QVariant();
}
@ -311,7 +307,7 @@ bool CModFilterModel::filterAcceptsRow(int source_row, const QModelIndex & sourc
for(size_t i = 0; i < base->rowCount(index); i++)
{
if(filterMatchesThis(base->index((int)i, 0, index)))
if(filterMatchesThis(base->index(i, 0, index)))
return true;
}

View File

@ -69,7 +69,7 @@ class ModStateItemModel final : public QAbstractItemModel
QVariant getIcon(const ModState & mod, int field) const;
public:
explicit ModStateItemModel(std::shared_ptr<ModStateModel> model, QObject * parent = nullptr);
explicit ModStateItemModel(std::shared_ptr<ModStateModel> model, QObject * parent);
/// CModListContainer overrides
void reloadRepositories();
@ -81,7 +81,7 @@ public:
int rowCount(const QModelIndex & parent) const override;
int columnCount(const QModelIndex & parent) const override;
QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const override;
QModelIndex index(int row, int column, const QModelIndex & parent) const override;
QModelIndex parent(const QModelIndex & child) const override;
Qt::ItemFlags flags(const QModelIndex & index) const override;

View File

@ -262,11 +262,9 @@ void CContentHandler::init()
bool CContentHandler::preloadData(const ModDescription & mod, bool validate)
{
bool result = true;
if (validate && mod.getID() != ModScope::scopeBuiltin()) // TODO: remove workaround
{
if (!JsonUtils::validate(mod.getLocalConfig(), "vcmi:mod", mod.getID()))
result = false;
}
if (!JsonUtils::validate(mod.getLocalConfig(), "vcmi:mod", mod.getID()))
result = false;
for(auto & handler : handlers)
{

View File

@ -103,7 +103,7 @@ double ModsState::getInstalledModSizeMegabytes(const TModID & modName) const
sizeBytes += boost::filesystem::file_size(*it);
}
double sizeMegabytes = sizeBytes / double(1024*1024);
double sizeMegabytes = sizeBytes / static_cast<double>(1024*1024);
return sizeMegabytes;
}
@ -150,20 +150,19 @@ std::vector<TModID> ModsState::scanModsDirectory(const std::string & modDir) con
///////////////////////////////////////////////////////////////////////////////
static JsonNode loadModSettings(const JsonPath & path)
{
if(CResourceHandler::get("local")->existsResource(ResourcePath(path)))
{
return JsonNode(path);
}
// Probably new install. Create initial configuration
CResourceHandler::get("local")->createResource(path.getOriginalName() + ".json");
return JsonNode();
}
ModsPresetState::ModsPresetState()
{
modConfig = loadModSettings(JsonPath::builtin("config/modSettings.json"));
static const JsonPath settingsPath = JsonPath::builtin("config/modSettings.json");
if(CResourceHandler::get("local")->existsResource(ResourcePath(settingsPath)))
{
modConfig = JsonNode(settingsPath);
}
else
{
// Probably new install. Create initial configuration
CResourceHandler::get("local")->createResource(settingsPath.getOriginalName() + ".json");
}
if(modConfig["presets"].isNull())
{
@ -365,7 +364,6 @@ ModManager::ModManager(const JsonNode & repositoryList)
: modsState(std::make_unique<ModsState>())
, modsPreset(std::make_unique<ModsPresetState>())
{
//TODO: load only active mods & all their submods in game mode?
modsStorage = std::make_unique<ModsStorage>(modsState->getInstalledMods(), repositoryList);
eraseMissingModsFromPreset();