Add support for disk position in ID3v2.0

This commit is contained in:
Martchus 2018-06-02 23:08:14 +02:00
parent e87f788dce
commit a065412d98
5 changed files with 10 additions and 6 deletions

View File

@ -173,8 +173,8 @@ set(META_APP_AUTHOR "Martchus")
set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}")
set(META_APP_DESCRIPTION "C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags")
set(META_VERSION_MAJOR 7)
set(META_VERSION_MINOR 0)
set(META_VERSION_PATCH 4)
set(META_VERSION_MINOR 1)
set(META_VERSION_PATCH 0)
set(META_PUBLIC_SHARED_LIB_DEPENDS c++utilities)
set(META_PUBLIC_STATIC_LIB_DEPENDS c++utilities_static)
set(META_PRIVATE_COMPILE_DEFINITIONS LEGACY_API)

View File

@ -231,7 +231,7 @@ void Id3v2Frame::parse(BinaryReader &reader, uint32 version, uint32 maximalSize,
// frame contains text
TagTextEncoding dataEncoding = parseTextEncodingByte(static_cast<byte>(*buffer.get()), diag); // the first byte stores the encoding
if ((version >= 3 && (id() == Id3v2FrameIds::lTrackPosition || id() == Id3v2FrameIds::lDiskPosition))
|| (version < 3 && id() == Id3v2FrameIds::sTrackPosition)) {
|| (version < 3 && (id() == Id3v2FrameIds::sTrackPosition || id() == Id3v2FrameIds::sDiskPosition))) {
// the track number or the disk number frame
try {
if (characterSize(dataEncoding) > 1) {
@ -418,8 +418,7 @@ Id3v2FrameMaker::Id3v2FrameMaker(Id3v2Frame &frame, byte version, Diagnostics &d
if (Id3v2FrameIds::isTextFrame(m_frameId)) {
// make text frames
if ((version >= 3 && (m_frameId == Id3v2FrameIds::lTrackPosition || m_frameId == Id3v2FrameIds::lDiskPosition))
|| (version < 3 && m_frameId == Id3v2FrameIds::sTrackPosition)) {
// track number or the disk number frame
|| (version < 3 && (m_frameId == Id3v2FrameIds::sTrackPosition || m_frameId == Id3v2FrameIds::sDiskPosition))) {
// make track number or disk number frame
// -> convert the position to string
const auto positionStr(value.toString(TagTextEncoding::Latin1));

View File

@ -39,6 +39,8 @@ uint32 convertToShortId(uint32 id)
return sGenre;
case lTrackPosition:
return sTrackPosition;
case lDiskPosition:
return sDiskPosition;
case lEncoder:
return sEncoder;
case lBpm:
@ -89,6 +91,8 @@ uint32 convertToLongId(uint32 id)
return lGenre;
case sTrackPosition:
return lTrackPosition;
case sDiskPosition:
return lDiskPosition;
case sEncoder:
return lEncoder;
case sBpm:

View File

@ -42,6 +42,7 @@ enum KnownValue : uint32 {
sTitle = 0x545432,
sGenre = 0x54434f,
sTrackPosition = 0x54524b,
sDiskPosition = 0x545041,
sEncoder = 0x54454e,
sBpm = 0x544250,
sCover = 0x504943,

View File

@ -90,7 +90,7 @@ Id3v2Tag::IdentifierType Id3v2Tag::internallyGetFieldId(KnownField field) const
case KnownField::TrackPosition:
return sTrackPosition;
case KnownField::DiskPosition:
return lDiskPosition;
return sDiskPosition;
case KnownField::Encoder:
return sEncoder;
case KnownField::Bpm: