From a56f6f0340a08c869d649f95118a0c9958f6a916 Mon Sep 17 00:00:00 2001 From: tastytea Date: Wed, 13 Jun 2018 23:55:19 +0200 Subject: [PATCH] Made Easy::Status writable (#1) --- src/easy/easy.hpp | 5 +++ src/easy/entities/status.cpp | 71 +++++++++++++++++++++++++++++++++++- src/easy/entities/status.hpp | 39 ++++++++++++++++++-- src/easy/entity.cpp | 5 +++ 4 files changed, 115 insertions(+), 5 deletions(-) diff --git a/src/easy/easy.hpp b/src/easy/easy.hpp index 93b4548..0687c57 100644 --- a/src/easy/easy.hpp +++ b/src/easy/easy.hpp @@ -342,6 +342,11 @@ public: */ const std::vector get_vector(const string &key) const; + /*! + * @brief Sets the value of key + */ + const void set(const string &key, const Json::Value &value); + const std::uint_fast64_t stouint64(const string &str) const; private: diff --git a/src/easy/entities/status.cpp b/src/easy/entities/status.cpp index 47db1a0..0bcf877 100644 --- a/src/easy/entities/status.cpp +++ b/src/easy/entities/status.cpp @@ -14,6 +14,7 @@ * along with this program. If not, see . */ +#include #include #include "status.hpp" #include "macros.hpp" @@ -63,6 +64,12 @@ const string Status::content() const return get_string("content"); } +Status Status::content(const string &content) +{ + set("content", Json::Value(content)); + return *this; +} + const std::vector Status::emojis() const { const Json::Value node = get("emojis"); @@ -100,6 +107,12 @@ const uint_fast64_t Status::in_reply_to_id() const return stouint64(get_string("in_reply_to_id")); } +Status Status::in_reply_to_id(const uint_fast64_t &in_reply_to_id) +{ + set("in_reply_to_id", Json::Value(std::to_string(in_reply_to_id))); + return *this; +} + const uint_fast64_t Status::in_reply_to_account_id() const { return stouint64(get_string("in_reply_to_account_id")); @@ -110,6 +123,12 @@ const string Status::language() const return get_string("language"); } +Status Status::language(const string &language) +{ + set("language", Json::Value(language)); + return *this; +} + const std::vector Status::media_attachments() const { const Json::Value node = get("media_attachments"); @@ -127,6 +146,20 @@ const std::vector Status::media_attachments() const return {}; } +Status Status::media_attachments + (const std::vector &media_attachments) +{ + // FIXME: Needs writable Easy::Attachment() + Json::Value jsonarray(Json::arrayValue); + + for (const Attachment &att : media_attachments) + { + jsonarray.append(att.to_object()); + } + set("media_attachments", jsonarray); + return *this; +} + const std::vector Status::mentions() const { const Json::Value node = get("mentions"); @@ -154,7 +187,7 @@ const bool Status::pinned() const return get_bool("pinned"); } -const Easy::Status Status::reblog() const +const Status Status::reblog() const { const Json::Value node = get("reblog"); if (node.isObject()) @@ -181,11 +214,23 @@ const bool Status::sensitive() const return get_bool("sensitive"); } +Status Status::sensitive(const bool &sensitive) +{ + set("sensitive", Json::Value(sensitive)); + return *this; +} + const string Status::spoiler_text() const { return get_string("spoiler_text"); } +Status Status::spoiler_text(const string &spoiler_text) +{ + set("spoiler_text", Json::Value(spoiler_text)); + return *this; +} + const std::vector Status::tags() const { const Json::Value node = get("tags"); @@ -228,3 +273,27 @@ const Easy::visibility_type Status::visibility() const ttdebug << "Could not get data: visibility\n"; return visibility_type::Undefined; } + +Status Status::visibility(const visibility_type &visibility) +{ + switch (visibility) + { + case visibility_type::Direct: + set("visibility", "direct"); + break; + case visibility_type::Private: + set("visibility", "private"); + break; + case visibility_type::Unlisted: + set("visibility", "unlisted"); + break; + case visibility_type::Public: + set("visibility", "public"); + break; + default: + std::cerr << "WARNING: setting visibility to Undefined " + "has no effect.\n"; + break; + }; + return *this; +} diff --git a/src/easy/entities/status.hpp b/src/easy/entities/status.hpp index 55eba8c..ea1bf36 100644 --- a/src/easy/entities/status.hpp +++ b/src/easy/entities/status.hpp @@ -68,12 +68,12 @@ namespace Mastodon Status(); /*! - * @brief Returns an array of matched accounts + * @brief Returns an array of matched accounts. */ const Account account() const; /*! - * @brief Returns application from which the status was posted + * @brief Returns application from which the status was posted. */ const Application application() const; @@ -87,6 +87,11 @@ namespace Mastodon */ const string content() const; + /*! + * @brief Sets content of status + */ + Status content(const string &content); + /*! * @brief Returns an array of emojis */ @@ -112,6 +117,11 @@ namespace Mastodon */ const uint_fast64_t in_reply_to_id() const; + /*! + * @brief Sets the ID of the status it replies to + */ + Status in_reply_to_id(const uint_fast64_t &in_reply_to_id); + /*! * @brief Returns the ID of the account it replies to */ @@ -122,11 +132,22 @@ namespace Mastodon */ const string language() const; + /*! + * @brief Sets the language of the status + */ + Status language(const string &language); + /*! * @brief Returns the attachments */ const std::vector media_attachments() const; + /*! + * @brief Sets the attachments + */ + Status media_attachments + (const std::vector &media_attachments); + /*! * @brief Returns the mentions */ @@ -162,11 +183,21 @@ namespace Mastodon */ const bool sensitive() const; + /*! + * @brief Sets sensitive flag for attachments + */ + Status sensitive(const bool &sensitive); + /*! * @brief Returns the spoiler text */ const string spoiler_text() const; + /*! + * @brief Sets the spoiler text + */ + Status spoiler_text(const string &spoiler_text); + /*! * @brief Returns the tags */ @@ -188,9 +219,9 @@ namespace Mastodon const visibility_type visibility() const; /*! - * @brief Returns the + * @brief Sets the visibility of the status */ - + Status visibility(const visibility_type &visibility); }; } diff --git a/src/easy/entity.cpp b/src/easy/entity.cpp index 741dbf8..09d358e 100644 --- a/src/easy/entity.cpp +++ b/src/easy/entity.cpp @@ -223,6 +223,11 @@ const std::vector Easy::Entity::get_vector(const string &key) const return {}; } +const void Easy::Entity::set(const string &key, const Json::Value &value) +{ + _tree[key] = value; +} + const std::uint_fast64_t Easy::Entity::stouint64(const string &str) const { if (str == "")