From 801e7da5ee07521b81f405dae1af5097be45fccf Mon Sep 17 00:00:00 2001 From: flow Date: Tue, 18 Oct 2022 11:00:28 -0300 Subject: feat: allow specifying fallbacks to INI files Signed-off-by: flow --- launcher/settings/INISettingsObject.cpp | 23 ++++++++++++++++++++++- launcher/settings/INISettingsObject.h | 5 ++++- 2 files changed, 26 insertions(+), 2 deletions(-) (limited to 'launcher/settings') diff --git a/launcher/settings/INISettingsObject.cpp b/launcher/settings/INISettingsObject.cpp index 12513403..3677e238 100644 --- a/launcher/settings/INISettingsObject.cpp +++ b/launcher/settings/INISettingsObject.cpp @@ -16,7 +16,28 @@ #include "INISettingsObject.h" #include "Setting.h" -INISettingsObject::INISettingsObject(const QString &path, QObject *parent) +#include +#include + +INISettingsObject::INISettingsObject(QStringList paths, QObject *parent) + : SettingsObject(parent) +{ + auto first_path = paths.constFirst(); + auto path = paths.takeFirst(); + while (!QFile::exists(path)) + path = paths.takeFirst(); + + if (path != first_path && QFile::exists(path)) { + // Copy the fallback to the preferred path. + QFile::copy(path, first_path); + qDebug() << "Copied settings from" << path << "to" << first_path; + } + + m_filePath = first_path; + m_ini.loadFile(first_path); +} + +INISettingsObject::INISettingsObject(QString path, QObject* parent) : SettingsObject(parent) { m_filePath = path; diff --git a/launcher/settings/INISettingsObject.h b/launcher/settings/INISettingsObject.h index 26cc32e5..d2f448a9 100644 --- a/launcher/settings/INISettingsObject.h +++ b/launcher/settings/INISettingsObject.h @@ -28,7 +28,10 @@ class INISettingsObject : public SettingsObject { Q_OBJECT public: - explicit INISettingsObject(const QString &path, QObject *parent = 0); + /** 'paths' is a list of INI files to try, in order, for fallback support. */ + explicit INISettingsObject(QStringList paths, QObject* parent = nullptr); + + explicit INISettingsObject(QString path, QObject* parent = nullptr); /*! * \brief Gets the path to the INI file. -- cgit From 3a95a3b7c18519943b6f6d13f43710f708553db3 Mon Sep 17 00:00:00 2001 From: flow Date: Tue, 18 Oct 2022 16:51:42 -0300 Subject: fix: don't take item from a possibly empty list The list gets destroyed when we take the last object, so things explode. :pensive: Signed-off-by: flow --- launcher/settings/INISettingsObject.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'launcher/settings') diff --git a/launcher/settings/INISettingsObject.cpp b/launcher/settings/INISettingsObject.cpp index 3677e238..da962ee9 100644 --- a/launcher/settings/INISettingsObject.cpp +++ b/launcher/settings/INISettingsObject.cpp @@ -23,14 +23,16 @@ INISettingsObject::INISettingsObject(QStringList paths, QObject *parent) : SettingsObject(parent) { auto first_path = paths.constFirst(); - auto path = paths.takeFirst(); - while (!QFile::exists(path)) - path = paths.takeFirst(); + for (auto path : paths) { + if (!QFile::exists(path)) + continue; - if (path != first_path && QFile::exists(path)) { - // Copy the fallback to the preferred path. - QFile::copy(path, first_path); - qDebug() << "Copied settings from" << path << "to" << first_path; + if (path != first_path && QFile::exists(path)) { + // Copy the fallback to the preferred path. + QFile::copy(path, first_path); + qDebug() << "Copied settings from" << path << "to" << first_path; + break; + } } m_filePath = first_path; -- cgit From 8201d1df0279693ab70a00e205a2612878b1d6b5 Mon Sep 17 00:00:00 2001 From: Samisafool Date: Tue, 18 Oct 2022 20:07:04 +0530 Subject: Rename Signed-off-by: Samisafool --- launcher/settings/Setting.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'launcher/settings') diff --git a/launcher/settings/Setting.h b/launcher/settings/Setting.h index 9a5b8210..86007c13 100644 --- a/launcher/settings/Setting.h +++ b/launcher/settings/Setting.h @@ -33,7 +33,7 @@ public: * Construct a Setting * * Synonyms are all the possible names used in the settings object, in order of preference. - * First synonym is the ID, which identifies the setting in PolyMC. + * First synonym is the ID, which identifies the setting in Prism Launcher. * * defVal is the default value that will be returned when the settings object * doesn't have any value for this setting. -- cgit