feat(Settings): emit when setting file writable state has changed
This commit is contained in:
parent
4fc72eda23
commit
d084cd50bd
2 changed files with 27 additions and 1 deletions
|
|
@ -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))
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue