feat(Settings): emit when setting file writable state has changed

This commit is contained in:
sithlord48 2026-08-13 02:12:05 -04:00 committed by Nick Bolton
parent 4fc72eda23
commit d084cd50bd
2 changed files with 27 additions and 1 deletions

View file

@ -12,6 +12,7 @@
#include <QCoreApplication>
#include <QFile>
#include <QFileSystemWatcher>
#include <QRect>
#include <QRegularExpression>
#include <QStandardPaths>
@ -32,7 +33,9 @@ void Settings::setSettingsFile(const QString &settingsFile)
if (instance()->m_settings)
instance()->m_settings->deleteLater();
instance()->m_settingsWatcher->removePath(instance()->m_settings->fileName());
instance()->m_settings = new QSettings(settingsFile, QSettings::IniFormat, instance());
instance()->m_settingsWatcher->addPath(settingsFile);
instance()->m_settingsProxy->load(settingsFile);
qInfo().noquote() << "settings file changed:" << instance()->m_settings->fileName();
@ -40,6 +43,7 @@ void Settings::setSettingsFile(const QString &settingsFile)
instance()->cleanSettings();
instance()->cleanStateSettings();
instance()->setupComputerName();
instance()->checkIfSettingsWritableChange();
}
void Settings::setStateFile(const QString &stateFile)
@ -56,7 +60,7 @@ void Settings::setStateFile(const QString &stateFile)
qInfo().noquote() << "state file changed:" << instance()->m_stateSettings->fileName();
}
Settings::Settings(QObject *parent) : QObject(parent)
Settings::Settings(QObject *parent) : QObject(parent), m_settingsWatcher{new QFileSystemWatcher(this)}
{
QString fileToLoad;
#ifdef Q_OS_WIN
@ -76,6 +80,9 @@ Settings::Settings(QObject *parent) : QObject(parent)
fileToLoad = UserSettingFile;
m_settings = new QSettings(fileToLoad, QSettings::IniFormat, this);
m_settingsWritable = m_settings->isWritable();
m_settingsWatcher->addPath(m_settings->fileName());
connect(m_settingsWatcher, &QFileSystemWatcher::fileChanged, this, &Settings::checkIfSettingsWritableChange);
m_settingsProxy = std::make_shared<QSettingsProxy>();
m_settingsProxy->load(fileToLoad);
qInfo().noquote() << "initial settings file:" << m_settings->fileName();
@ -167,6 +174,15 @@ QString Settings::cleanComputerName(const QString &name)
return cleanName;
}
void Settings::checkIfSettingsWritableChange() const
{
bool writable = m_settings->isWritable();
if (writable == m_settingsWritable)
return;
instance()->m_settingsWritable = writable;
Q_EMIT instance()->settingsWritableChanged(writable);
}
QVariant Settings::defaultValue(const QString &key)
{
if (m_defaultFalseValues.contains(key))

View file

@ -15,6 +15,7 @@
#include "common/NetworkProtocol.h"
#include "common/QSettingsProxy.h"
class QFileSystemWatcher;
class Settings : public QObject
{
Q_OBJECT
@ -198,6 +199,7 @@ public:
Q_SIGNALS:
void settingsChanged(const QString key);
void settingsWritableChanged(bool writable);
void serverSettingsChanged();
private:
@ -227,8 +229,16 @@ private:
*/
static QString cleanComputerName(const QString &name);
/**
* @brief checkIfSettingsWritableChange
* Checks if the changed settings is now read only
*/
void checkIfSettingsWritableChange() const;
QSettings *m_settings = nullptr;
QSettings *m_stateSettings = nullptr;
bool m_settingsWritable;
QFileSystemWatcher *m_settingsWatcher = nullptr;
std::shared_ptr<QSettingsProxy> m_settingsProxy;
// clang-format off