Skip to content
Snippets Groups Projects
Commit da653b28 authored by Jaron Emmenegger's avatar Jaron Emmenegger
Browse files

Create ConfigStorage class & init default config

parent 38841cd5
No related branches found
No related tags found
No related merge requests found
......@@ -5,6 +5,7 @@
class AbstractApi : public QObject
{
Q_OBJECT
public:
enum State
{
......@@ -14,7 +15,7 @@ public:
};
AbstractApi();
void init() = 0;
virtual void init() = 0;
signals:
void stateChanged(State s);
......
#include <QCoreApplication>
#include <QDebug>
#include "ceaapp.h"
CeaApp::CeaApp()
{
}
void CeaApp::init()
{
if (!mStorage.init()) {
emit requestExit("Failed to initialize/read configfile", true);
return;
}
qDebug() << "juhuu";
}
......@@ -3,12 +3,21 @@
#include <QObject>
#include "configstorage.h"
class CeaApp : public QObject
{
Q_OBJECT
public:
CeaApp();
void init();
signals:
void requestExit(const QString &reason, bool fatal);
private:
ConfigStorage mStorage;
};
#endif // CEAAPP_H
#include "ceaconstants.h"
namespace ConfigKeys
{
const QString apis = "apis";
const QString apiURl = "url";
const QString apiEnabled = "enabled";
const QString binanceApi = "binance";
}
#ifndef CEACONSTANTS_H
#define CEACONSTANTS_H
#include <QString>
namespace ConfigKeys
{
extern const QString apis;
extern const QString apiUrl;
extern const QString apiEnabled;
extern const QString binanceApi;
}
#endif //CEACONSTANTS_H
<RCC>
<qresource prefix="/config">
<file>install/default.json</file>
</qresource>
</RCC>
......@@ -9,8 +9,15 @@ DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
abstractapi.cc \
ceaapp.cc \
ceaconstants.cc \
configstorage.cc \
main.cc
HEADERS += \
abstractapi.h \
ceaapp.h
ceaapp.h \
ceaconstants.h \
configstorage.h
RESOURCES += \
cearesources.qrc
#include <QDebug>
#include <QStandardPaths>
#include <QCoreApplication>
#include <QDir>
#include "configstorage.h"
//-------------------------------------------------------------------------------------------------
ConfigStorage::ConfigStorage()
: mConfigFile(nullptr)
{
}
//-------------------------------------------------------------------------------------------------
bool ConfigStorage::init()
{
Q_ASSERT(!mConfigFile); // call init only once
QString cfgPath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation)
+ "/" + qApp->applicationName();
if (!QDir(cfgPath).mkpath(cfgPath)) {
qWarning() << "Failed to create path" << cfgPath;
return false;
}
cfgPath.append("/config.json");
mConfigFile = new QFile(cfgPath);
bool useDefaults = !mConfigFile->exists() || mConfigFile->size() == 0;
if (!mConfigFile->open(QIODevice::ReadWrite)) {
qWarning() << "Could not open" << cfgPath << "with read/write mode";
return false;
}
if (useDefaults)
revertToDefaults();
return true;
}
//-------------------------------------------------------------------------------------------------
void ConfigStorage::revertToDefaults()
{
Q_ASSERT(mConfigFile && mConfigFile->isOpen()); // call init first
QFile defaults(":/config/install/default.json");
Q_ASSERT(defaults.exists());
bool open = defaults.open(QIODevice::ReadOnly);
Q_ASSERT(open);
mConfigFile->write(defaults.readAll());
mConfigFile->flush();
}
#ifndef CONFIGSTORAGE_H
#define CONFIGSTORAGE_H
#include <QObject>
#include <QFile>
class ConfigStorage : public QObject
{
Q_OBJECT
public:
ConfigStorage();
bool init();
private:
void revertToDefaults();
QFile *mConfigFile;
};
#endif // CONFIGSTORAGE_H
{
"apis" :
{
"binance" :
{
"enabled" : true,
"url" : "wss://stream.binance.com:9443"
}
}
}
\ No newline at end of file
#include <QCoreApplication>
#include <QObject>
#include <QString>
#include <QDebug>
#include "ceaapp.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
CeaApp app;
QObject::connect(&app, &CeaApp::requestExit, [](const QString &reason, bool fatal) {
if (fatal)
qFatal("%s", reason.toUtf8().constData());
else {
qDebug() << reason;
qApp->exit(0);
}
});
app.init();
return a.exec();
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment