insert(d->ID3v2Tag->render(), d->ID3v2Location, d->ID3v2OriginalSize);
}
else
- success = strip(ID3v2) && success;
+ success = strip(ID3v2, false) && success;
}
else if(d->hasID3v2)
success = strip(ID3v2) && success;
success = strip(ID3v1) && success;
}
else if(d->hasID3v1)
- success = strip(ID3v1) && success;
+ success = strip(ID3v1, false) && success;
return success;
}
}
bool MPEG::File::strip(int tags)
+{
+ return strip(tags, true);
+}
+
+bool MPEG::File::strip(int tags, bool freeMemory)
{
if(readOnly()) {
debug("MPEG::File::strip() - Cannot strip tags from a read only file.");
d->ID3v2Location = -1;
d->ID3v2OriginalSize = 0;
d->hasID3v2 = false;
- delete d->ID3v2Tag;
- d->ID3v2Tag = 0;
+ if(freeMemory) {
+ delete d->ID3v2Tag;
+ d->ID3v2Tag = 0;
+ }
// v1 tag location has changed, update if it exists
if(d->ID3v1Tag)
truncate(d->ID3v1Location);
d->ID3v1Location = -1;
d->hasID3v1 = false;
- delete d->ID3v1Tag;
- d->ID3v1Tag = 0;
+ if(freeMemory) {
+ delete d->ID3v1Tag;
+ d->ID3v1Tag = 0;
+ }
}
return true;
* file. By default it strips all tags. It returns true if the tags are
* successfully stripped.
*
+ * This is equivalent to strip(tags, true)
+ *
* \note This will also invalidate pointers to the ID3v2 and ID3v1 tags
* as their memory will be freed.
*/
bool strip(int tags = AllTags);
+ /*!
+ * This will strip the tags that match the OR-ed together TagTypes from the
+ * file. By default it strips all tags. It returns true if the tags are
+ * successfully stripped.
+ *
+ * If \a freeMemory is true the ID3v1 and ID3v2 tags will be deleted and
+ * pointers to them will be invalidated.
+ */
+ // BIC: merge with the method above
+ bool strip(int tags, bool freeMemory);
+
/*!
* Set the ID3v2::FrameFactory to something other than the default.
*