config
This commit is contained in:
parent
e9e2712fdc
commit
50cc9c2cce
|
@ -0,0 +1,38 @@
|
|||
#pragma once
|
||||
|
||||
#include <QJsonObject>
|
||||
|
||||
class Config {
|
||||
public:
|
||||
struct StageConfig {
|
||||
StageConfig();
|
||||
StageConfig(const QJsonObject&);
|
||||
operator QJsonObject() const;
|
||||
|
||||
std::string champ;
|
||||
bool enabled;
|
||||
};
|
||||
|
||||
struct RootConfig {
|
||||
RootConfig();
|
||||
RootConfig(const QJsonObject&);
|
||||
operator QJsonObject() const;
|
||||
|
||||
StageConfig prepick;
|
||||
StageConfig ban;
|
||||
StageConfig pick;
|
||||
bool enabledAutoAccept;
|
||||
};
|
||||
|
||||
Config();
|
||||
~Config();
|
||||
|
||||
bool load();
|
||||
void save();
|
||||
|
||||
RootConfig& getConfig();
|
||||
private:
|
||||
std::string configFolderPath;
|
||||
std::string configFilePath;
|
||||
RootConfig root;
|
||||
};
|
|
@ -0,0 +1,28 @@
|
|||
#pragma once
|
||||
|
||||
// helper functions for the QJsonObjects
|
||||
#include <QJsonObject>
|
||||
#include <QJsonValue>
|
||||
|
||||
template<typename T>
|
||||
T convert(const QJsonValue& val) {
|
||||
return val.toObject();
|
||||
}
|
||||
|
||||
template<>
|
||||
int convert(const QJsonValue& val);
|
||||
|
||||
template<>
|
||||
std::string convert(const QJsonValue& val);
|
||||
|
||||
template<>
|
||||
bool convert(const QJsonValue& val);
|
||||
|
||||
template<typename T>
|
||||
T getValue(const QJsonObject& obj, const char* key, const T& def = {}) {
|
||||
auto it = obj.constFind(key);
|
||||
if(it != obj.constEnd()) {
|
||||
return convert<T>(it.value());
|
||||
}
|
||||
return def;
|
||||
}
|
|
@ -4,6 +4,7 @@
|
|||
#include <QMainWindow>
|
||||
#include <thread>
|
||||
|
||||
#include "config.h"
|
||||
#include "datadragon.h"
|
||||
#include "lolautoaccept.h"
|
||||
|
||||
|
@ -18,6 +19,9 @@ public:
|
|||
MainWindow(LolAutoAccept& lolaa, QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
protected:
|
||||
virtual void closeEvent(QCloseEvent* event) override;
|
||||
|
||||
private slots:
|
||||
void toggleMainswitch(bool);
|
||||
void aatoggled(bool);
|
||||
|
@ -36,6 +40,7 @@ private:
|
|||
LolAutoAccept& lolaa;
|
||||
std::thread lolaathread;
|
||||
DataDragon dd;
|
||||
Config conf;
|
||||
};
|
||||
|
||||
#endif // MAINWINDOW_H
|
||||
|
|
|
@ -23,10 +23,12 @@ defineReplace(prependAll) {
|
|||
}
|
||||
|
||||
SOURCES += \
|
||||
src/config.cpp \
|
||||
src/datadragon.cpp \
|
||||
src/datadragonimagecache.cpp \
|
||||
src/fakescreen.cpp \
|
||||
src/files.cpp \
|
||||
src/json.cpp \
|
||||
src/lolautoaccept.cpp \
|
||||
src/main.cpp \
|
||||
src/mainwindow.cpp \
|
||||
|
@ -40,10 +42,12 @@ SOURCES += \
|
|||
# mainwindow.cpp
|
||||
|
||||
HEADERS += \
|
||||
include/config.h \
|
||||
include/datadragon.h \
|
||||
include/datadragonimagecache.h \
|
||||
include/fakescreen.h \
|
||||
include/files.h \
|
||||
include/json.h \
|
||||
include/lolautoaccept.h \
|
||||
include/mainwindow.h \
|
||||
include/matcher.h \
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
#include "config.h"
|
||||
|
||||
#include "files.h"
|
||||
#include <QFile>
|
||||
#include <QJsonDocument>
|
||||
|
||||
#include <Log.h>
|
||||
|
||||
#include "json.h"
|
||||
|
||||
Config::StageConfig::StageConfig() : enabled(false) {}
|
||||
|
||||
Config::StageConfig::StageConfig(const QJsonObject& j) {
|
||||
champ = getValue<std::string>(j, "champ", "");
|
||||
enabled = getValue(j, "enabled", false);
|
||||
}
|
||||
|
||||
Config::StageConfig::operator QJsonObject() const {
|
||||
QJsonObject out;
|
||||
|
||||
out.insert("champ", QString::fromStdString(champ));
|
||||
out.insert("enabled", enabled);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
Config::RootConfig::RootConfig() {}
|
||||
|
||||
Config::RootConfig::RootConfig(const QJsonObject& j) {
|
||||
prepick = getValue<Config::StageConfig>(j, "prepick");
|
||||
ban = getValue<Config::StageConfig>(j, "ban");
|
||||
pick = getValue<Config::StageConfig>(j, "pick");
|
||||
enabledAutoAccept = getValue(j, "enabledAutoAccept", false);
|
||||
}
|
||||
|
||||
Config::RootConfig::operator QJsonObject() const {
|
||||
QJsonObject out;
|
||||
|
||||
out.insert("prepick", (QJsonObject) prepick);
|
||||
out.insert("ban", (QJsonObject) ban);
|
||||
out.insert("pick", (QJsonObject) pick);
|
||||
out.insert("enabledAutoAccept", enabledAutoAccept);
|
||||
|
||||
return out;
|
||||
}
|
||||
|
||||
Config::Config() {
|
||||
configFolderPath = getHome() + ".config/lolautoaccept/";
|
||||
configFilePath = configFolderPath + "config.json";
|
||||
}
|
||||
|
||||
Config::~Config() {}
|
||||
|
||||
bool Config::load() {
|
||||
QFile conffile(QString::fromStdString(configFilePath));
|
||||
if(!conffile.open(QIODevice::ReadOnly)) {
|
||||
Log::error << "could not open configfile: " << configFilePath;
|
||||
return false;
|
||||
}
|
||||
|
||||
QJsonParseError err;
|
||||
QJsonDocument doc = QJsonDocument::fromJson(conffile.readAll(), &err);
|
||||
if(err.error != QJsonParseError::NoError) {
|
||||
Log::error << "config parse error: " << err.errorString().toStdString() << " position: " << err.offset;
|
||||
return false;
|
||||
}
|
||||
if(doc.isObject()) {
|
||||
root = doc.object();
|
||||
Log::info << "config loaded";
|
||||
return true;
|
||||
}
|
||||
|
||||
Log::error << "config is not a json object!";
|
||||
return false;
|
||||
}
|
||||
|
||||
void Config::save() {
|
||||
Log::note << "Config::save()";
|
||||
mkdirs(configFolderPath);
|
||||
|
||||
QFile conffile(QString::fromStdString(configFilePath));
|
||||
if(!conffile.open(QIODevice::WriteOnly)) {
|
||||
Log::error << "could not open configfile: " << configFilePath;
|
||||
return;
|
||||
}
|
||||
|
||||
QJsonDocument doc;
|
||||
doc.setObject(root);
|
||||
conffile.write(doc.toJson());
|
||||
Log::info << "config saved";
|
||||
}
|
||||
|
||||
Config::RootConfig& Config::getConfig() {
|
||||
return root;
|
||||
}
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
#include <algorithm> // std::max
|
||||
|
||||
#include "json.h"
|
||||
|
||||
static const std::string BASEURL = "https://ddragon.leagueoflegends.com/";
|
||||
const DataDragon::ChampData DataDragon::EMPTYCHAMP;
|
||||
|
@ -24,31 +25,6 @@ static size_t arrayWriteCallback(char* contents, size_t size, size_t nmemb, void
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
template<typename T>
|
||||
T convert(const QJsonValue& val);
|
||||
|
||||
template<>
|
||||
int convert(const QJsonValue& val) {
|
||||
if(val.isString())
|
||||
return val.toString().toInt();
|
||||
return val.toInt();
|
||||
}
|
||||
|
||||
template<>
|
||||
std::string convert(const QJsonValue& val) {
|
||||
return val.toString().toStdString();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static T getValue(const QJsonObject& obj, const char* key, const T& def) {
|
||||
auto it = obj.constFind(key);
|
||||
if(it != obj.constEnd()) {
|
||||
return convert<T>(it.value());
|
||||
}
|
||||
return def;
|
||||
}
|
||||
|
||||
DataDragon::DataDragon() : cache({{"square", ".png"}, {"loading", "_0.jpg"}, {"splash", "_0.jpg"}}) {
|
||||
curl = curl_easy_init();
|
||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
DataDragonImageCache::DataDragonImageCache(const std::string& folderextra, const std::string& imageext) : imageext(imageext) {
|
||||
// init cache dir
|
||||
cacheDir = getHome() + "/.cache/lolautoaccept/" + folderextra + "/";
|
||||
cacheDir = getHome() + ".cache/lolautoaccept/" + folderextra + "/";
|
||||
|
||||
mkdirs(cacheDir);
|
||||
}
|
||||
|
|
|
@ -25,5 +25,5 @@ std::string getHome() {
|
|||
Log::warn << "$HOME is not set! Defaulting to ./";
|
||||
return "./";
|
||||
}
|
||||
return std::string(homevar);
|
||||
return std::string(homevar) + "/";
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
#include "json.h"
|
||||
|
||||
template<>
|
||||
int convert(const QJsonValue& val) {
|
||||
if(val.isString())
|
||||
return val.toString().toInt();
|
||||
return val.toInt();
|
||||
}
|
||||
|
||||
template<>
|
||||
std::string convert(const QJsonValue& val) {
|
||||
return val.toString().toStdString();
|
||||
}
|
||||
|
||||
template<>
|
||||
bool convert(const QJsonValue& val) {
|
||||
if(val.isString())
|
||||
return val.toString().toDouble() != 0;
|
||||
return val.toBool();
|
||||
}
|
|
@ -5,20 +5,38 @@
|
|||
|
||||
#include <future>
|
||||
|
||||
static void applySetting(const Config::StageConfig& sc, StageSettings* ss) {
|
||||
ss->setState(sc.enabled);
|
||||
ss->setChampion(QString::fromStdString(sc.champ));
|
||||
}
|
||||
|
||||
MainWindow::MainWindow(LolAutoAccept& lolaa, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), lolaa(lolaa) {
|
||||
ui->setupUi(this);
|
||||
|
||||
conf.load();
|
||||
|
||||
ui->prepickstage->setDataDragon(&dd);
|
||||
ui->banstage->setDataDragon(&dd);
|
||||
ui->pickstage->setDataDragon(&dd);
|
||||
|
||||
const Config::RootConfig& rc = conf.getConfig();
|
||||
ui->enableAll->setChecked(rc.enabledAutoAccept);
|
||||
applySetting(rc.prepick, ui->prepickstage);
|
||||
applySetting(rc.ban, ui->banstage);
|
||||
applySetting(rc.pick, ui->pickstage);
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow() {
|
||||
lolaa.stop();
|
||||
conf.save();
|
||||
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent* event) {
|
||||
conf.save();
|
||||
}
|
||||
|
||||
void MainWindow::toggleMainswitch(bool state) {
|
||||
Log::info << "mainswitch toggled: " << state;
|
||||
if(state) {
|
||||
|
@ -41,34 +59,41 @@ void MainWindow::aatoggled(bool state) {
|
|||
Log::info << "enableAll checkbox toggled " << state;
|
||||
|
||||
lolaa.setAutoAcceptEnabled(state);
|
||||
conf.getConfig().enabledAutoAccept = state;
|
||||
}
|
||||
|
||||
void MainWindow::pptoggled(bool state) {
|
||||
Log::info << "enablePrePick checkbox toggled " << state;
|
||||
lolaa.setPrePickEnabled(state);
|
||||
conf.getConfig().prepick.enabled = state;
|
||||
}
|
||||
|
||||
void MainWindow::ppedited(const QString& newtext) {
|
||||
Log::info << "prepick edited: " << newtext.toStdString();
|
||||
lolaa.setPrePick(newtext.toStdString());
|
||||
void MainWindow::ppedited(const QString& b) {
|
||||
Log::info << "prepick edited: " << b.toStdString();
|
||||
lolaa.setPrePick(b.toStdString());
|
||||
conf.getConfig().prepick.champ = b.toStdString();
|
||||
}
|
||||
|
||||
void MainWindow::bantoggled(bool state) {
|
||||
Log::info << "enableBan checkbox toggled " << state;
|
||||
lolaa.setBanEnabled(state);
|
||||
conf.getConfig().ban.enabled = state;
|
||||
}
|
||||
|
||||
void MainWindow::banedited(const QString& b) {
|
||||
Log::info << "ban edited: " << b.toStdString();
|
||||
lolaa.setBan(b.toStdString());
|
||||
conf.getConfig().ban.champ = b.toStdString();
|
||||
}
|
||||
|
||||
void MainWindow::picktoggled(bool state) {
|
||||
Log::info << "enablePick checkbox toggled " << state;
|
||||
lolaa.setPickEnabled(state);
|
||||
conf.getConfig().pick.enabled = state;
|
||||
}
|
||||
|
||||
void MainWindow::pickedited(const QString& p) {
|
||||
Log::info << "pick edited: " << p.toStdString();
|
||||
lolaa.setPick(p.toStdString());
|
||||
void MainWindow::pickedited(const QString& b) {
|
||||
Log::info << "pick edited: " << b.toStdString();
|
||||
lolaa.setPick(b.toStdString());
|
||||
conf.getConfig().pick.champ = b.toStdString();
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@ bool StageSettings::getState() const {
|
|||
|
||||
void StageSettings::setState(bool b) {
|
||||
ui->checkBox->setCheckState(b ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
|
||||
emit toggled(b);
|
||||
}
|
||||
|
||||
QString StageSettings::getChampion() const {
|
||||
|
@ -37,6 +38,7 @@ QString StageSettings::getChampion() const {
|
|||
|
||||
void StageSettings::setChampion(const QString& str) {
|
||||
ui->lineEdit->setText(str);
|
||||
championChangedinternal(str);
|
||||
}
|
||||
|
||||
void StageSettings::setDataDragon(DataDragon* dd_) {
|
||||
|
|
Loading…
Reference in New Issue