mirror of
https://github.com/taglib/taglib.git
synced 2025-06-04 01:28:21 -04:00
Fix issue #88 by changing the behavior of setProperties().
For file types that support multiple tag standards (for example, FLAC files can have ID3v1, ID3v2, and Vorbis comments) setProperties is now called for all existing tags instead of only for the most recommended one. This fixes the problem that under some circumstances it was not possible to delete a value using setProperties() because upon save() the call to Tag::duplicate recovered that value from the ID3v1 tag.
This commit is contained in:
parent
d5cf6d72e2
commit
c0ca5c97d5
@ -131,12 +131,12 @@ void APE::File::removeUnsupportedProperties(const StringList &properties)
|
||||
|
||||
PropertyMap APE::File::setProperties(const PropertyMap &properties)
|
||||
{
|
||||
if(d->hasAPE)
|
||||
return d->tag.access<APE::Tag>(ApeAPEIndex, false)->setProperties(properties);
|
||||
else if(d->hasID3v1)
|
||||
return d->tag.access<ID3v1::Tag>(ApeID3v1Index, false)->setProperties(properties);
|
||||
else
|
||||
return d->tag.access<APE::Tag>(ApeAPEIndex, true)->setProperties(properties);
|
||||
PropertyMap result;
|
||||
if(d->hasID3v1)
|
||||
result = d->tag.access<ID3v1::Tag>(ApeID3v1Index, false)->setProperties(properties);
|
||||
if(d->hasAPE || !d->hasID3v1)
|
||||
result = d->tag.access<APE::Tag>(ApeAPEIndex, true)->setProperties(properties);
|
||||
return result;
|
||||
}
|
||||
|
||||
APE::Properties *APE::File::audioProperties() const
|
||||
|
@ -168,14 +168,14 @@ void FLAC::File::removeUnsupportedProperties(const StringList &unsupported)
|
||||
|
||||
PropertyMap FLAC::File::setProperties(const PropertyMap &properties)
|
||||
{
|
||||
if(d->hasXiphComment)
|
||||
return d->tag.access<Ogg::XiphComment>(FlacXiphIndex, false)->setProperties(properties);
|
||||
else if(d->hasID3v2)
|
||||
return d->tag.access<ID3v2::Tag>(FlacID3v2Index, false)->setProperties(properties);
|
||||
else if(d->hasID3v1)
|
||||
return d->tag.access<ID3v1::Tag>(FlacID3v1Index, false)->setProperties(properties);
|
||||
else
|
||||
return d->tag.access<Ogg::XiphComment>(FlacXiphIndex, true)->setProperties(properties);
|
||||
PropertyMap result;
|
||||
if(d->hasID3v1)
|
||||
result = d->tag.access<ID3v1::Tag>(FlacID3v1Index, false)->setProperties(properties);
|
||||
if(d->hasID3v2)
|
||||
result = d->tag.access<ID3v2::Tag>(FlacID3v2Index, false)->setProperties(properties);
|
||||
if(d->hasXiphComment || !(d->hasID3v1 || d->hasID3v2))
|
||||
result = d->tag.access<Ogg::XiphComment>(FlacXiphIndex, true)->setProperties(properties);
|
||||
return result;
|
||||
}
|
||||
|
||||
FLAC::Properties *FLAC::File::audioProperties() const
|
||||
|
@ -135,15 +135,14 @@ void MPC::File::removeUnsupportedProperties(const StringList &properties)
|
||||
|
||||
PropertyMap MPC::File::setProperties(const PropertyMap &properties)
|
||||
{
|
||||
if(d->hasAPE)
|
||||
return d->tag.access<APE::Tag>(MPCAPEIndex, false)->setProperties(properties);
|
||||
else if(d->hasID3v1)
|
||||
return d->tag.access<ID3v1::Tag>(MPCID3v1Index, false)->setProperties(properties);
|
||||
else
|
||||
return d->tag.access<APE::Tag>(APE, true)->setProperties(properties);
|
||||
PropertyMap result;
|
||||
if(d->hasID3v1)
|
||||
result = d->tag.access<ID3v1::Tag>(MPCID3v1Index, false)->setProperties(properties);
|
||||
if(d->hasAPE || !d->hasID3v1)
|
||||
result = d->tag.access<APE::Tag>(MPCAPEIndex, true)->setProperties(properties);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
MPC::Properties *MPC::File::audioProperties() const
|
||||
{
|
||||
return d->properties;
|
||||
|
@ -156,16 +156,17 @@ void MPEG::File::removeUnsupportedProperties(const StringList &properties)
|
||||
else if(d->hasID3v1)
|
||||
d->tag.access<ID3v1::Tag>(ID3v1Index, false)->removeUnsupportedProperties(properties);
|
||||
}
|
||||
|
||||
PropertyMap MPEG::File::setProperties(const PropertyMap &properties)
|
||||
{
|
||||
if(d->hasID3v2)
|
||||
return d->tag.access<ID3v2::Tag>(ID3v2Index, false)->setProperties(properties);
|
||||
else if(d->hasAPE)
|
||||
return d->tag.access<APE::Tag>(APEIndex, false)->setProperties(properties);
|
||||
else if(d->hasID3v1)
|
||||
return d->tag.access<ID3v1::Tag>(ID3v1Index, false)->setProperties(properties);
|
||||
else
|
||||
return d->tag.access<ID3v2::Tag>(ID3v2Index, true)->setProperties(properties);
|
||||
PropertyMap result;
|
||||
if(d->hasID3v1)
|
||||
result = d->tag.access<ID3v1::Tag>(ID3v1Index, false)->setProperties(properties);
|
||||
if(d->hasAPE)
|
||||
result = d->tag.access<APE::Tag>(APEIndex, false)->setProperties(properties);
|
||||
if(d->hasID3v2 || !(d->hasID3v1 || d->hasAPE))
|
||||
result = d->tag.access<ID3v2::Tag>(ID3v2Index, true)->setProperties(properties);
|
||||
return result;
|
||||
}
|
||||
|
||||
MPEG::Properties *MPEG::File::audioProperties() const
|
||||
|
@ -141,12 +141,12 @@ PropertyMap TrueAudio::File::properties() const
|
||||
|
||||
PropertyMap TrueAudio::File::setProperties(const PropertyMap &properties)
|
||||
{
|
||||
if(d->hasID3v2)
|
||||
return d->tag.access<ID3v2::Tag>(TrueAudioID3v2Index, false)->setProperties(properties);
|
||||
else if(d->hasID3v1)
|
||||
return d->tag.access<ID3v1::Tag>(TrueAudioID3v1Index, false)->setProperties(properties);
|
||||
else
|
||||
return d->tag.access<ID3v2::Tag>(TrueAudioID3v2Index, true)->setProperties(properties);
|
||||
PropertyMap result;
|
||||
if(d->hasID3v1)
|
||||
result = d->tag.access<ID3v1::Tag>(TrueAudioID3v1Index, false)->setProperties(properties);
|
||||
if(d->hasID3v2 || !d->hasID3v1)
|
||||
result =d->tag.access<ID3v2::Tag>(TrueAudioID3v2Index, true)->setProperties(properties);
|
||||
return result;
|
||||
}
|
||||
|
||||
TrueAudio::Properties *TrueAudio::File::audioProperties() const
|
||||
|
@ -119,12 +119,12 @@ PropertyMap WavPack::File::properties() const
|
||||
|
||||
PropertyMap WavPack::File::setProperties(const PropertyMap &properties)
|
||||
{
|
||||
if(d->hasAPE)
|
||||
return d->tag.access<APE::Tag>(WavAPEIndex, false)->setProperties(properties);
|
||||
else if(d->hasID3v1)
|
||||
return d->tag.access<ID3v1::Tag>(WavID3v1Index, false)->setProperties(properties);
|
||||
else
|
||||
return d->tag.access<APE::Tag>(APE, true)->setProperties(properties);
|
||||
PropertyMap result;
|
||||
if(d->hasID3v1)
|
||||
result = d->tag.access<ID3v1::Tag>(WavID3v1Index, false)->setProperties(properties);
|
||||
if(d->hasAPE || !d->hasID3v1)
|
||||
result = d->tag.access<APE::Tag>(WavAPEIndex, true)->setProperties(properties);
|
||||
return result;
|
||||
}
|
||||
|
||||
WavPack::Properties *WavPack::File::audioProperties() const
|
||||
|
Loading…
x
Reference in New Issue
Block a user