Newer
Older
#include <QDebug>
#include <QStandardPaths>
#include <QCoreApplication>
#include <QDir>
#include "configstorage.h"
#define CHECK_INTERVAL 300
//-------------------------------------------------------------------------------------------------
ConfigStorage::ConfigStorage()
: mConfigFileName(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)
+ "/" + qApp->applicationName() + "/config.json")
connect(&mWatchTimer, &QTimer::timeout, this, &ConfigStorage::checkConfigUpdate);
}
//-------------------------------------------------------------------------------------------------
bool ConfigStorage::init()
{
updateConfig();
mWatchTimer.start(CHECK_INTERVAL);
//-------------------------------------------------------------------------------------------------
void ConfigStorage::checkConfigUpdate()
{
QDateTime lastModification = QFileInfo(mConfigFileName).lastModified();
if (!lastModification.isValid()) {
emit requestAppExit("Configuration file removed");
return;
}
if (QFileInfo(mConfigFileName).lastModified() > mLastUpdate)
updateConfig();
}
//-------------------------------------------------------------------------------------------------
QDir configDir = QFileInfo(mConfigFileName).absoluteDir();
if (!configDir.exists() && ! configDir.mkpath(".")) {
qWarning() << "Failed to create path" << configDir.absolutePath();
return false;
}
QFileInfo config(mConfigFileName);
// create default configuration file
if ((!config.exists() || config.size() == 0) && !revertToDefaults()) {
qWarning() << "Failed to create default configuration";
return false;
}
return true;
//-------------------------------------------------------------------------------------------------
mLastUpdate = QDateTime::currentDateTime();
QFile file(mConfigFileName);
bool open = file.open(QIODevice::ReadOnly);
Q_ASSERT(open);
QJsonParseError err = mParser.setConfig(file.readAll());
if (err.error != QJsonParseError::NoError) {
qWarning() << "Invalid Json configuration:" << err.errorString() << ". Keeping old configuration";
return;
}
mApis = mParser.allApiCfgs();
emit configUpdate();
}
//-------------------------------------------------------------------------------------------------
bool ConfigStorage::revertToDefaults()
{
QFile defaults(":/config/install/default.json");
Q_ASSERT(defaults.exists());
bool open = defaults.open(QIODevice::ReadOnly);
Q_ASSERT(open);
QFile config(mConfigFileName);
if (!config.open(QIODevice::WriteOnly))
return false;
config.write(defaults.readAll());
return true;