#ifndef TAG_PARSER_VORBISCOMMENT_H #define TAG_PARSER_VORBISCOMMENT_H #include "./vorbiscommentfield.h" #include "../caseinsensitivecomparer.h" #include "../fieldbasedtag.h" #include "../mediaformat.h" namespace TagParser { class OggIterator; class VorbisComment; class Diagnostics; /*! * \brief Defines traits for the TagField implementation of the VorbisComment class. */ template <> class TAG_PARSER_EXPORT FieldMapBasedTagTraits { public: using FieldType = VorbisCommentField; using Compare = CaseInsensitiveStringComparer; }; class TAG_PARSER_EXPORT VorbisComment : public FieldMapBasedTag { friend class FieldMapBasedTag; public: VorbisComment(); static constexpr TagType tagType = TagType::VorbisComment; static constexpr const char *tagName = "Vorbis comment"; static constexpr TagTextEncoding defaultTextEncoding = TagTextEncoding::Utf8; bool canEncodingBeUsed(TagTextEncoding encoding) const override; using FieldMapBasedTag::value; const TagValue &value(KnownField field) const override; using FieldMapBasedTag::setValue; bool setValue(KnownField field, const TagValue &value) override; void parse(OggIterator &iterator, VorbisCommentFlags flags, Diagnostics &diag); void parse(std::istream &stream, uint64 maxSize, VorbisCommentFlags flags, Diagnostics &diag); void make(std::ostream &stream, VorbisCommentFlags flags, Diagnostics &diag); const TagValue &vendor() const; void setVendor(const TagValue &vendor); protected: IdentifierType internallyGetFieldId(KnownField field) const; KnownField internallyGetKnownField(const IdentifierType &id) const; private: template void internalParse(StreamType &stream, uint64 maxSize, VorbisCommentFlags flags, Diagnostics &diag); private: TagValue m_vendor; }; /*! * \brief Constructs a new Vorbis comment. */ inline VorbisComment::VorbisComment() { } inline bool VorbisComment::canEncodingBeUsed(TagTextEncoding encoding) const { return encoding == TagTextEncoding::Utf8; } /*! * \brief Returns the vendor. * \remarks Also accessable via value(KnownField::Vendor). */ inline const TagValue &VorbisComment::vendor() const { return m_vendor; } /*! * \brief Sets the vendor. * \remarks Also accessable via setValue(KnownField::Vendor, vendor). */ inline void VorbisComment::setVendor(const TagValue &vendor) { m_vendor = vendor; } } // namespace TagParser #endif // TAG_PARSER_VORBISCOMMENT_H