2017-07-13 10:26:03 +02:00
|
|
|
/*
|
|
|
|
* cmodlist.h, part of VCMI engine
|
|
|
|
*
|
|
|
|
* Authors: listed in file AUTHORS in main folder
|
|
|
|
*
|
|
|
|
* License: GNU General Public License v2.0 or later
|
|
|
|
* Full text of license available in license.txt file, in main folder
|
|
|
|
*
|
|
|
|
*/
|
2013-08-22 17:22:49 +03:00
|
|
|
#pragma once
|
|
|
|
|
2013-09-21 21:29:26 +03:00
|
|
|
#include <QVariantMap>
|
2013-08-22 17:22:49 +03:00
|
|
|
#include <QVariant>
|
2016-01-09 22:23:55 +02:00
|
|
|
#include <QVector>
|
2013-08-22 17:22:49 +03:00
|
|
|
|
|
|
|
namespace ModStatus
|
|
|
|
{
|
2018-04-13 07:34:58 +02:00
|
|
|
enum EModStatus
|
|
|
|
{
|
|
|
|
MASK_NONE = 0,
|
|
|
|
ENABLED = 1,
|
|
|
|
INSTALLED = 2,
|
|
|
|
UPDATEABLE = 4,
|
|
|
|
MASK_ALL = 255
|
|
|
|
};
|
2013-08-22 17:22:49 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
class CModEntry
|
|
|
|
{
|
|
|
|
// repository contains newest version only (if multiple are available)
|
2013-09-21 21:29:26 +03:00
|
|
|
QVariantMap repository;
|
|
|
|
QVariantMap localData;
|
2013-11-03 15:07:23 +03:00
|
|
|
QVariantMap modSettings;
|
2013-08-22 17:22:49 +03:00
|
|
|
|
|
|
|
QString modname;
|
2018-04-13 07:34:58 +02:00
|
|
|
|
2023-03-14 13:37:22 +02:00
|
|
|
QVariant getValueImpl(QString value, bool localized) const;
|
2013-08-22 17:22:49 +03:00
|
|
|
public:
|
2013-11-03 15:07:23 +03:00
|
|
|
CModEntry(QVariantMap repository, QVariantMap localData, QVariantMap modSettings, QString modname);
|
2013-08-22 17:22:49 +03:00
|
|
|
|
|
|
|
// installed and enabled
|
|
|
|
bool isEnabled() const;
|
|
|
|
// installed but disabled
|
|
|
|
bool isDisabled() const;
|
|
|
|
// available in any of repositories but not installed
|
|
|
|
bool isAvailable() const;
|
|
|
|
// installed and greater version exists in repository
|
|
|
|
bool isUpdateable() const;
|
|
|
|
// installed
|
|
|
|
bool isInstalled() const;
|
2022-09-10 18:30:41 +02:00
|
|
|
// vcmi essential files
|
|
|
|
bool isEssential() const;
|
2022-09-17 15:43:59 +02:00
|
|
|
// checks if verison is compatible with vcmi
|
|
|
|
bool isCompatible() const;
|
2023-10-21 22:55:20 +02:00
|
|
|
// returns true if mod should be visible in Launcher
|
|
|
|
bool isVisible() const;
|
2024-04-20 22:48:54 +02:00
|
|
|
// returns true if mod type is Translation
|
2023-03-14 15:59:33 +02:00
|
|
|
bool isTranslation() const;
|
2024-04-20 22:48:54 +02:00
|
|
|
// returns true if mod type is Compatibility
|
|
|
|
bool isCompatibilityPatch() const;
|
2023-10-21 22:55:20 +02:00
|
|
|
// returns true if this is a submod
|
|
|
|
bool isSubmod() const;
|
2013-08-22 17:22:49 +03:00
|
|
|
|
|
|
|
// see ModStatus enum
|
|
|
|
int getModStatus() const;
|
|
|
|
|
|
|
|
QString getName() const;
|
|
|
|
|
|
|
|
// get value of some field in mod structure. Returns empty optional if value is not present
|
|
|
|
QVariant getValue(QString value) const;
|
2023-03-14 13:37:22 +02:00
|
|
|
QVariant getBaseValue(QString value) const;
|
2013-08-22 17:22:49 +03:00
|
|
|
|
2023-11-19 20:44:28 +02:00
|
|
|
QStringList getDependencies() const;
|
|
|
|
QStringList getConflicts() const;
|
|
|
|
|
2014-01-30 15:35:17 +03:00
|
|
|
static QString sizeToString(double size);
|
2013-08-22 17:22:49 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
class CModList
|
|
|
|
{
|
2013-09-21 21:29:26 +03:00
|
|
|
QVector<QVariantMap> repositories;
|
|
|
|
QVariantMap localModList;
|
|
|
|
QVariantMap modSettings;
|
2013-08-22 17:22:49 +03:00
|
|
|
|
2024-06-06 17:30:11 +02:00
|
|
|
mutable QMap<QString, CModEntry> cachedMods;
|
|
|
|
|
2023-10-28 18:44:58 +02:00
|
|
|
QVariantMap copyField(QVariantMap data, QString from, QString to) const;
|
2018-04-13 07:34:58 +02:00
|
|
|
|
2024-06-06 17:30:11 +02:00
|
|
|
CModEntry getModUncached(QString modname) const;
|
2013-08-22 17:22:49 +03:00
|
|
|
public:
|
2013-08-24 23:11:51 +03:00
|
|
|
virtual void resetRepositories();
|
2022-09-10 18:30:41 +02:00
|
|
|
virtual void reloadRepositories();
|
2013-09-21 21:29:26 +03:00
|
|
|
virtual void addRepository(QVariantMap data);
|
|
|
|
virtual void setLocalModList(QVariantMap data);
|
|
|
|
virtual void setModSettings(QVariant data);
|
2014-03-20 20:06:25 +03:00
|
|
|
virtual void modChanged(QString modID);
|
2013-08-22 17:22:49 +03:00
|
|
|
|
|
|
|
// returns mod by name. Note: mod MUST exist
|
2024-06-06 17:30:11 +02:00
|
|
|
const CModEntry & getMod(QString modname) const;
|
2013-08-22 17:22:49 +03:00
|
|
|
|
|
|
|
// returns list of all mods necessary to run selected one, including mod itself
|
|
|
|
// order is: first mods in list don't have any dependencies, last mod is modname
|
|
|
|
// note: may include mods not present in list
|
|
|
|
QStringList getRequirements(QString modname);
|
|
|
|
|
|
|
|
bool hasMod(QString modname) const;
|
|
|
|
|
|
|
|
// returns list of all available mods
|
|
|
|
QVector<QString> getModList() const;
|
2014-03-23 15:08:01 +03:00
|
|
|
|
|
|
|
QVector<QString> getChildren(QString parent) const;
|
2013-11-03 15:07:23 +03:00
|
|
|
};
|