Continuing going through my pile-o-patches:

Make it possible to save files using the save() with a tag mask
without stripping the tags that do not fit the mask.  I still need
to do a little testing on this to make sure that the offsets are
still computed correctly.

BUG:96460


git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@437380 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
This commit is contained in:
Scott Wheeler 2005-07-21 17:33:36 +00:00
parent ca839d884f
commit 87824b1737
2 changed files with 25 additions and 7 deletions

View File

@ -263,12 +263,17 @@ bool MPEG::File::save()
bool MPEG::File::save(int tags)
{
if(tags == NoTags)
return save(tags, true);
}
bool MPEG::File::save(int tags, bool stripOthers)
{
if(tags == NoTags && stripOthers)
return strip(AllTags);
if(!d->ID3v2Tag && !d->ID3v1Tag && !d->APETag) {
if(d->hasID3v1 || d->hasID3v2 || d->hasAPE)
if((d->hasID3v1 || d->hasID3v2 || d->hasAPE) && stripOthers)
return strip(AllTags);
return true;
@ -299,10 +304,10 @@ bool MPEG::File::save(int tags)
insert(d->ID3v2Tag->render(), d->ID3v2Location, d->ID3v2OriginalSize);
}
else
else if(stripOthers)
success = strip(ID3v2, false) && success;
}
else if(d->hasID3v2)
else if(d->hasID3v2 && stripOthers)
success = strip(ID3v2) && success;
if(ID3v1 & tags) {
@ -311,13 +316,14 @@ bool MPEG::File::save(int tags)
seek(offset, End);
writeBlock(d->ID3v1Tag->render());
}
else
else if(stripOthers)
success = strip(ID3v1) && success;
}
else if(d->hasID3v1)
else if(d->hasID3v1 && stripOthers)
success = strip(ID3v1, false) && success;
// Dont save an APE-tag unless one has been created
if((APE & tags) && d->APETag) {
if(d->hasAPE)
insert(d->APETag->render(), d->APELocation, d->APEOriginalSize);
@ -338,7 +344,7 @@ bool MPEG::File::save(int tags)
}
}
}
else if(d->hasAPE)
else if(d->hasAPE && stripOthers)
success = strip(APE, false) && success;
return success;

View File

@ -144,6 +144,18 @@ namespace TagLib {
*/
bool save(int tags);
/*!
* Save the file. This will attempt to save all of the tag types that are
* specified by OR-ing together TagTypes values. The save() method above
* uses AllTags. This returns true if saving was successful.
*
* If \a stripOthers is true this strips all tags not included in the mask,
* but does not modify them in memory, so later calls to save() which make
* use of these tags will remain valid. This also strips empty tags.
*/
// BIC: combine with the above method
bool save(int tags, bool stripOthers);
/*!
* Returns a pointer to the ID3v2 tag of the file.
*