From 71a754ed1cbc445202d20fbd12135a1e9cb7f952 Mon Sep 17 00:00:00 2001 From: tastytea Date: Wed, 1 Jan 2020 12:13:35 +0100 Subject: [PATCH] Add functions to convert between list and Json::Value. --- src/config.cpp | 37 +++++++++++++++++++++++++++---------- src/config.hpp | 10 ++++++---- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/config.cpp b/src/config.cpp index 18bed01..c633c69 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -213,10 +213,7 @@ void Config::parse() profiledata.access_token = _json[profile]["access_token"].asString(); profiledata.append = _json[profile]["append"].asString(); profiledata.feedurl = _json[profile]["feedurl"].asString(); - for (const auto &fix : _json[profile]["fixes"]) - { - profiledata.fixes.push_back(fix.asString()); - } + profiledata.fixes = jsonarray_to_stringlist(_json[profile]["fixes"]); profiledata.instance = _json[profile]["instance"].asString(); if (!_json[profile]["interval"].isNull()) { @@ -228,10 +225,7 @@ void Config::parse() { profiledata.max_size = _json[profile]["max_size"].asUInt64(); } - for (const auto &skip : _json[profile]["skip"]) - { - profiledata.skip.push_back(skip.asString()); - } + profiledata.skip = jsonarray_to_stringlist(_json[profile]["skip"]); profiledata.titles_as_cw = _json[profile]["titles_as_cw"].asBool(); profiledata.titles_only = _json[profile]["titles_only"].asBool(); @@ -243,13 +237,13 @@ void Config::write() _json[profile]["access_token"] = profiledata.access_token; _json[profile]["append"] = profiledata.append; _json[profile]["feedurl"] = profiledata.feedurl; - // Leave fixes. + _json[profile]["fixes"] = stringlist_to_jsonarray(profiledata.fixes); _json[profile]["instance"] = profiledata.instance; _json[profile]["interval"] = profiledata.interval; _json[profile]["last_guid"] = profiledata.last_guid; _json[profile]["max_size"] = static_cast(profiledata.max_size); - // Leave skip. + _json[profile]["skip"] = stringlist_to_jsonarray(profiledata.skip); _json[profile]["titles_as_cw"] = profiledata.titles_as_cw; _json[profile]["titles_only"] = profiledata.titles_only; @@ -261,4 +255,27 @@ void Config::write() BOOST_LOG_TRIVIAL(debug) << "Wrote config file."; } + +list Config::jsonarray_to_stringlist(const Json::Value &jsonarray) const +{ + list stringlist; + for (const auto &element : jsonarray) + { + stringlist.push_back(element.asString()); + } + return stringlist; +} + +Json::Value Config::stringlist_to_jsonarray(const list &stringlist) + const +{ + Json::Value jsonarray; + for (const auto &element : stringlist) + { + static Json::ArrayIndex index{0}; + jsonarray.insert(index, element); + ++index; + } + return jsonarray; +} } // namespace mastorss diff --git a/src/config.hpp b/src/config.hpp index 91d10f9..790fd49 100644 --- a/src/config.hpp +++ b/src/config.hpp @@ -21,17 +21,17 @@ #include #include +#include #include #include -#include namespace mastorss { namespace fs = boost::filesystem; using std::uint32_t; +using std::list; using std::string; using std::string_view; -using std::vector; /*! * @brief The configuration for a profile as data structure. @@ -43,12 +43,12 @@ struct ProfileData string access_token; string append; string feedurl; - vector fixes; + list fixes; string instance; uint32_t interval{30}; string last_guid; size_t max_size{500}; - vector skip; + list skip; bool titles_as_cw{false}; bool titles_only{false}; @@ -82,6 +82,8 @@ private: [[nodiscard]] string get_access_token(const string &instance) const; void parse(); + list jsonarray_to_stringlist(const Json::Value &jsonarray) const; + Json::Value stringlist_to_jsonarray(const list &stringlist) const; }; } // namespace mastorss