diff --git a/src/easy/entities/attachment.cpp b/src/easy/entities/attachment.cpp index 9bb138f..eab84c6 100644 --- a/src/easy/entities/attachment.cpp +++ b/src/easy/entities/attachment.cpp @@ -32,21 +32,6 @@ bool Attachment::valid() const }); } -double Attachment::aspect() const -{ - return get_double("meta.original.aspect"); -} - -double Attachment::aspect_small() const -{ - return get_double("meta.small.aspect"); -} - -uint64_t Attachment::bitrate() const -{ - return get_uint64("meta.original.bitrate"); -} - const string Attachment::description() const { return get_string("description"); @@ -58,13 +43,6 @@ Attachment Attachment::description(const string &description) return *this; } -const std::chrono::duration Attachment::duration() const -{ - const double sec = get_double("meta.original.duration"); - - return std::chrono::duration(sec); -} - const string Attachment::file() const { return get_string("file"); @@ -100,40 +78,16 @@ Attachment Attachment::focus(const std::array &focus) return *this; } -double Attachment::framerate() const -{ - string strframes = get_string("meta.original.frame_rate"); - - if (!strframes.empty()) - { - std::size_t pos = strframes.find('/'); - if (pos != std::string::npos) - { - std::uint16_t frames = std::stoul(strframes.substr(0, pos)); - std::uint16_t divider = std::stoul(strframes.substr(pos + 1)); - - return frames / divider; - } - } - - return 0.0; -} - -uint64_t Attachment::height() const -{ - return get_uint64("meta.original.height"); -} - -uint64_t Attachment::height_small() const -{ - return get_uint64("meta.small.height"); -} - const string Attachment::id() const { return get_string("id"); } +const Attachment::Meta Attachment::meta() const +{ + return Meta(get("meta")); +} + const string Attachment::preview_url() const { return get_string("preview_url"); @@ -144,16 +98,6 @@ const string Attachment::remote_url() const return get_string("remote_url"); } -const string Attachment::size() const -{ - return get_string("meta.original.size"); -} - -const string Attachment::size_small() const -{ - return get_string("meta.small.size"); -} - const string Attachment::text_url() const { return get_string("text_url"); @@ -180,12 +124,78 @@ const string Attachment::url() const return get_string("url"); } -uint64_t Attachment::width() const +bool Attachment::Meta::valid() const { - return get_uint64("meta.original.width"); + return true; } -uint64_t Attachment::width_small() const +double Attachment::Meta::aspect() const { - return get_uint64("meta.small.width"); + return get_double("original.aspect"); +} + +double Attachment::Meta::aspect_small() const +{ + return get_double("small.aspect"); +} + +uint64_t Attachment::Meta::bitrate() const +{ + return get_uint64("original.bitrate"); +} + +const std::chrono::duration Attachment::Meta::duration() const +{ + const double sec = get_double("original.duration"); + + return std::chrono::duration(sec); +} + +double Attachment::Meta::frame_rate() const +{ + string strframes = get_string("original.frame_rate"); + + if (!strframes.empty()) + { + std::size_t pos = strframes.find('/'); + if (pos != std::string::npos) + { + std::uint16_t frames = std::stoul(strframes.substr(0, pos)); + std::uint16_t divider = std::stoul(strframes.substr(pos + 1)); + + return frames / divider; + } + } + + return 0.0; +} + +uint64_t Attachment::Meta::height() const +{ + return get_uint64("original.height"); +} + +uint64_t Attachment::Meta::height_small() const +{ + return get_uint64("small.height"); +} + +const string Attachment::Meta::size() const +{ + return get_string("original.size"); +} + +const string Attachment::Meta::size_small() const +{ + return get_string("small.size"); +} + +uint64_t Attachment::Meta::width() const +{ + return get_uint64("original.width"); +} + +uint64_t Attachment::Meta::width_small() const +{ + return get_uint64("small.width"); } diff --git a/src/easy/entities/attachment.hpp b/src/easy/entities/attachment.hpp index 142e15f..e90ce80 100644 --- a/src/easy/entities/attachment.hpp +++ b/src/easy/entities/attachment.hpp @@ -48,29 +48,98 @@ namespace Easy public: using Entity::Entity; + /*! + * @brief Metadata for attachments. + * + * @since 0.106.0 + */ + class Meta : public Entity + { + public: + using Entity::Entity; + + virtual bool valid() const override; + + /*! + * @brief Aspect of original image. + * + * @since 0.106.0 + */ + double aspect() const; + + /*! + * @brief Aspect of preview image. + * + * @since 0.106.0 + */ + double aspect_small() const; + + /*! + * @brief Returns the bitrate of a video. + * + * @since 0.106.0 + */ + uint64_t bitrate() const; + + /*! + * @brief Returns the duration of a video in seconds. + * + * @since 0.106.0 + */ + const std::chrono::duration duration() const; + + /*! + * @brief Returns the framerate of a video in frames per second. + * + * @since 0.106.0 + */ + double frame_rate() const; + + /*! + * @brief Returns the height of the original image. + * + * @since 0.106.0 + */ + uint64_t height() const; + + /*! + * @brief Returns the height of the preview image. + * + * @since 0.106.0 + */ + uint64_t height_small() const; + + /*! + * @brief Returns the size of the original image. + * + * @since 0.106.0 + */ + const string size() const; + + /*! + * @brief Returns the size of the preview image. + * + * @since 0.106.0 + */ + const string size_small() const; + + /*! + * @brief Returns the width of the original image. + * + * @since 0.106.0 + */ + uint64_t width() const; + + /*! + * @brief Returns the width of the preview image + * + * @since 0.106.0 + */ + uint64_t width_small() const; + }; + virtual bool valid() const override; - /*! - * @brief Aspect of original image - * - * @since before 0.11.0 - */ - double aspect() const; - - /*! - * @brief Aspect of preview image - * - * @since before 0.11.0 - */ - double aspect_small() const; - - /*! - * @brief Returns the bitrate of a video - * - * @since before 0.11.0 - */ - uint64_t bitrate() const; - /*! * @brief Returns the image description * @@ -85,13 +154,6 @@ namespace Easy */ Attachment description(const string &description); - /*! - * @brief Returns the duration of a video in seconds - * - * @since before 0.11.0 - */ - const std::chrono::duration duration() const; - /*! * @brief Gets file to upload * @@ -126,27 +188,6 @@ namespace Easy */ Attachment focus(const std::array &focus); - /*! - * @brief Returns the framerate of a video in frames per second - * - * @since before 0.11.0 - */ - double framerate() const; - - /*! - * @brief Returns the height of the original image - * - * @since before 0.11.0 - */ - uint64_t height() const; - - /*! - * @brief Returns the height of the preview image - * - * @since before 0.11.0 - */ - uint64_t height_small() const; - /*! * @brief Returns the ID of the attachment * @@ -154,6 +195,13 @@ namespace Easy */ const string id() const; + /*! + * @brief Returns metadata about the attachment. + * + * @since 0.106.0 + */ + const Meta meta() const; + /*! * @brief Returns the URL of the preview image * @@ -168,20 +216,6 @@ namespace Easy */ const string remote_url() const; - /*! - * @brief Returns the size of the original image - * - * @since before 0.11.0 - */ - const string size() const; - - /*! - * @brief Returns the size of the preview image - * - * @since before 0.11.0 - */ - const string size_small() const; - /*! * @brief Returns shorter URL for the image * @@ -202,22 +236,6 @@ namespace Easy * @since before 0.11.0 */ const string url() const; - - /*! - * @brief Returns the width of the original image - * - * @since before 0.11.0 - */ - uint64_t width() const; - - /*! - * @brief Returns the width of the preview image - * - * @since before 0.11.0 - */ - uint64_t width_small() const; - - }; } }