resolve runestyle names

This commit is contained in:
mrbesen 2022-07-10 15:56:09 +02:00
parent 1cb3134c8e
commit c2203b4b5d
Signed by untrusted user: MrBesen
GPG Key ID: 596B2350DCD67504
9 changed files with 85 additions and 5 deletions

View File

@ -5,6 +5,7 @@
#include "position.h"
#include "runeaspekt.h"
#include "runepage.h"
#include "runestyle.h"
class ClientAPI : public RestClient {
public:
@ -170,10 +171,9 @@ public:
bool editRunePage(const RunePage& page);
std::vector<RuneAspekt> getAllRuneAspekts();
std::vector<RuneStyle> getAllRuneStyles();
protected:
const std::string& getRuneStyleByID(uint32_t id);
private:
ClientAccess access;

View File

@ -9,6 +9,7 @@
#include "config.h"
#include "datadragon.h"
#include "runepage.h"
#include "runestyle.h"
class LolAutoAccept {
public:
@ -40,6 +41,7 @@ protected:
BlitzAPI blitzapi;
std::vector<RuneAspekt> runeaspekts;
std::vector<RuneStyle> runestyles;
bool nextApplyRunes = false;
@ -63,6 +65,7 @@ public:
void reload(); // reload the config, when something was changed
const std::vector<RuneAspekt>& getRuneAspekts();
const std::vector<RuneStyle>& getRuneStyles();
void applyRunes();
void setOnRuneChangeFunc(onruneschange_func on);

View File

@ -4,6 +4,7 @@
#include "runeaspekt.h"
#include "runepage.h"
#include "runestyle.h"
namespace Ui {
class RuneDisplay;
@ -17,6 +18,7 @@ public:
~RuneDisplay();
void setRuneMeta(const std::vector<RuneAspekt>& runeinfo);
void setStyles(const std::vector<RuneStyle>& styleinfos);
void setRunes(const RunePage& rp);
private slots:
@ -28,10 +30,13 @@ signals:
private:
void updateText();
std::string getRuneText(uint32_t id);
std::string getRuneStyleByID(uint32_t id);
Ui::RuneDisplay *ui;
RunePage runepage;
std::vector<RuneAspekt> runeinfo;
std::vector<RuneStyle> runestyles;
};

17
include/runestyle.h Normal file
View File

@ -0,0 +1,17 @@
#pragma once
#include <cstdint>
#include <string>
// fwd.
class QJsonObject;
struct RuneStyle {
uint32_t id;
std::string name;
std::string iconPath;
std::string tooltip;
RuneStyle();
explicit RuneStyle(const QJsonObject& json);
};

View File

@ -247,3 +247,22 @@ std::vector<RuneAspekt> ClientAPI::getAllRuneAspekts() {
}
return out;
}
std::vector<RuneStyle> ClientAPI::getAllRuneStyles() {
QJsonDocument doc = request("lol-perks/v1/styles");
if(!doc.isArray()) {
Log::warn << __PRETTY_FUNCTION__ << " doc is not array";
return {};
}
QJsonArray arr = doc.array();
std::vector<RuneStyle> out;
out.reserve(arr.size());
for(auto it : arr) {
if(it.isObject()) {
out.push_back((RuneStyle) it.toObject());
}
}
return out;
}

View File

@ -207,6 +207,15 @@ ClientAPI::RunePage::RunePage(const QJsonObject& json) {
}
}
RuneStyle::RuneStyle() {}
RuneStyle::RuneStyle(const QJsonObject& json) {
id = getValue<int32_t>(json, "id", 0);
name = getValue<std::string>(json, "name");
iconPath = getValue<std::string>(json, "iconPath");
tooltip = getValue<std::string>(json, "tooltip");
}
RuneAspekt::RuneAspekt() {}
RuneAspekt::RuneAspekt(const QJsonObject& json) {
id = getValue<int32_t>(json, "id", 0);

View File

@ -83,6 +83,17 @@ const std::vector<RuneAspekt>& LolAutoAccept::getRuneAspekts() {
return runeaspekts;
}
const std::vector<RuneStyle>& LolAutoAccept::getRuneStyles() {
if(runestyles.empty()) {
if(clientapi) {
runestyles = clientapi->getAllRuneStyles();
Log::info << "Loaded " << runestyles.size() << " rune styles";
}
}
return runestyles;
}
void LolAutoAccept::applyRunes() {
nextApplyRunes = true;
}

View File

@ -56,6 +56,7 @@ void MainWindow::toggleMainswitch(bool state) {
}
ui->runedisplay->setRuneMeta(lolaa.getRuneAspekts());
ui->runedisplay->setStyles(lolaa.getRuneStyles());
lolaa.run();

View File

@ -3,6 +3,8 @@
#include <sstream>
const static std::string EMPTY;
RuneDisplay::RuneDisplay(QWidget *parent) : QWidget(parent), ui(new Ui::RuneDisplay) {
ui->setupUi(this);
}
@ -15,6 +17,10 @@ void RuneDisplay::setRuneMeta(const std::vector<RuneAspekt>& ri) {
runeinfo = ri;
}
void RuneDisplay::setStyles(const std::vector<RuneStyle>& styleinfos) {
runestyles = styleinfos;
}
void RuneDisplay::setRunes(const RunePage& rp) {
runepage = rp;
@ -34,7 +40,7 @@ void RuneDisplay::updateText() {
return;
}
out << "primary: " << getRuneText(runepage.primaryStyle) << " secondary: " << getRuneText(runepage.secondaryStyle) << '\n';
out << getRuneStyleByID(runepage.primaryStyle) << " with " << getRuneStyleByID(runepage.secondaryStyle) << '\n';
for(uint32_t rune : runepage.selectedAspects) {
out << getRuneText(rune) << '\n';
@ -51,4 +57,13 @@ std::string RuneDisplay::getRuneText(uint32_t id) {
}
return "(" + std::to_string(id) + ")";
}
}
std::string RuneDisplay::getRuneStyleByID(uint32_t id) {
auto it = std::find_if(runestyles.begin(), runestyles.end(), [id](const RuneStyle& rs) { return rs.id == id; });
if(it == runestyles.end()) {
return '(' + std::to_string(id) + ')';
}
return it->name;
}