From 6cc989eb5570d998ac3f3a8fb1b2375946146e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Sat, 1 Dec 2007 10:08:43 +0000 Subject: [PATCH] Fix saving of ID3v1 tags to TrueAudio files with removed ID3v2 tags. git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@743541 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- taglib/trueaudio/trueaudiofile.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/taglib/trueaudio/trueaudiofile.cpp b/taglib/trueaudio/trueaudiofile.cpp index 18b7a911..adbb6a44 100644 --- a/taglib/trueaudio/trueaudiofile.cpp +++ b/taglib/trueaudio/trueaudiofile.cpp @@ -133,22 +133,28 @@ bool TrueAudio::File::save() // Update ID3v2 tag - if(d->ID3v2Tag) { + if(d->ID3v2Tag && !d->ID3v2Tag->isEmpty()) { if(!d->hasID3v2) { d->ID3v2Location = 0; d->ID3v2OriginalSize = 0; } - insert(d->ID3v2Tag->render(), d->ID3v2Location, d->ID3v2OriginalSize); + ByteVector data = d->ID3v2Tag->render(); + insert(data, d->ID3v2Location, d->ID3v2OriginalSize); + d->ID3v1Location -= d->ID3v2OriginalSize - data.size(); + d->ID3v2OriginalSize = data.size(); d->hasID3v2 = true; } else if(d->hasID3v2) { removeBlock(d->ID3v2Location, d->ID3v2OriginalSize); + d->ID3v1Location -= d->ID3v2OriginalSize; + d->ID3v2Location = -1; + d->ID3v2OriginalSize = 0; d->hasID3v2 = false; } // Update ID3v1 tag - if(d->ID3v1Tag) { + if(d->ID3v1Tag && !d->ID3v1Tag->isEmpty()) { if(!d->hasID3v1) { seek(0, End); d->ID3v1Location = tell(); @@ -160,6 +166,7 @@ bool TrueAudio::File::save() } else if(d->hasID3v1) { removeBlock(d->ID3v1Location, 128); + d->ID3v1Location = -1; d->hasID3v1 = false; }