Mercurial > minori
view src/config.cpp @ 7:07a9095eaeed
Update
Refactored some code, moved some around
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Thu, 24 Aug 2023 23:11:38 -0400 |
parents | 1d82f6e04d7d |
children |
line wrap: on
line source
/** * 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"} }; std::map<enum AnimeListServices, std::string> ServiceToString { {NONE, "None"}, {ANILIST, "AniList"} }; std::map<std::string, enum AnimeListServices> StringToService { {"None", NONE}, {"AniList", ANILIST} }; std::map<enum AnimeTitleLanguage, std::string> AnimeTitleToStringMap = { {ROMAJI, "Romaji"}, {NATIVE, "Native"}, {ENGLISH, "English"} }; std::map<std::string, enum AnimeTitleLanguage> StringToAnimeTitleMap = { {"Romaji", ROMAJI}, {"Native", NATIVE}, {"English", ENGLISH} }; 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); service = StringToService[JSON::GetString(config_js, "/General/Service"_json_pointer)]; anime_list.language = StringToAnimeTitleMap[JSON::GetString(config_js, "/Anime List/Display only aired episodes"_json_pointer, "Romaji")]; anime_list.display_aired_episodes = JSON::GetBoolean(config_js, "/Anime List/Display only aired episodes"_json_pointer, true); anime_list.display_available_episodes = JSON::GetBoolean(config_js, "/Anime List/Display only available episodes in library"_json_pointer, true); anime_list.highlight_anime_if_available = JSON::GetBoolean(config_js, "/Anime List/Highlight anime if available"_json_pointer, true); anime_list.highlighted_anime_above_others = JSON::GetBoolean(config_js, "/Anime List/Display highlighted anime above others"_json_pointer); anilist.auth_token = JSON::GetString(config_js, "/Authorization/AniList/Auth Token"_json_pointer); anilist.username = JSON::GetString(config_js, "/Authorization/AniList/Username"_json_pointer); anilist.user_id = JSON::GetInt(config_js, "/Authorization/AniList/User ID"_json_pointer); theme = StringToTheme[JSON::GetString(config_js, "/Appearance/Theme"_json_pointer)]; 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", ServiceToString[service]} }}, {"Anime List", { {"Title language", AnimeTitleToStringMap[anime_list.language]}, {"Display only aired episodes", anime_list.display_aired_episodes}, {"Display only available episodes in library", anime_list.display_available_episodes}, {"Highlight anime if available", anime_list.highlight_anime_if_available}, {"Display highlighted anime above others", anime_list.highlighted_anime_above_others} }}, {"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; }