now value and setValue of secureQSettings are always called in the main thread
This commit is contained in:
parent
c1b6149e49
commit
645cf52803
3 changed files with 67 additions and 31 deletions
|
|
@ -14,12 +14,14 @@ constexpr const char *keyChainName = "AmneziaVPN-Keychain";
|
||||||
|
|
||||||
class SecureQSettings : public QObject
|
class SecureQSettings : public QObject
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit SecureQSettings(const QString &organization, const QString &application = QString(),
|
explicit SecureQSettings(const QString &organization, const QString &application = QString(),
|
||||||
QObject *parent = nullptr);
|
QObject *parent = nullptr);
|
||||||
|
|
||||||
QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
|
Q_INVOKABLE QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
|
||||||
void setValue(const QString &key, const QVariant &value);
|
Q_INVOKABLE void setValue(const QString &key, const QVariant &value);
|
||||||
void remove(const QString &key);
|
void remove(const QString &key);
|
||||||
void sync();
|
void sync();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,8 @@
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
|
#include "QThread"
|
||||||
|
#include "QCoreApplication"
|
||||||
|
|
||||||
#include "utilities.h"
|
#include "utilities.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
|
|
||||||
|
|
@ -12,10 +16,10 @@ Settings::Settings(QObject *parent) : QObject(parent), m_settings(ORGANIZATION_N
|
||||||
{
|
{
|
||||||
// Import old settings
|
// Import old settings
|
||||||
if (serversCount() == 0) {
|
if (serversCount() == 0) {
|
||||||
QString user = m_settings.value("Server/userName").toString();
|
QString user = value("Server/userName").toString();
|
||||||
QString password = m_settings.value("Server/password").toString();
|
QString password = value("Server/password").toString();
|
||||||
QString serverName = m_settings.value("Server/serverName").toString();
|
QString serverName = value("Server/serverName").toString();
|
||||||
int port = m_settings.value("Server/serverPort").toInt();
|
int port = value("Server/serverPort").toInt();
|
||||||
|
|
||||||
if (!user.isEmpty() && !password.isEmpty() && !serverName.isEmpty()) {
|
if (!user.isEmpty() && !password.isEmpty() && !serverName.isEmpty()) {
|
||||||
QJsonObject server;
|
QJsonObject server;
|
||||||
|
|
@ -211,7 +215,7 @@ QString Settings::nextAvailableServerName() const
|
||||||
|
|
||||||
void Settings::setSaveLogs(bool enabled)
|
void Settings::setSaveLogs(bool enabled)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Conf/saveLogs", enabled);
|
setValue("Conf/saveLogs", enabled);
|
||||||
if (!isSaveLogs()) {
|
if (!isSaveLogs()) {
|
||||||
Logger::deInit();
|
Logger::deInit();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -233,7 +237,7 @@ QString Settings::routeModeString(RouteMode mode) const
|
||||||
|
|
||||||
Settings::RouteMode Settings::routeMode() const
|
Settings::RouteMode Settings::routeMode() const
|
||||||
{
|
{
|
||||||
return static_cast<RouteMode>(m_settings.value("Conf/routeMode", 0).toInt());
|
return static_cast<RouteMode>(value("Conf/routeMode", 0).toInt());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Settings::addVpnSite(RouteMode mode, const QString &site, const QString &ip)
|
bool Settings::addVpnSite(RouteMode mode, const QString &site, const QString &ip)
|
||||||
|
|
@ -321,12 +325,12 @@ void Settings::removeAllVpnSites(RouteMode mode)
|
||||||
|
|
||||||
QString Settings::primaryDns() const
|
QString Settings::primaryDns() const
|
||||||
{
|
{
|
||||||
return m_settings.value("Conf/primaryDns", cloudFlareNs1).toString();
|
return value("Conf/primaryDns", cloudFlareNs1).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString Settings::secondaryDns() const
|
QString Settings::secondaryDns() const
|
||||||
{
|
{
|
||||||
return m_settings.value("Conf/secondaryDns", cloudFlareNs2).toString();
|
return value("Conf/secondaryDns", cloudFlareNs2).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Settings::clearSettings()
|
void Settings::clearSettings()
|
||||||
|
|
@ -351,3 +355,30 @@ ServerCredentials Settings::serverCredentials(int index) const
|
||||||
|
|
||||||
return credentials;
|
return credentials;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QVariant Settings::value(const QString &key, const QVariant &defaultValue) const
|
||||||
|
{
|
||||||
|
QVariant returnValue;
|
||||||
|
if (QThread::currentThread() == QCoreApplication::instance()->thread()) {
|
||||||
|
returnValue = m_settings.value(key, defaultValue);
|
||||||
|
} else {
|
||||||
|
QMetaObject::invokeMethod(&m_settings, "value",
|
||||||
|
Qt::BlockingQueuedConnection,
|
||||||
|
Q_RETURN_ARG(QVariant, returnValue),
|
||||||
|
Q_ARG(const QString&, key),
|
||||||
|
Q_ARG(const QVariant&, defaultValue));
|
||||||
|
}
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Settings::setValue(const QString &key, const QVariant &value)
|
||||||
|
{
|
||||||
|
if (QThread::currentThread() == QCoreApplication::instance()->thread()) {
|
||||||
|
m_settings.setValue(key, value);
|
||||||
|
} else {
|
||||||
|
QMetaObject::invokeMethod(&m_settings, "setValue",
|
||||||
|
Qt::BlockingQueuedConnection,
|
||||||
|
Q_ARG(const QString&, key),
|
||||||
|
Q_ARG(const QVariant&, value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,11 +29,11 @@ public:
|
||||||
|
|
||||||
QJsonArray serversArray() const
|
QJsonArray serversArray() const
|
||||||
{
|
{
|
||||||
return QJsonDocument::fromJson(m_settings.value("Servers/serversList").toByteArray()).array();
|
return QJsonDocument::fromJson(value("Servers/serversList").toByteArray()).array();
|
||||||
}
|
}
|
||||||
void setServersArray(const QJsonArray &servers)
|
void setServersArray(const QJsonArray &servers)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Servers/serversList", QJsonDocument(servers).toJson());
|
setValue("Servers/serversList", QJsonDocument(servers).toJson());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Servers section
|
// Servers section
|
||||||
|
|
@ -45,11 +45,11 @@ public:
|
||||||
|
|
||||||
int defaultServerIndex() const
|
int defaultServerIndex() const
|
||||||
{
|
{
|
||||||
return m_settings.value("Servers/defaultServerIndex", 0).toInt();
|
return value("Servers/defaultServerIndex", 0).toInt();
|
||||||
}
|
}
|
||||||
void setDefaultServer(int index)
|
void setDefaultServer(int index)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Servers/defaultServerIndex", index);
|
setValue("Servers/defaultServerIndex", index);
|
||||||
}
|
}
|
||||||
QJsonObject defaultServer() const
|
QJsonObject defaultServer() const
|
||||||
{
|
{
|
||||||
|
|
@ -78,25 +78,25 @@ public:
|
||||||
// App settings section
|
// App settings section
|
||||||
bool isAutoConnect() const
|
bool isAutoConnect() const
|
||||||
{
|
{
|
||||||
return m_settings.value("Conf/autoConnect", false).toBool();
|
return value("Conf/autoConnect", false).toBool();
|
||||||
}
|
}
|
||||||
void setAutoConnect(bool enabled)
|
void setAutoConnect(bool enabled)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Conf/autoConnect", enabled);
|
setValue("Conf/autoConnect", enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isStartMinimized() const
|
bool isStartMinimized() const
|
||||||
{
|
{
|
||||||
return m_settings.value("Conf/startMinimized", false).toBool();
|
return value("Conf/startMinimized", false).toBool();
|
||||||
}
|
}
|
||||||
void setStartMinimized(bool enabled)
|
void setStartMinimized(bool enabled)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Conf/startMinimized", enabled);
|
setValue("Conf/startMinimized", enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isSaveLogs() const
|
bool isSaveLogs() const
|
||||||
{
|
{
|
||||||
return m_settings.value("Conf/saveLogs", false).toBool();
|
return value("Conf/saveLogs", false).toBool();
|
||||||
}
|
}
|
||||||
void setSaveLogs(bool enabled);
|
void setSaveLogs(bool enabled);
|
||||||
|
|
||||||
|
|
@ -110,15 +110,15 @@ public:
|
||||||
QString routeModeString(RouteMode mode) const;
|
QString routeModeString(RouteMode mode) const;
|
||||||
|
|
||||||
RouteMode routeMode() const;
|
RouteMode routeMode() const;
|
||||||
void setRouteMode(RouteMode mode) { m_settings.setValue("Conf/routeMode", mode); }
|
void setRouteMode(RouteMode mode) { setValue("Conf/routeMode", mode); }
|
||||||
|
|
||||||
QVariantMap vpnSites(RouteMode mode) const
|
QVariantMap vpnSites(RouteMode mode) const
|
||||||
{
|
{
|
||||||
return m_settings.value("Conf/" + routeModeString(mode)).toMap();
|
return value("Conf/" + routeModeString(mode)).toMap();
|
||||||
}
|
}
|
||||||
void setVpnSites(RouteMode mode, const QVariantMap &sites)
|
void setVpnSites(RouteMode mode, const QVariantMap &sites)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Conf/" + routeModeString(mode), sites);
|
setValue("Conf/" + routeModeString(mode), sites);
|
||||||
m_settings.sync();
|
m_settings.sync();
|
||||||
}
|
}
|
||||||
bool addVpnSite(RouteMode mode, const QString &site, const QString &ip = "");
|
bool addVpnSite(RouteMode mode, const QString &site, const QString &ip = "");
|
||||||
|
|
@ -132,11 +132,11 @@ public:
|
||||||
|
|
||||||
bool useAmneziaDns() const
|
bool useAmneziaDns() const
|
||||||
{
|
{
|
||||||
return m_settings.value("Conf/useAmneziaDns", true).toBool();
|
return value("Conf/useAmneziaDns", true).toBool();
|
||||||
}
|
}
|
||||||
void setUseAmneziaDns(bool enabled)
|
void setUseAmneziaDns(bool enabled)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Conf/useAmneziaDns", enabled);
|
setValue("Conf/useAmneziaDns", enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString primaryDns() const;
|
QString primaryDns() const;
|
||||||
|
|
@ -145,13 +145,13 @@ public:
|
||||||
// QString primaryDns() const { return m_primaryDns; }
|
// QString primaryDns() const { return m_primaryDns; }
|
||||||
void setPrimaryDns(const QString &primaryDns)
|
void setPrimaryDns(const QString &primaryDns)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Conf/primaryDns", primaryDns);
|
setValue("Conf/primaryDns", primaryDns);
|
||||||
}
|
}
|
||||||
|
|
||||||
// QString secondaryDns() const { return m_secondaryDns; }
|
// QString secondaryDns() const { return m_secondaryDns; }
|
||||||
void setSecondaryDns(const QString &secondaryDns)
|
void setSecondaryDns(const QString &secondaryDns)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Conf/secondaryDns", secondaryDns);
|
setValue("Conf/secondaryDns", secondaryDns);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char cloudFlareNs1[];
|
static const char cloudFlareNs1[];
|
||||||
|
|
@ -171,20 +171,20 @@ public:
|
||||||
|
|
||||||
QLocale getAppLanguage()
|
QLocale getAppLanguage()
|
||||||
{
|
{
|
||||||
return m_settings.value("Conf/appLanguage", QLocale()).toLocale();
|
return value("Conf/appLanguage", QLocale()).toLocale();
|
||||||
};
|
};
|
||||||
void setAppLanguage(QLocale locale)
|
void setAppLanguage(QLocale locale)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Conf/appLanguage", locale);
|
setValue("Conf/appLanguage", locale);
|
||||||
};
|
};
|
||||||
|
|
||||||
bool isScreenshotsEnabled() const
|
bool isScreenshotsEnabled() const
|
||||||
{
|
{
|
||||||
return m_settings.value("Conf/screenshotsEnabled", false).toBool();
|
return value("Conf/screenshotsEnabled", false).toBool();
|
||||||
}
|
}
|
||||||
void setScreenshotsEnabled(bool enabled)
|
void setScreenshotsEnabled(bool enabled)
|
||||||
{
|
{
|
||||||
m_settings.setValue("Conf/screenshotsEnabled", enabled);
|
setValue("Conf/screenshotsEnabled", enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearSettings();
|
void clearSettings();
|
||||||
|
|
@ -193,7 +193,10 @@ signals:
|
||||||
void saveLogsChanged();
|
void saveLogsChanged();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SecureQSettings m_settings;
|
QVariant value(const QString &key, const QVariant &defaultValue = QVariant()) const;
|
||||||
|
void setValue(const QString &key, const QVariant &value);
|
||||||
|
|
||||||
|
mutable SecureQSettings m_settings;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SETTINGS_H
|
#endif // SETTINGS_H
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue