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 <QCoreApplication>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QFileSystemWatcher>
|
||||||
#include <QRect>
|
#include <QRect>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
#include <QStandardPaths>
|
#include <QStandardPaths>
|
||||||
|
|
@ -32,7 +33,9 @@ void Settings::setSettingsFile(const QString &settingsFile)
|
||||||
if (instance()->m_settings)
|
if (instance()->m_settings)
|
||||||
instance()->m_settings->deleteLater();
|
instance()->m_settings->deleteLater();
|
||||||
|
|
||||||
|
instance()->m_settingsWatcher->removePath(instance()->m_settings->fileName());
|
||||||
instance()->m_settings = new QSettings(settingsFile, QSettings::IniFormat, instance());
|
instance()->m_settings = new QSettings(settingsFile, QSettings::IniFormat, instance());
|
||||||
|
instance()->m_settingsWatcher->addPath(settingsFile);
|
||||||
instance()->m_settingsProxy->load(settingsFile);
|
instance()->m_settingsProxy->load(settingsFile);
|
||||||
qInfo().noquote() << "settings file changed:" << instance()->m_settings->fileName();
|
qInfo().noquote() << "settings file changed:" << instance()->m_settings->fileName();
|
||||||
|
|
||||||
|
|
@ -40,6 +43,7 @@ void Settings::setSettingsFile(const QString &settingsFile)
|
||||||
instance()->cleanSettings();
|
instance()->cleanSettings();
|
||||||
instance()->cleanStateSettings();
|
instance()->cleanStateSettings();
|
||||||
instance()->setupComputerName();
|
instance()->setupComputerName();
|
||||||
|
instance()->checkIfSettingsWritableChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Settings::setStateFile(const QString &stateFile)
|
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();
|
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;
|
QString fileToLoad;
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
|
|
@ -76,6 +80,9 @@ Settings::Settings(QObject *parent) : QObject(parent)
|
||||||
fileToLoad = UserSettingFile;
|
fileToLoad = UserSettingFile;
|
||||||
|
|
||||||
m_settings = new QSettings(fileToLoad, QSettings::IniFormat, this);
|
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 = std::make_shared<QSettingsProxy>();
|
||||||
m_settingsProxy->load(fileToLoad);
|
m_settingsProxy->load(fileToLoad);
|
||||||
qInfo().noquote() << "initial settings file:" << m_settings->fileName();
|
qInfo().noquote() << "initial settings file:" << m_settings->fileName();
|
||||||
|
|
@ -167,6 +174,15 @@ QString Settings::cleanComputerName(const QString &name)
|
||||||
return cleanName;
|
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)
|
QVariant Settings::defaultValue(const QString &key)
|
||||||
{
|
{
|
||||||
if (m_defaultFalseValues.contains(key))
|
if (m_defaultFalseValues.contains(key))
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,7 @@
|
||||||
#include "common/NetworkProtocol.h"
|
#include "common/NetworkProtocol.h"
|
||||||
#include "common/QSettingsProxy.h"
|
#include "common/QSettingsProxy.h"
|
||||||
|
|
||||||
|
class QFileSystemWatcher;
|
||||||
class Settings : public QObject
|
class Settings : public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
@ -198,6 +199,7 @@ public:
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void settingsChanged(const QString key);
|
void settingsChanged(const QString key);
|
||||||
|
void settingsWritableChanged(bool writable);
|
||||||
void serverSettingsChanged();
|
void serverSettingsChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -227,8 +229,16 @@ private:
|
||||||
*/
|
*/
|
||||||
static QString cleanComputerName(const QString &name);
|
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_settings = nullptr;
|
||||||
QSettings *m_stateSettings = nullptr;
|
QSettings *m_stateSettings = nullptr;
|
||||||
|
bool m_settingsWritable;
|
||||||
|
QFileSystemWatcher *m_settingsWatcher = nullptr;
|
||||||
std::shared_ptr<QSettingsProxy> m_settingsProxy;
|
std::shared_ptr<QSettingsProxy> m_settingsProxy;
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue