This commit is contained in:
mrbesen 2022-04-24 01:27:46 +02:00
parent e9e2712fdc
commit 50cc9c2cce
Signed by: MrBesen
GPG Key ID: 596B2350DCD67504
11 changed files with 226 additions and 33 deletions

38
include/config.h Normal file
View 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
View 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;
}

View File

@ -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

View File

@ -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 \

95
src/config.cpp Normal file
View 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;
}

View File

@ -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);

View File

@ -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);
}

View File

@ -25,5 +25,5 @@ std::string getHome() {
Log::warn << "$HOME is not set! Defaulting to ./";
return "./";
}
return std::string(homevar);
return std::string(homevar) + "/";
}

20
src/json.cpp Normal file
View 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();
}

View File

@ -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();
}

View File

@ -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_) {