diff --git a/id3/id3v2tag.cpp b/id3/id3v2tag.cpp index 161d7b6..4e4557f 100644 --- a/id3/id3v2tag.cpp +++ b/id3/id3v2tag.cpp @@ -148,30 +148,12 @@ TagDataType Id3v2Tag::proposedDataType(const uint32 &id) const const TagValue &Id3v2Tag::value(const typename Id3v2Frame::identifierType &id) const { - const TagValue &res = FieldMapBasedTag::value(id); - if(res.isEmpty()) { - typename Id3v2Frame::identifierType alternativeId = Id3v2FrameIds::isLongId(id) - ? Id3v2FrameIds::convertToShortId(id) - : Id3v2FrameIds::convertToLongId(id); - if(alternativeId) { - return FieldMapBasedTag::value(alternativeId); - } else { - return res; - } - } - return res; + return FieldMapBasedTag::value(id); } bool Id3v2Tag::setValue(const typename Id3v2Frame::identifierType &id, const TagValue &value) { - typename Id3v2Frame::identifierType alternativeId = Id3v2FrameIds::isLongId(id) - ? Id3v2FrameIds::convertToShortId(id) - : Id3v2FrameIds::convertToLongId(id); - if(!alternativeId || fields().count(id) || !fields().count(alternativeId)) { - return FieldMapBasedTag::setValue(id, value); - } else { - return FieldMapBasedTag::setValue(alternativeId, value); - } + return FieldMapBasedTag::setValue(id, value); } /*! @@ -350,6 +332,13 @@ bool FrameComparer::operator()(const uint32 &lhs, const uint32 &rhs) const if(lhs == rhs) { return false; } + const bool lhsLong = Id3v2FrameIds::isLongId(lhs); + const bool rhsLong = Id3v2FrameIds::isLongId(rhs); + if(((lhsLong && !rhsLong) && (lhs == Id3v2FrameIds::convertToLongId(rhs))) + || ((!lhsLong && rhsLong) && (Id3v2FrameIds::convertToLongId(lhs) == rhs))) { + return false; + } + if(lhs == Id3v2FrameIds::lUniqueFileId || lhs == Id3v2FrameIds::sUniqueFileId) { return true; }