Mercurial > minori
diff src/config.cpp @ 2:23d0d9319a00
Update
Also converted everything to LF from CRLF
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Sat, 12 Aug 2023 03:16:26 -0400 |
parents | 1ae666fdf9e2 |
children | 1d82f6e04d7d |
line wrap: on
line diff
--- a/src/config.cpp Tue Aug 08 19:49:15 2023 -0400 +++ b/src/config.cpp Sat Aug 12 03:16:26 2023 -0400 @@ -1,76 +1,76 @@ -/** - * config.cpp: - * parses the config - * - * much of this is similar to the code used in - * wgsdk... - * maybe some of this will be C++-ified someday ;) -**/ -#include <filesystem> /* Sorry, C++17 is just sexy. if you have boost you can probably change this */ -#ifdef MACOSX -#include <NSSystemDirectories.h> -#endif -#include <limits.h> -#include <cstdlib> -#include <cstring> -#include <fstream> -#include "json.h" -#include "config.h" -#include "window.h" -#include "filesystem.h" - -std::map<std::string, enum Themes> StringToTheme = { - {"Default", OS}, - {"Light", LIGHT}, - {"Dark", DARK} -}; - -std::map<enum Themes, std::string> ThemeToString = { - {OS, "Default"}, - {LIGHT, "Light"}, - {DARK, "Dark"} -}; - -int Config::Load() { - std::filesystem::path cfg_path = get_config_path(); - if (!std::filesystem::exists(cfg_path)) - return 0; - std::ifstream config_in(cfg_path.string().c_str(), std::ifstream::in); - auto config_js = nlohmann::json::parse(config_in); -/* this macro will make it easier to edit these in the future, if needed */ -#define GET_CONFIG_VALUE(pointer, location, struct, default) \ - struct = (config_js.contains(pointer)) ? (location) : (default) - GET_CONFIG_VALUE("/General/Service"_json_pointer, (enum AnimeListServices)config_js["General"]["Service"].get<int>(), service, NONE); - GET_CONFIG_VALUE("/Authorization/AniList/Auth Token"_json_pointer, config_js["Authorization"]["AniList"]["Auth Token"].get<std::string>(), anilist.auth_token, ""); - GET_CONFIG_VALUE("/Authorization/AniList/Username"_json_pointer, config_js["Authorization"]["AniList"]["Username"].get<std::string>(), anilist.username, ""); - GET_CONFIG_VALUE("/Authorization/AniList/User ID"_json_pointer, config_js["Authorization"]["AniList"]["User ID"].get<int>(), anilist.user_id, 0); - GET_CONFIG_VALUE("/Appearance/Theme"_json_pointer, StringToTheme[config_js["Appearance"]["Theme"].get<std::string>()], theme, OS); -#undef GET_CONFIG_VALUE - config_in.close(); - return 0; -} - -int Config::Save() { - std::filesystem::path cfg_path = get_config_path(); - if (!std::filesystem::exists(cfg_path.parent_path())) - std::filesystem::create_directories(cfg_path.parent_path()); - std::ofstream config_out(cfg_path.string().c_str(), std::ofstream::out | std::ofstream::trunc); - nlohmann::json config_js = { - {"General", { - {"Service", service} - }}, - {"Authorization", { - {"AniList", { - {"Auth Token", anilist.auth_token}, - {"Username", anilist.username}, - {"User ID", anilist.user_id} - }} - }}, - {"Appearance", { - {"Theme", ThemeToString[theme]} - }} - }; - config_out << std::setw(4) << config_js << std::endl; - config_out.close(); - return 0; -} +/** + * config.cpp: + * parses the config + * + * much of this is similar to the code used in + * wgsdk... + * maybe some of this will be C++-ified someday ;) +**/ +#include <filesystem> /* Sorry, C++17 is just sexy. if you have boost you can probably change this */ +#ifdef MACOSX +#include <NSSystemDirectories.h> +#endif +#include <limits.h> +#include <cstdlib> +#include <cstring> +#include <fstream> +#include "json.h" +#include "config.h" +#include "window.h" +#include "filesystem.h" + +std::map<std::string, enum Themes> StringToTheme = { + {"Default", OS}, + {"Light", LIGHT}, + {"Dark", DARK} +}; + +std::map<enum Themes, std::string> ThemeToString = { + {OS, "Default"}, + {LIGHT, "Light"}, + {DARK, "Dark"} +}; + +int Config::Load() { + std::filesystem::path cfg_path = get_config_path(); + if (!std::filesystem::exists(cfg_path)) + return 0; + std::ifstream config_in(cfg_path.string().c_str(), std::ifstream::in); + auto config_js = nlohmann::json::parse(config_in); +/* this macro will make it easier to edit these in the future, if needed */ +#define GET_CONFIG_VALUE(pointer, location, struct, default) \ + struct = (config_js.contains(pointer)) ? (location) : (default) + GET_CONFIG_VALUE("/General/Service"_json_pointer, (enum AnimeListServices)config_js["General"]["Service"].get<int>(), service, NONE); + GET_CONFIG_VALUE("/Authorization/AniList/Auth Token"_json_pointer, config_js["Authorization"]["AniList"]["Auth Token"].get<std::string>(), anilist.auth_token, ""); + GET_CONFIG_VALUE("/Authorization/AniList/Username"_json_pointer, config_js["Authorization"]["AniList"]["Username"].get<std::string>(), anilist.username, ""); + GET_CONFIG_VALUE("/Authorization/AniList/User ID"_json_pointer, config_js["Authorization"]["AniList"]["User ID"].get<int>(), anilist.user_id, 0); + GET_CONFIG_VALUE("/Appearance/Theme"_json_pointer, StringToTheme[config_js["Appearance"]["Theme"].get<std::string>()], theme, OS); +#undef GET_CONFIG_VALUE + config_in.close(); + return 0; +} + +int Config::Save() { + std::filesystem::path cfg_path = get_config_path(); + if (!std::filesystem::exists(cfg_path.parent_path())) + std::filesystem::create_directories(cfg_path.parent_path()); + std::ofstream config_out(cfg_path.string().c_str(), std::ofstream::out | std::ofstream::trunc); + nlohmann::json config_js = { + {"General", { + {"Service", service} + }}, + {"Authorization", { + {"AniList", { + {"Auth Token", anilist.auth_token}, + {"Username", anilist.username}, + {"User ID", anilist.user_id} + }} + }}, + {"Appearance", { + {"Theme", ThemeToString[theme]} + }} + }; + config_out << std::setw(4) << config_js << std::endl; + config_out.close(); + return 0; +}