mirror of
https://github.com/taglib/taglib.git
synced 2025-06-04 01:28:21 -04:00
Instead of returning 0 on finding a deprecated frame type, create an
UnknownFrame and set the flag to discard it on write. As a special bonus this meant implementing the discard-on-tag-alter flag. BUG:100515 git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@415248 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
This commit is contained in:
parent
6ceb7a8151
commit
1857e61a9d
@ -417,6 +417,11 @@ bool Frame::Header::tagAlterPreservation() const
|
||||
return d->tagAlterPreservation;
|
||||
}
|
||||
|
||||
void Frame::Header::setTagAlterPreservation(bool preserve)
|
||||
{
|
||||
d->tagAlterPreservation = preserve;
|
||||
}
|
||||
|
||||
bool Frame::Header::fileAlterPreservation() const
|
||||
{
|
||||
return d->fileAlterPreservation;
|
||||
|
@ -29,6 +29,7 @@ namespace TagLib {
|
||||
|
||||
namespace ID3v2 {
|
||||
|
||||
class Tag;
|
||||
class FrameFactory;
|
||||
|
||||
//! ID3v2 frame implementation
|
||||
@ -44,6 +45,7 @@ namespace TagLib {
|
||||
|
||||
class Frame
|
||||
{
|
||||
friend class Tag;
|
||||
friend class FrameFactory;
|
||||
|
||||
public:
|
||||
@ -295,10 +297,27 @@ namespace TagLib {
|
||||
/*!
|
||||
* Returns true if the flag for tag alter preservation is set.
|
||||
*
|
||||
* \note This flag is currently ignored internally in TagLib.
|
||||
* The semantics are a little backwards from what would seem natural
|
||||
* (setting the preservation flag to throw away the frame), but this
|
||||
* follows the ID3v2 standard.
|
||||
*
|
||||
* \see setTagAlterPreservation()
|
||||
*/
|
||||
bool tagAlterPreservation() const;
|
||||
|
||||
/*!
|
||||
* Sets the flag for preservation of this frame if the tag is set. If
|
||||
* this is set to true the frame will not be written when the tag is
|
||||
* saved.
|
||||
*
|
||||
* The semantics are a little backwards from what would seem natural
|
||||
* (setting the preservation flag to throw away the frame), but this
|
||||
* follows the ID3v2 standard.
|
||||
*
|
||||
* \see tagAlterPreservation()
|
||||
*/
|
||||
void setTagAlterPreservation(bool discard);
|
||||
|
||||
/*!
|
||||
* Returns true if the flag for file alter preservation is set.
|
||||
*
|
||||
|
@ -99,8 +99,8 @@ Frame *FrameFactory::createFrame(const ByteVector &data, uint version) const
|
||||
}
|
||||
|
||||
if(!updateFrame(header)) {
|
||||
delete header;
|
||||
return 0;
|
||||
header->setTagAlterPreservation(true);
|
||||
return new UnknownFrame(data, header);
|
||||
}
|
||||
|
||||
// updateFrame() might have updated the frame ID.
|
||||
|
@ -343,8 +343,10 @@ ByteVector ID3v2::Tag::render() const
|
||||
|
||||
// Loop through the frames rendering them and adding them to the tagData.
|
||||
|
||||
for(FrameList::Iterator it = d->frameList.begin(); it != d->frameList.end(); it++)
|
||||
tagData.append((*it)->render());
|
||||
for(FrameList::Iterator it = d->frameList.begin(); it != d->frameList.end(); it++) {
|
||||
if(!(*it)->header()->tagAlterPreservation())
|
||||
tagData.append((*it)->render());
|
||||
}
|
||||
|
||||
// Compute the amount of padding, and append that to tagData.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user