diff --git a/launcher/BaseInstance.cpp b/launcher/BaseInstance.cpp index 2187bc09a..8a6060948 100644 --- a/launcher/BaseInstance.cpp +++ b/launcher/BaseInstance.cpp @@ -69,7 +69,7 @@ BaseInstance::BaseInstance(SettingsObjectPtr globalSettings, SettingsObjectPtr s m_settings->registerSetting("lastTimePlayed", 0); m_settings->registerSetting("linkedInstances", "[]"); - m_settings->registerSetting("shortcuts", QVariant::fromValue(QList{})); + m_settings->registerSetting("shortcuts", QVariant::fromValue(QByteArray{})); // Game time override auto gameTimeOverride = m_settings->registerSetting("OverrideGameTime", false); @@ -410,12 +410,26 @@ void BaseInstance::registerShortcut(const ShortcutData& data) void BaseInstance::setShortcuts(const QList& shortcuts) { // 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(elem.target) } }); + } + + QJsonDocument document; + document.setArray(array); + m_settings->set("shortcuts", QVariant::fromValue(document.toJson(QJsonDocument::Compact))); } QList BaseInstance::shortcuts() const { - return m_settings->get("shortcuts").value>(); + auto data = m_settings->get("shortcuts").value(); + auto document = QJsonDocument::fromJson(data); + QList results; + for (const auto& elem : document.array()) { + auto dict = elem.toObject(); + results.append({ dict["name"].toString(), dict["filePath"].toString(), static_cast(dict["target"].toInt()) }); + } + return results; } QString BaseInstance::name() const diff --git a/launcher/BaseInstance.h b/launcher/BaseInstance.h index 52aa39067..3509c0155 100644 --- a/launcher/BaseInstance.h +++ b/launcher/BaseInstance.h @@ -76,17 +76,6 @@ struct ShortcutData { QString name; QString filePath; 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) -Q_DECLARE_METATYPE(ShortcutData) // Q_DECLARE_METATYPE(BaseInstance::InstanceFlag) // Q_DECLARE_OPERATORS_FOR_FLAGS(BaseInstance::InstanceFlags) diff --git a/launcher/InstanceList.cpp b/launcher/InstanceList.cpp index b98f51d82..f6512b25d 100644 --- a/launcher/InstanceList.cpp +++ b/launcher/InstanceList.cpp @@ -670,7 +670,6 @@ InstancePtr InstanceList::loadInstance(const InstanceId& id) } auto instanceRoot = FS::PathCombine(m_instDir, id); - qRegisterMetaType>("QList"); auto instanceSettings = std::make_shared(FS::PathCombine(instanceRoot, "instance.cfg")); InstancePtr inst;