Switch to JSON-encoded store

Signed-off-by: Yihe Li <winmikedows@hotmail.com>
This commit is contained in:
Yihe Li 2025-06-01 16:13:16 +08:00
parent 7c3a810d3d
commit d2ee023788
No known key found for this signature in database
3 changed files with 17 additions and 16 deletions

View file

@ -69,7 +69,7 @@ BaseInstance::BaseInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr s
m_settings->registerSetting("lastTimePlayed", 0); m_settings->registerSetting("lastTimePlayed", 0);
m_settings->registerSetting("linkedInstances", "[]"); m_settings->registerSetting("linkedInstances", "[]");
m_settings->registerSetting("shortcuts", QVariant::fromValue(QList<ShortcutData>{})); m_settings->registerSetting("shortcuts", QVariant::fromValue(QByteArray{}));
// Game time override // Game time override
auto gameTimeOverride = m_settings->registerSetting("OverrideGameTime", false); auto gameTimeOverride = m_settings->registerSetting("OverrideGameTime", false);
@ -410,12 +410,26 @@ void BaseInstance::registerShortcut(const ShortcutData& data)
void BaseInstance::setShortcuts(const QList<ShortcutData>& shortcuts) void BaseInstance::setShortcuts(const QList<ShortcutData>& shortcuts)
{ {
// FIXME: if no change, do not set. setting involves saving a file. // FIXME: if no change, do not set. setting involves saving a file.
m_settings->set("shortcuts", QVariant::fromValue(shortcuts)); QJsonArray array;
for (const auto& elem : shortcuts) {
array.append(QJsonObject{ { "name", elem.name }, { "filePath", elem.filePath }, { "target", static_cast<int>(elem.target) } });
}
QJsonDocument document;
document.setArray(array);
m_settings->set("shortcuts", QVariant::fromValue(document.toJson(QJsonDocument::Compact)));
} }
QList<ShortcutData> BaseInstance::shortcuts() const QList<ShortcutData> BaseInstance::shortcuts() const
{ {
return m_settings->get("shortcuts").value<QList<ShortcutData>>(); auto data = m_settings->get("shortcuts").value<QByteArray>();
auto document = QJsonDocument::fromJson(data);
QList<ShortcutData> results;
for (const auto& elem : document.array()) {
auto dict = elem.toObject();
results.append({ dict["name"].toString(), dict["filePath"].toString(), static_cast<ShortcutTarget>(dict["target"].toInt()) });
}
return results;
} }
QString BaseInstance::name() const QString BaseInstance::name() const

View file

@ -76,17 +76,6 @@ struct ShortcutData {
QString name; QString name;
QString filePath; QString filePath;
ShortcutTarget target = ShortcutTarget::Other; ShortcutTarget target = ShortcutTarget::Other;
friend QDataStream& operator<<(QDataStream& out, const ShortcutData& data)
{
out << data.name << data.filePath << data.target;
return out;
}
friend QDataStream& operator>>(QDataStream& in, ShortcutData& data)
{
in >> data.name >> data.filePath >> data.target;
return in;
}
}; };
/*! /*!
@ -339,6 +328,5 @@ class BaseInstance : public QObject, public std::enable_shared_from_this<BaseIns
}; };
Q_DECLARE_METATYPE(shared_qobject_ptr<BaseInstance>) Q_DECLARE_METATYPE(shared_qobject_ptr<BaseInstance>)
Q_DECLARE_METATYPE(ShortcutData)
// Q_DECLARE_METATYPE(BaseInstance::InstanceFlag) // Q_DECLARE_METATYPE(BaseInstance::InstanceFlag)
// Q_DECLARE_OPERATORS_FOR_FLAGS(BaseInstance::InstanceFlags) // Q_DECLARE_OPERATORS_FOR_FLAGS(BaseInstance::InstanceFlags)

View file

@ -670,7 +670,6 @@ InstancePtr InstanceList::loadInstance(const InstanceId& id)
} }
auto instanceRoot = FS::PathCombine(m_instDir, id); auto instanceRoot = FS::PathCombine(m_instDir, id);
qRegisterMetaType<QList<ShortcutData>>("QList<ShortcutData>");
auto instanceSettings = std::make_shared<INISettingsObject>(FS::PathCombine(instanceRoot, "instance.cfg")); auto instanceSettings = std::make_shared<INISettingsObject>(FS::PathCombine(instanceRoot, "instance.cfg"));
InstancePtr inst; InstancePtr inst;