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;
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) {
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);
}
}
}
- else if(d->hasAPE)
+ else if(d->hasAPE && stripOthers)
success = strip(APE, false) && success;
return success;
*/
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.
*