1
0
Fork 0
mirror of https://github.com/HamletDuFromage/aio-switch-updater.git synced 2024-11-24 18:42:05 +00:00

fetch jc/pc profiles online

This commit is contained in:
flb 2022-01-06 01:35:39 +01:00
parent 29269e82bd
commit a2f98dc05c
7 changed files with 236 additions and 212 deletions

View file

@ -1,12 +1,13 @@
#pragma once #pragma once
#include <json.hpp> #include <json.hpp>
#include <deque>
namespace JC { namespace JC {
int setColor(const std::vector<int>& colors); int setColor(const std::vector<int>& colors);
int backupToJSON(nlohmann::json& profiles, const std::string& path); int backupToJSON(nlohmann::json& profiles, const std::string& path);
std::vector<std::pair<std::string, std::vector<int>>> getProfiles(const std::string& path); std::deque<std::pair<std::string, std::vector<int>>> getProfiles(const std::string& path);
void changeJCColor(const std::vector<int>& values); void changeJCColor(const std::vector<int>& values);
nlohmann::json backupProfile(); nlohmann::json backupProfile();
void backupJCColor(const std::string& path); void backupJCColor(const std::string& path);
@ -17,7 +18,7 @@ namespace PC {
int setColor(const std::vector<int>& colors); int setColor(const std::vector<int>& colors);
int backupToJSON(nlohmann::json& profiles, const std::string& path); int backupToJSON(nlohmann::json& profiles, const std::string& path);
std::vector<std::pair<std::string, std::vector<int>>> getProfiles(const std::string& path); std::deque<std::pair<std::string, std::vector<int>>> getProfiles(const std::string& path);
void changePCColor(const std::vector<int>& values); void changePCColor(const std::vector<int>& values);
nlohmann::json backupProfile(); nlohmann::json backupProfile();
void backupPCColor(const std::string& path); void backupPCColor(const std::string& path);

View file

@ -68,7 +68,9 @@ constexpr const char CONTENTS_PATH[] = "contents/";
constexpr const char TITLES_PATH[] = "titles/"; constexpr const char TITLES_PATH[] = "titles/";
constexpr const char COLOR_PICKER_URL[] = "https://git.io/jcpicker"; constexpr const char COLOR_PICKER_URL[] = "https://git.io/jcpicker";
constexpr const char COLOR_PROFILES_PATH[] = "/config/aio-switch-updater/jc_profiles.json"; constexpr const char JC_COLOR_URL[] = "https://raw.githubusercontent.com/HamletDuFromage/aio-switch-updater/master/jc_profiles.json";
constexpr const char JC_COLOR_PATH[] = "/config/aio-switch-updater/jc_profiles.json";
constexpr const char PC_COLOR_URL[] = "https://raw.githubusercontent.com/HamletDuFromage/aio-switch-updater/master/pc_profiles.json";
constexpr const char PC_COLOR_PATH[] = "/config/aio-switch-updater/pc_profiles.json"; constexpr const char PC_COLOR_PATH[] = "/config/aio-switch-updater/pc_profiles.json";
constexpr const char PAYLOAD_PATH[] = "/payloads/"; constexpr const char PAYLOAD_PATH[] = "/payloads/";

View file

@ -1,143 +1,31 @@
[ [
{ {
"L_BTN": "1E0F46", "L_BTN": "0F0F0F",
"L_JC": "2D50F0", "L_JC": "828282",
"R_BTN": "00051E", "R_BTN": "0F0F0F",
"R_JC": "500FC8", "R_JC": "828282",
"name": "The Legend of Zelda: Skyward Sword HD" "name": "Gray"
},
{
"L_BTN": "323232",
"L_JC": "E6E6E6",
"R_BTN": "323232",
"R_JC": "E6E6E6",
"name": "White"
}, },
{ {
"L_BTN": "0F0F0F", "L_BTN": "0F0F0F",
"L_JC": "818282", "L_JC": "313131",
"R_BTN": "0F0F0F", "R_BTN": "0F0F0F",
"R_JC": "818282", "R_JC": "313131",
"name": "Monster Hunter Rise Edition Gray" "name": "Black (devkit)"
},
{
"L_BTN": "140014",
"L_JC": "B400E6",
"R_BTN": "28001E",
"R_JC": "FF3278",
"name": "Disney Tsum Tsum Festival"
},
{
"L_BTN": "00000F",
"L_JC": "1473FA",
"R_BTN": "00000F",
"R_JC": "1473FA",
"name": "Dragon Quest XI S Lotto Edition Royal-Blue"
},
{
"L_BTN": "0A1E0A",
"L_JC": "82FF96",
"R_BTN": "0A1E28",
"R_JC": "96F5F5",
"name": "Animal Crossing: New Horizons"
},
{
"L_BTN": "1E1914",
"L_JC": "D7AA73",
"R_BTN": "1E1914",
"R_JC": "D7AA73",
"name": "Nintendo Labo Creators Contest Edition"
},
{
"L_BTN": "281900",
"L_JC": "C88C32",
"R_BTN": "322800",
"R_JC": "FFDC00",
"name": "Pokemon Let's Go! Eevee and Pikachu"
},
{
"L_BTN": "1E1914",
"L_JC": "F04614",
"R_BTN": "1E1914",
"R_JC": "F04614",
"name": "Mario Red & Blue"
},
{
"L_BTN": "000F1E",
"L_JC": "0084FF",
"R_BTN": "1A1100",
"R_JC": "FFCC00",
"name": "Fortnite Fleet Force"
},
{
"L_BTN": "1A1100",
"L_JC": "FFCC00",
"R_BTN": "000F1E",
"R_JC": "0084FF",
"name": "Fortnite Wildcat"
},
{
"L_BTN": "002800",
"L_JC": "1EDC00",
"R_BTN": "28001E",
"R_JC": "FF3278",
"name": "Splatoon 2 Neon Green & Neon Pink"
},
{
"L_BTN": "00000A",
"L_JC": "4655F5",
"R_BTN": "00000A",
"R_JC": "4655F5",
"name": "Blue"
},
{
"L_BTN": "280A0A",
"L_JC": "E10F00",
"R_BTN": "280A0A",
"R_JC": "E10F00",
"name": "Red"
},
{
"L_BTN": "0F0A00",
"L_JC": "FAA005",
"R_BTN": "0F0A00",
"R_JC": "FAA005",
"name": "Neon Orange"
},
{
"L_BTN": "140014",
"L_JC": "B400E6",
"R_BTN": "140014",
"R_JC": "B400E6",
"name": "Neon Purple"
},
{
"L_BTN": "002800",
"L_JC": "1EDC00",
"R_BTN": "002800",
"R_JC": "1EDC00",
"name": "Neon Green"
},
{
"L_BTN": "28001E",
"L_JC": "FF3278",
"R_BTN": "28001E",
"R_JC": "FF3278",
"name": "Neon Pink"
},
{
"L_BTN": "142800",
"L_JC": "E6FF00",
"R_BTN": "142800",
"R_JC": "E6FF00",
"name": "Neon Yellow"
},
{
"L_BTN": "1E0A0A",
"L_JC": "FF3C28",
"R_BTN": "1E0A0A",
"R_JC": "FF3C28",
"name": "Neon Red"
}, },
{ {
"L_BTN": "001E1E", "L_BTN": "001E1E",
"L_JC": "0AB9E6", "L_JC": "0AB9E6",
"R_BTN": "001E1E", "R_BTN": "1E0A0A",
"R_JC": "0AB9E6", "R_JC": "FF3C28",
"name": "Neon Blue" "name": "Neon Blue (L) & Neon Red (R)"
}, },
{ {
"L_BTN": "1E0A0A", "L_BTN": "1E0A0A",
@ -149,29 +37,141 @@
{ {
"L_BTN": "001E1E", "L_BTN": "001E1E",
"L_JC": "0AB9E6", "L_JC": "0AB9E6",
"R_BTN": "001E1E",
"R_JC": "0AB9E6",
"name": "Neon Blue"
},
{
"L_BTN": "1E0A0A",
"L_JC": "FF3C28",
"R_BTN": "1E0A0A", "R_BTN": "1E0A0A",
"R_JC": "FF3C28", "R_JC": "FF3C28",
"name": "Neon Blue (L) & Neon Red (R)" "name": "Neon Red"
},
{
"L_BTN": "142800",
"L_JC": "E6FF00",
"R_BTN": "142800",
"R_JC": "E6FF00",
"name": "Neon Yellow"
},
{
"L_BTN": "28001E",
"L_JC": "FF3278",
"R_BTN": "28001E",
"R_JC": "FF3278",
"name": "Neon Pink"
},
{
"L_BTN": "002800",
"L_JC": "1EDC00",
"R_BTN": "002800",
"R_JC": "1EDC00",
"name": "Neon Green"
},
{
"L_BTN": "140014",
"L_JC": "B400E6",
"R_BTN": "140014",
"R_JC": "B400E6",
"name": "Neon Purple"
},
{
"L_BTN": "0F0A00",
"L_JC": "FAA005",
"R_BTN": "0F0A00",
"R_JC": "FAA005",
"name": "Neon Orange"
},
{
"L_BTN": "280A0A",
"L_JC": "E10F00",
"R_BTN": "280A0A",
"R_JC": "E10F00",
"name": "Red"
},
{
"L_BTN": "00000A",
"L_JC": "4655F5",
"R_BTN": "00000A",
"R_JC": "4655F5",
"name": "Blue"
},
{
"L_BTN": "002800",
"L_JC": "1EDC00",
"R_BTN": "28001E",
"R_JC": "FF3278",
"name": "Splatoon 2 Neon Green & Neon Pink"
},
{
"L_BTN": "1A1100",
"L_JC": "FFCC00",
"R_BTN": "000F1E",
"R_JC": "0084FF",
"name": "Fortnite Wildcat"
},
{
"L_BTN": "000F1E",
"L_JC": "0084FF",
"R_BTN": "1A1100",
"R_JC": "FFCC00",
"name": "Fortnite Fleet Force"
},
{
"L_BTN": "1E1914",
"L_JC": "F04614",
"R_BTN": "1E1914",
"R_JC": "F04614",
"name": "Mario Red & Blue"
},
{
"L_BTN": "281900",
"L_JC": "C88C32",
"R_BTN": "322800",
"R_JC": "FFDC00",
"name": "Pokemon Let's Go! Eevee and Pikachu"
},
{
"L_BTN": "1E1914",
"L_JC": "D7AA73",
"R_BTN": "1E1914",
"R_JC": "D7AA73",
"name": "Nintendo Labo Creators Contest Edition"
},
{
"L_BTN": "0A1E0A",
"L_JC": "82FF96",
"R_BTN": "0A1E28",
"R_JC": "96F5F5",
"name": "Animal Crossing: New Horizons"
},
{
"L_BTN": "00000F",
"L_JC": "1473FA",
"R_BTN": "00000F",
"R_JC": "1473FA",
"name": "Dragon Quest XI S Lotto Edition Royal-Blue"
},
{
"L_BTN": "140014",
"L_JC": "B400E6",
"R_BTN": "28001E",
"R_JC": "FF3278",
"name": "Disney Tsum Tsum Festival"
}, },
{ {
"L_BTN": "0F0F0F", "L_BTN": "0F0F0F",
"L_JC": "313131", "L_JC": "818282",
"R_BTN": "0F0F0F", "R_BTN": "0F0F0F",
"R_JC": "313131", "R_JC": "818282",
"name": "Black (devkit)" "name": "Monster Hunter Rise Edition Gray"
}, },
{ {
"L_BTN": "323232", "L_BTN": "1E0F46",
"L_JC": "E6E6E6", "L_JC": "2D50F0",
"R_BTN": "323232", "R_BTN": "00051E",
"R_JC": "E6E6E6", "R_JC": "500FC8",
"name": "White" "name": "The Legend of Zelda: Skyward Sword HD"
},
{
"L_BTN": "0F0F0F",
"L_JC": "828282",
"R_BTN": "0F0F0F",
"R_JC": "828282",
"name": "Gray"
} }
] ]

View file

@ -11,7 +11,7 @@ JCPage::JCPage() : AppletFrame(true, true)
{ {
this->setTitle("menus/joy_con/title"_i18n); this->setTitle("menus/joy_con/title"_i18n);
list = new brls::List(); list = new brls::List();
label = new brls::Label(brls::LabelStyle::DESCRIPTION, fmt::format("menus/joy_con/description"_i18n, COLOR_PROFILES_PATH, COLOR_PICKER_URL), true); label = new brls::Label(brls::LabelStyle::DESCRIPTION, fmt::format("menus/joy_con/description"_i18n, JC_COLOR_PATH, COLOR_PICKER_URL), true);
list->addView(label); list->addView(label);
backup = new brls::ListItem("menus/joy_con/backup"_i18n); backup = new brls::ListItem("menus/joy_con/backup"_i18n);
@ -20,7 +20,7 @@ JCPage::JCPage() : AppletFrame(true, true)
stagedFrame->setTitle("menus/joy_con/label"_i18n); stagedFrame->setTitle("menus/joy_con/label"_i18n);
stagedFrame->addStage( stagedFrame->addStage(
new WorkerPage(stagedFrame, "menus/joy_con/backing_up"_i18n, new WorkerPage(stagedFrame, "menus/joy_con/backing_up"_i18n,
[]() { JC::backupJCColor(COLOR_PROFILES_PATH); })); []() { JC::backupJCColor(JC_COLOR_PATH); }));
stagedFrame->addStage( stagedFrame->addStage(
new ConfirmPage(stagedFrame, "menus/common/all_done"_i18n, true)); new ConfirmPage(stagedFrame, "menus/common/all_done"_i18n, true));
brls::Application::pushView(stagedFrame); brls::Application::pushView(stagedFrame);
@ -29,10 +29,10 @@ JCPage::JCPage() : AppletFrame(true, true)
list->addView(new brls::ListItemGroupSpacing(true)); list->addView(new brls::ListItemGroupSpacing(true));
auto profiles = JC::getProfiles(COLOR_PROFILES_PATH); auto profiles = JC::getProfiles(JC_COLOR_PATH);
for (int i = profiles.size() - 1; i >= 0; i--) { for (const auto& profile : profiles) {
std::vector<int> value = profiles[i].second; std::vector<int> value = profile.second;
listItem = new brls::ListItem(profiles[i].first); listItem = new brls::ListItem(profile.first);
listItem->getClickEvent()->subscribe([value](brls::View* view) { listItem->getClickEvent()->subscribe([value](brls::View* view) {
brls::StagedAppletFrame* stagedFrame = new brls::StagedAppletFrame(); brls::StagedAppletFrame* stagedFrame = new brls::StagedAppletFrame();
stagedFrame->setTitle("menus/joy_con/label"_i18n); stagedFrame->setTitle("menus/joy_con/label"_i18n);

View file

@ -31,9 +31,9 @@ PCPage::PCPage() : AppletFrame(true, true)
list->addView(new brls::ListItemGroupSpacing(true)); list->addView(new brls::ListItemGroupSpacing(true));
auto profiles = PC::getProfiles(PC_COLOR_PATH); auto profiles = PC::getProfiles(PC_COLOR_PATH);
for (int i = profiles.size() - 1; i >= 0; i--) { for (const auto& profile : profiles) {
std::vector<int> value = profiles[i].second; std::vector<int> value = profile.second;
listItem = new brls::ListItem(profiles[i].first); listItem = new brls::ListItem(profile.first);
listItem->getClickEvent()->subscribe([value](brls::View* view) { listItem->getClickEvent()->subscribe([value](brls::View* view) {
brls::StagedAppletFrame* stagedFrame = new brls::StagedAppletFrame(); brls::StagedAppletFrame* stagedFrame = new brls::StagedAppletFrame();
stagedFrame->setTitle("menus/pro_con/label"_i18n); stagedFrame->setTitle("menus/pro_con/label"_i18n);

View file

@ -220,8 +220,8 @@ ChangelogPage::ChangelogPage() : AppletFrame(true, true)
verTitles.push_back("v2.16.2"); verTitles.push_back("v2.16.2");
changes.push_back("\uE016 Allow offline extraction of cheats.\n\uE016 Fixed extraction of the the complete cheat archive.\n\uE016 Fixed display bug for cheats extraction."); changes.push_back("\uE016 Allow offline extraction of cheats.\n\uE016 Fixed extraction of the the complete cheat archive.\n\uE016 Fixed display bug for cheats extraction.");
verTitles.push_back("v2.16.2"); verTitles.push_back("v2.16.3");
changes.push_back("\uE016 Updated french localization (https://github.com/NotaInutilis)."); changes.push_back("\uE016 Fetch default profiles online for joy-con and pro-con color swaps.\n\uE016 Updated french localization (https://github.com/NotaInutilis).");
for (int i = verTitles.size() - 1; i >= 0; i--) { for (int i = verTitles.size() - 1; i >= 0; i--) {
listItem = new brls::ListItem(verTitles[i]); listItem = new brls::ListItem(verTitles[i]);

View file

@ -7,13 +7,16 @@
#include <string> #include <string>
#include "constants.hpp" #include "constants.hpp"
#include "download.hpp"
#include "fs.hpp" #include "fs.hpp"
#include "progress_event.hpp" #include "progress_event.hpp"
#include "utils.hpp" #include "utils.hpp"
using json = nlohmann::json; using json = nlohmann::json;
namespace ColorSwapper { namespace {
constexpr const char BACKUP[] = "_backup";
int hexToBGR(const std::string& hex) int hexToBGR(const std::string& hex)
{ {
@ -40,7 +43,7 @@ namespace ColorSwapper {
return true; return true;
} }
} // namespace ColorSwapper } // namespace
namespace JC { namespace JC {
@ -73,7 +76,7 @@ namespace JC {
if (R_SUCCEEDED(res)) { if (R_SUCCEEDED(res)) {
int i = 0; int i = 0;
for (const auto& x : profiles.items()) { for (const auto& x : profiles.items()) {
if (x.value()["name"] == "_backup") { if (x.value()["name"] == BACKUP) {
oldBackups.push_back(i); oldBackups.push_back(i);
} }
i++; i++;
@ -82,11 +85,11 @@ namespace JC {
profiles.erase(profiles.begin() + k); profiles.erase(profiles.begin() + k);
} }
json newBackup = json::object( json newBackup = json::object(
{{"name", "_backup"}, {{"name", BACKUP},
{"L_JC", ColorSwapper::BGRToHex(color_left.main)}, {"L_JC", BGRToHex(color_left.main)},
{"L_BTN", ColorSwapper::BGRToHex(color_left.sub)}, {"L_BTN", BGRToHex(color_left.sub)},
{"R_JC", ColorSwapper::BGRToHex(color_right.main)}, {"R_JC", BGRToHex(color_right.main)},
{"R_BTN", ColorSwapper::BGRToHex(color_right.sub)}}); {"R_BTN", BGRToHex(color_right.sub)}});
profiles.push_back(newBackup); profiles.push_back(newBackup);
fs::writeJsonToFile(profiles, path); fs::writeJsonToFile(profiles, path);
return 0; return 0;
@ -104,21 +107,22 @@ namespace JC {
Result res = hidGetNpadControllerColorSplit(HidNpadIdType_Handheld, &color_left, &color_right); Result res = hidGetNpadControllerColorSplit(HidNpadIdType_Handheld, &color_left, &color_right);
if (R_SUCCEEDED(res)) { if (R_SUCCEEDED(res)) {
newBackup = json::object( newBackup = json::object(
{{"name", "_backup"}, {{"name", BACKUP},
{"L_JC", ColorSwapper::BGRToHex(color_left.main)}, {"L_JC", BGRToHex(color_left.main)},
{"L_BTN", ColorSwapper::BGRToHex(color_left.sub)}, {"L_BTN", BGRToHex(color_left.sub)},
{"R_JC", ColorSwapper::BGRToHex(color_right.main)}, {"R_JC", BGRToHex(color_right.main)},
{"R_BTN", ColorSwapper::BGRToHex(color_right.sub)}}); {"R_BTN", BGRToHex(color_right.sub)}});
} }
return newBackup; return newBackup;
} }
std::vector<std::pair<std::string, std::vector<int>>> getProfiles(const std::string& path) std::deque<std::pair<std::string, std::vector<int>>> getProfiles(const std::string& path)
{ {
std::vector<std::pair<std::string, std::vector<int>>> res; std::deque<std::pair<std::string, std::vector<int>>> res;
bool properData; bool properData;
std::fstream profilesFile; std::fstream profilesFile;
json profilesJson = fs::parseJsonFile(path); nlohmann::ordered_json profilesJson;
download::getRequest(JC_COLOR_URL, profilesJson);
if (profilesJson.empty()) { if (profilesJson.empty()) {
profilesJson = {{{"L_BTN", "0A1E0A"}, profilesJson = {{{"L_BTN", "0A1E0A"},
{"L_JC", "82FF96"}, {"L_JC", "82FF96"},
@ -126,26 +130,35 @@ namespace JC {
{"R_JC", "96F5F5"}, {"R_JC", "96F5F5"},
{"name", "Animal Crossing: New Horizons"}}}; {"name", "Animal Crossing: New Horizons"}}};
} }
for (const auto& x : profilesJson.items()) { for (const auto& profiles : {fs::parseJsonFile(path), profilesJson}) {
std::string name = x.value()["name"]; for (const auto& x : profiles.items()) {
std::vector<std::string> values = { std::string name = x.value()["name"];
std::string(x.value()["L_JC"]), brls::Logger::warning(name);
std::string(x.value()["L_BTN"]), std::vector<std::string> values = {
std::string(x.value()["R_JC"]), std::string(x.value()["L_JC"]),
std::string(x.value()["R_BTN"])}; std::string(x.value()["L_BTN"]),
properData = true; std::string(x.value()["R_JC"]),
for (auto& str : values) { std::string(x.value()["R_BTN"])};
if (!ColorSwapper::isHexaAnd3Bytes(str)) { properData = true;
properData = false; for (auto& str : values) {
if (!isHexaAnd3Bytes(str)) {
properData = false;
}
}
if (properData) {
if (name == "") name = "Unamed";
auto profile = std::make_pair(name, (std::vector<int>){
hexToBGR(values[0]),
hexToBGR(values[1]),
hexToBGR(values[2]),
hexToBGR(values[3])});
if (name == BACKUP) {
res.push_front(profile);
}
else {
res.push_back(profile);
}
} }
}
if (properData) {
if (name == "") name = "Unamed";
res.push_back(std::make_pair(name, (std::vector<int>){
ColorSwapper::hexToBGR(values[0]),
ColorSwapper::hexToBGR(values[1]),
ColorSwapper::hexToBGR(values[2]),
ColorSwapper::hexToBGR(values[3])}));
} }
} }
return res; return res;
@ -182,7 +195,7 @@ namespace JC {
std::vector<int> oldBackups; std::vector<int> oldBackups;
int i = 0; int i = 0;
for (const auto& x : profiles.items()) { for (const auto& x : profiles.items()) {
if (x.value()["name"] == "_backup") { if (x.value()["name"] == BACKUP) {
oldBackups.push_back(i); oldBackups.push_back(i);
} }
i++; i++;
@ -233,7 +246,7 @@ namespace PC {
if (R_SUCCEEDED(res)) { if (R_SUCCEEDED(res)) {
int i = 0; int i = 0;
for (const auto& x : profiles.items()) { for (const auto& x : profiles.items()) {
if (x.value()["name"] == "_backup") { if (x.value()["name"] == BACKUP) {
oldBackups.push_back(i); oldBackups.push_back(i);
} }
i++; i++;
@ -242,9 +255,9 @@ namespace PC {
profiles.erase(profiles.begin() + k); profiles.erase(profiles.begin() + k);
} }
json newBackup = json::object( json newBackup = json::object(
{{"name", "_backup"}, {{"name", BACKUP},
{"BODY", ColorSwapper::BGRToHex(color.main)}, {"BODY", BGRToHex(color.main)},
{"BTN", ColorSwapper::BGRToHex(color.sub)}}); {"BTN", BGRToHex(color.sub)}});
profiles.push_back(newBackup); profiles.push_back(newBackup);
fs::writeJsonToFile(profiles, path); fs::writeJsonToFile(profiles, path);
return 0; return 0;
@ -261,19 +274,21 @@ namespace PC {
Result res = hidGetNpadControllerColorSingle(HidNpadIdType_No1, &color); Result res = hidGetNpadControllerColorSingle(HidNpadIdType_No1, &color);
if (R_SUCCEEDED(res)) { if (R_SUCCEEDED(res)) {
newBackup = json::object( newBackup = json::object(
{{"name", "_backup"}, {{"name", BACKUP},
{"BODY", ColorSwapper::BGRToHex(color.main)}, {"BODY", BGRToHex(color.main)},
{"BTN", ColorSwapper::BGRToHex(color.sub)}}); {"BTN", BGRToHex(color.sub)}});
} }
return newBackup; return newBackup;
} }
std::vector<std::pair<std::string, std::vector<int>>> getProfiles(const std::string& path) std::deque<std::pair<std::string, std::vector<int>>> getProfiles(const std::string& path)
{ {
std::vector<std::pair<std::string, std::vector<int>>> res; std::deque<std::pair<std::string, std::vector<int>>> res;
bool properData; bool properData;
std::fstream profilesFile; std::fstream profilesFile;
json profilesJson = fs::parseJsonFile(path); nlohmann::ordered_json profilesJson;
download::getRequest(PC_COLOR_URL, profilesJson);
profilesJson += fs::parseJsonFile(path);
if (profilesJson.empty()) { if (profilesJson.empty()) {
profilesJson = {{{"BTN", "e6e6e6"}, profilesJson = {{{"BTN", "e6e6e6"},
{"BODY", "2d2d2d"}, {"BODY", "2d2d2d"},
@ -286,15 +301,21 @@ namespace PC {
std::string(x.value()["BTN"])}; std::string(x.value()["BTN"])};
properData = true; properData = true;
for (auto& str : values) { for (auto& str : values) {
if (!ColorSwapper::isHexaAnd3Bytes(str)) { if (!isHexaAnd3Bytes(str)) {
properData = false; properData = false;
} }
} }
if (properData) { if (properData) {
if (name == "") name = "Unamed"; if (name == "") name = "Unamed";
res.push_back(std::make_pair(name, (std::vector<int>){ auto profile = std::make_pair(name, (std::vector<int>){
ColorSwapper::hexToBGR(values[0]), hexToBGR(values[0]),
ColorSwapper::hexToBGR(values[1])})); hexToBGR(values[1])});
if (name == BACKUP) {
res.push_front(profile);
}
else {
res.push_back(profile);
}
} }
} }
return res; return res;
@ -331,7 +352,7 @@ namespace PC {
std::vector<int> oldBackups; std::vector<int> oldBackups;
int i = 0; int i = 0;
for (const auto& x : profiles.items()) { for (const auto& x : profiles.items()) {
if (x.value()["name"] == "_backup") { if (x.value()["name"] == BACKUP) {
oldBackups.push_back(i); oldBackups.push_back(i);
} }
i++; i++;