[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdesupport/taglib/mpeg
From:       Scott Wheeler <wheeler () kde ! org>
Date:       2005-07-21 17:33:38
Message-ID: 1121967218.451497.27212.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 437380 by wheeler:

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


 M  +13 -7     mpegfile.cpp  
 M  +12 -0     mpegfile.h  


--- trunk/kdesupport/taglib/mpeg/mpegfile.cpp #437379:437380
@@ -263,12 +263,17 @@
 
 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 @@
 
       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 @@
       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 @@
       }
     }
   }
-  else if(d->hasAPE)
+  else if(d->hasAPE && stripOthers)
     success = strip(APE, false) && success;
 
   return success;
--- trunk/kdesupport/taglib/mpeg/mpegfile.h #437379:437380
@@ -145,6 +145,18 @@
       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.
        *
        * If \a create is false (the default) this will return a null pointer
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic