6 #include "../generictagfield.h" 7 #include "../tagvalue.h" 8 #include "../statusprovider.h" 10 #include <c++utilities/io/binaryreader.h> 11 #include <c++utilities/io/binarywriter.h> 12 #include <c++utilities/conversion/stringconversion.h> 28 void make(IoUtilities::BinaryWriter &writer);
30 const std::unique_ptr<char[]> &data()
const;
31 uint32 dataSize()
const;
32 uint32 requiredSize()
const;
39 std::unique_ptr<char[]> m_data;
41 uint32 m_decompressedSize;
42 uint32 m_requiredSize;
74 return m_requiredSize;
107 Id3v2Frame(
const identifierType &
id,
const TagValue &value,
const byte group = 0,
const int16 flag = 0);
110 void parse(IoUtilities::BinaryReader &reader,
const uint32
version,
const uint32 maximalSize = 0);
112 void make(IoUtilities::BinaryWriter &writer,
const uint32
version);
115 bool isAdditionalTypeInfoUsed()
const;
116 bool isValid()
const;
117 bool hasPaddingReached()
const;
118 std::string frameIdString()
const;
120 void setFlag(uint16 value);
121 uint32 totalSize()
const;
122 uint32 dataSize()
const;
123 bool toDiscardWhenUnknownAndTagIsAltered()
const;
124 bool toDiscardWhenUnknownAndFileIsAltered()
const;
125 bool isReadOnly()
const;
126 bool isCompressed()
const;
127 bool isEncrypted()
const;
128 bool hasGroupInformation()
const;
129 bool isUnsynchronized()
const;
130 bool hasDataLengthIndicator()
const;
132 void setGroup(byte value);
133 int32 parsedVersion()
const;
134 bool supportsNestedFields()
const;
138 std::tuple<const char *, size_t, const char *> parseSubstring(
const char *buffer, std::size_t maxSize,
TagTextEncoding &encoding,
bool addWarnings =
false);
139 std::string parseString(
const char *buffer, std::size_t maxSize,
TagTextEncoding &encoding,
bool addWarnings =
false);
140 std::u16string parseWideString(
const char *buffer, std::size_t dataSize,
TagTextEncoding &encoding,
bool addWarnings =
false);
141 void parseLegacyPicture(
const char *buffer, std::size_t maxSize,
TagValue &tagValue, byte &typeInfo);
142 void parsePicture(
const char *buffer, std::size_t maxSize,
TagValue &tagValue, byte &typeInfo);
143 void parseComment(
const char *buffer, std::size_t maxSize,
TagValue &tagValue);
144 void parseBom(
const char *buffer, std::size_t maxSize,
TagTextEncoding &encoding);
148 void makeString(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const std::string &value,
TagTextEncoding encoding);
149 void makeEncodingAndData(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
TagTextEncoding encoding,
const char *data, std::size_t m_dataSize);
150 void makeLegacyPicture(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const TagValue &picture, byte typeInfo);
151 void makePicture(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const TagValue &picture, byte typeInfo);
152 void makeComment(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const TagValue &
comment);
154 static identifierType fieldIdFromString(
const char *idString, std::size_t idStringSize = std::string::npos);
155 static std::string fieldIdToString(identifierType
id);
162 void makeCommentConsideringVersion(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const TagValue &
comment, byte
version);
167 uint32 m_parsedVersion;
186 return !(id() == 0 || value().isEmpty() || m_padding);
243 return m_flag & 0x8000;
251 return m_flag & 0x4000;
259 return m_flag & 0x2000;
267 return m_parsedVersion >= 4 ? m_flag & 0x8 : m_flag & 0x80;
276 return m_parsedVersion >= 4 ? m_flag & 0x4 : m_flag & 0x40;
284 return m_parsedVersion >= 4 ? m_flag & 0x40 : m_flag & 0x20;
292 return m_parsedVersion >= 4 ? m_flag & 0x2 :
false;
300 return m_parsedVersion >= 4 ? m_flag & 0x1 : isCompressed();
325 return m_parsedVersion;
341 switch(idStringSize != std::string::npos ? idStringSize : std::strlen(idString)) {
343 return ConversionUtilities::BE::toUInt24(idString);
345 return ConversionUtilities::BE::toUInt32(idString);
347 throw ConversionUtilities::ConversionException(
"ID3v2 ID must be 3 or 4 chars");
361 #endif // ID3V2FRAME_H
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.