config
This commit is contained in:
parent
e9e2712fdc
commit
50cc9c2cce
38
include/config.h
Normal file
38
include/config.h
Normal file
|
@ -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;
|
||||||
|
};
|
28
include/json.h
Normal file
28
include/json.h
Normal file
|
@ -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 <QMainWindow>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include "datadragon.h"
|
#include "datadragon.h"
|
||||||
#include "lolautoaccept.h"
|
#include "lolautoaccept.h"
|
||||||
|
|
||||||
|
@ -18,6 +19,9 @@ public:
|
||||||
MainWindow(LolAutoAccept& lolaa, QWidget *parent = nullptr);
|
MainWindow(LolAutoAccept& lolaa, QWidget *parent = nullptr);
|
||||||
~MainWindow();
|
~MainWindow();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void closeEvent(QCloseEvent* event) override;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void toggleMainswitch(bool);
|
void toggleMainswitch(bool);
|
||||||
void aatoggled(bool);
|
void aatoggled(bool);
|
||||||
|
@ -36,6 +40,7 @@ private:
|
||||||
LolAutoAccept& lolaa;
|
LolAutoAccept& lolaa;
|
||||||
std::thread lolaathread;
|
std::thread lolaathread;
|
||||||
DataDragon dd;
|
DataDragon dd;
|
||||||
|
Config conf;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|
|
@ -23,10 +23,12 @@ defineReplace(prependAll) {
|
||||||
}
|
}
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
src/config.cpp \
|
||||||
src/datadragon.cpp \
|
src/datadragon.cpp \
|
||||||
src/datadragonimagecache.cpp \
|
src/datadragonimagecache.cpp \
|
||||||
src/fakescreen.cpp \
|
src/fakescreen.cpp \
|
||||||
src/files.cpp \
|
src/files.cpp \
|
||||||
|
src/json.cpp \
|
||||||
src/lolautoaccept.cpp \
|
src/lolautoaccept.cpp \
|
||||||
src/main.cpp \
|
src/main.cpp \
|
||||||
src/mainwindow.cpp \
|
src/mainwindow.cpp \
|
||||||
|
@ -40,10 +42,12 @@ SOURCES += \
|
||||||
# mainwindow.cpp
|
# mainwindow.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
include/config.h \
|
||||||
include/datadragon.h \
|
include/datadragon.h \
|
||||||
include/datadragonimagecache.h \
|
include/datadragonimagecache.h \
|
||||||
include/fakescreen.h \
|
include/fakescreen.h \
|
||||||
include/files.h \
|
include/files.h \
|
||||||
|
include/json.h \
|
||||||
include/lolautoaccept.h \
|
include/lolautoaccept.h \
|
||||||
include/mainwindow.h \
|
include/mainwindow.h \
|
||||||
include/matcher.h \
|
include/matcher.h \
|
||||||
|
|
95
src/config.cpp
Normal file
95
src/config.cpp
Normal file
|
@ -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 <algorithm> // std::max
|
||||||
|
|
||||||
|
#include "json.h"
|
||||||
|
|
||||||
static const std::string BASEURL = "https://ddragon.leagueoflegends.com/";
|
static const std::string BASEURL = "https://ddragon.leagueoflegends.com/";
|
||||||
const DataDragon::ChampData DataDragon::EMPTYCHAMP;
|
const DataDragon::ChampData DataDragon::EMPTYCHAMP;
|
||||||
|
@ -24,31 +25,6 @@ static size_t arrayWriteCallback(char* contents, size_t size, size_t nmemb, void
|
||||||
return 0;
|
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"}}) {
|
DataDragon::DataDragon() : cache({{"square", ".png"}, {"loading", "_0.jpg"}, {"splash", "_0.jpg"}}) {
|
||||||
curl = curl_easy_init();
|
curl = curl_easy_init();
|
||||||
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
|
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
DataDragonImageCache::DataDragonImageCache(const std::string& folderextra, const std::string& imageext) : imageext(imageext) {
|
DataDragonImageCache::DataDragonImageCache(const std::string& folderextra, const std::string& imageext) : imageext(imageext) {
|
||||||
// init cache dir
|
// init cache dir
|
||||||
cacheDir = getHome() + "/.cache/lolautoaccept/" + folderextra + "/";
|
cacheDir = getHome() + ".cache/lolautoaccept/" + folderextra + "/";
|
||||||
|
|
||||||
mkdirs(cacheDir);
|
mkdirs(cacheDir);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,5 +25,5 @@ std::string getHome() {
|
||||||
Log::warn << "$HOME is not set! Defaulting to ./";
|
Log::warn << "$HOME is not set! Defaulting to ./";
|
||||||
return "./";
|
return "./";
|
||||||
}
|
}
|
||||||
return std::string(homevar);
|
return std::string(homevar) + "/";
|
||||||
}
|
}
|
20
src/json.cpp
Normal file
20
src/json.cpp
Normal file
|
@ -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>
|
#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) {
|
MainWindow::MainWindow(LolAutoAccept& lolaa, QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), lolaa(lolaa) {
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
|
conf.load();
|
||||||
|
|
||||||
ui->prepickstage->setDataDragon(&dd);
|
ui->prepickstage->setDataDragon(&dd);
|
||||||
ui->banstage->setDataDragon(&dd);
|
ui->banstage->setDataDragon(&dd);
|
||||||
ui->pickstage->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() {
|
MainWindow::~MainWindow() {
|
||||||
lolaa.stop();
|
lolaa.stop();
|
||||||
|
conf.save();
|
||||||
|
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::closeEvent(QCloseEvent* event) {
|
||||||
|
conf.save();
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::toggleMainswitch(bool state) {
|
void MainWindow::toggleMainswitch(bool state) {
|
||||||
Log::info << "mainswitch toggled: " << state;
|
Log::info << "mainswitch toggled: " << state;
|
||||||
if(state) {
|
if(state) {
|
||||||
|
@ -41,34 +59,41 @@ void MainWindow::aatoggled(bool state) {
|
||||||
Log::info << "enableAll checkbox toggled " << state;
|
Log::info << "enableAll checkbox toggled " << state;
|
||||||
|
|
||||||
lolaa.setAutoAcceptEnabled(state);
|
lolaa.setAutoAcceptEnabled(state);
|
||||||
|
conf.getConfig().enabledAutoAccept = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::pptoggled(bool state) {
|
void MainWindow::pptoggled(bool state) {
|
||||||
Log::info << "enablePrePick checkbox toggled " << state;
|
Log::info << "enablePrePick checkbox toggled " << state;
|
||||||
lolaa.setPrePickEnabled(state);
|
lolaa.setPrePickEnabled(state);
|
||||||
|
conf.getConfig().prepick.enabled = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::ppedited(const QString& newtext) {
|
void MainWindow::ppedited(const QString& b) {
|
||||||
Log::info << "prepick edited: " << newtext.toStdString();
|
Log::info << "prepick edited: " << b.toStdString();
|
||||||
lolaa.setPrePick(newtext.toStdString());
|
lolaa.setPrePick(b.toStdString());
|
||||||
|
conf.getConfig().prepick.champ = b.toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::bantoggled(bool state) {
|
void MainWindow::bantoggled(bool state) {
|
||||||
Log::info << "enableBan checkbox toggled " << state;
|
Log::info << "enableBan checkbox toggled " << state;
|
||||||
lolaa.setBanEnabled(state);
|
lolaa.setBanEnabled(state);
|
||||||
|
conf.getConfig().ban.enabled = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::banedited(const QString& b) {
|
void MainWindow::banedited(const QString& b) {
|
||||||
Log::info << "ban edited: " << b.toStdString();
|
Log::info << "ban edited: " << b.toStdString();
|
||||||
lolaa.setBan(b.toStdString());
|
lolaa.setBan(b.toStdString());
|
||||||
|
conf.getConfig().ban.champ = b.toStdString();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::picktoggled(bool state) {
|
void MainWindow::picktoggled(bool state) {
|
||||||
Log::info << "enablePick checkbox toggled " << state;
|
Log::info << "enablePick checkbox toggled " << state;
|
||||||
lolaa.setPickEnabled(state);
|
lolaa.setPickEnabled(state);
|
||||||
|
conf.getConfig().pick.enabled = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::pickedited(const QString& p) {
|
void MainWindow::pickedited(const QString& b) {
|
||||||
Log::info << "pick edited: " << p.toStdString();
|
Log::info << "pick edited: " << b.toStdString();
|
||||||
lolaa.setPick(p.toStdString());
|
lolaa.setPick(b.toStdString());
|
||||||
|
conf.getConfig().pick.champ = b.toStdString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ bool StageSettings::getState() const {
|
||||||
|
|
||||||
void StageSettings::setState(bool b) {
|
void StageSettings::setState(bool b) {
|
||||||
ui->checkBox->setCheckState(b ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
|
ui->checkBox->setCheckState(b ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
|
||||||
|
emit toggled(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString StageSettings::getChampion() const {
|
QString StageSettings::getChampion() const {
|
||||||
|
@ -37,6 +38,7 @@ QString StageSettings::getChampion() const {
|
||||||
|
|
||||||
void StageSettings::setChampion(const QString& str) {
|
void StageSettings::setChampion(const QString& str) {
|
||||||
ui->lineEdit->setText(str);
|
ui->lineEdit->setText(str);
|
||||||
|
championChangedinternal(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
void StageSettings::setDataDragon(DataDragon* dd_) {
|
void StageSettings::setDataDragon(DataDragon* dd_) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user