www.pudn.com > eMule0.47c-Sources.zip > test_remove.cpp


// $Id: test_remove.cpp,v 1.13 2003/03/02 15:17:21 t1mpy Exp $ 
 
#if defined(HAVE_CONFIG_H) 
# include "config.h" 
#endif 
 
#include "id3/id3lib_streams.h" 
#include "id3/tag.h" 
#include "id3/misc_support.h" 
#include "id3/id3lib_strings.h" 
 
using std::cout; 
using std::endl; 
using std::cerr; 
 
using namespace dami; 
 
typedef const char* LPCTSTR; 
 
/* CSharedTag is a wrapper I made for some features I need */ 
/* LPCTSTR means const char * */ 
size_t RemoveFrame(ID3_Tag& pTag, ID3_FrameID fID, LPCTSTR sDescription) 
{ 
  size_t nCount = 0; 
  const ID3_Frame * frame = NULL; 
 
  do { 
    if (!sDescription) 
    { 
      cerr << "*** description is null" << endl; 
      frame = pTag.Find(fID); 
    } 
    else 
    { 
      cerr << "*** description is \"" << sDescription << "\"" << endl; 
      frame = pTag.Find(fID, ID3FN_DESCRIPTION, sDescription); 
    } 
 
    if (frame) 
    { 
      ID3_Field* fld = frame->GetField(ID3FN_TEXT); 
      String text(fld->GetRawText(), fld->Size()); 
      cerr << "*** delete frame with text \"" << text << "\"" << endl; 
      /* pTag is an ID3_Tag */ 
      delete pTag.RemoveFrame(frame); 
      nCount++; 
    } 
  } while (frame != NULL); 
 
  return nCount; 
} 
 
int main( int argc, char *argv[]) 
{ 
  ID3_Tag tag; 
  ID3_Frame frame; 
   
  if (argc == 2) 
  { 
    tag.Link(argv[1]); 
    cerr << "removed " << RemoveFrame(tag, ID3FID_COMMENT, "") << " descriptionless comment frames" << endl; 
    tag.Update(); 
     
  } 
  else 
  { 
    tag.Link("test-remove.tag"); 
    tag.Strip(ID3TT_ALL); 
    tag.Clear(); 
     
    frame.SetID(ID3FID_TITLE); 
    frame.GetField(ID3FN_TEXT)->Set("Test title"); 
    tag.AddFrame(frame); 
     
    frame.SetID(ID3FID_COMPOSER); 
    frame.GetField(ID3FN_TEXT)->Set("Test composer"); 
    tag.AddFrame(frame); 
     
    frame.SetID(ID3FID_BAND); 
    frame.GetField(ID3FN_TEXT)->Set("Test band"); 
    tag.AddFrame(frame); 
     
    frame.SetID(ID3FID_CONDUCTOR); 
    frame.GetField(ID3FN_TEXT)->Set("Test conductor"); 
    tag.AddFrame(frame); 
     
    frame.SetID(ID3FID_COMMENT); 
    frame.GetField(ID3FN_LANGUAGE)->Set("eng"); 
    frame.GetField(ID3FN_TEXT)->Set("Test comment"); 
    frame.GetField(ID3FN_DESCRIPTION)->Set("A Description"); 
    tag.AddFrame(frame); 
     
    frame.SetID(ID3FID_COMMENT); 
    frame.GetField(ID3FN_LANGUAGE)->Set("eng"); 
    frame.GetField(ID3FN_TEXT)->Set("Test comment 2"); 
    frame.GetField(ID3FN_DESCRIPTION)->Set(""); 
    tag.AddFrame(frame); 
     
    frame.SetID(ID3FID_COMMENT); 
    frame.GetField(ID3FN_LANGUAGE)->Set("eng"); 
    frame.GetField(ID3FN_TEXT)->Set("ID3v1 comment text?"); 
    frame.GetField(ID3FN_DESCRIPTION)->Set(STR_V1_COMMENT_DESC); 
    tag.AddFrame(frame); 
     
    tag.SetPadding(false); 
    tag.Update(ID3TT_ID3V2); 
     
    cerr << "removed " << ID3_RemoveArtists(&tag) << " artist frames" << endl; 
    tag.Update(); 
    cerr << "removed " << ID3_RemoveTitles(&tag) << " title frames" << endl; 
    tag.Update(); 
    cerr << "removed " << RemoveFrame(tag, ID3FID_COMMENT, "") << " descriptionless comment frames" << endl; 
    tag.Update(); 
  } 
 
  return 0; 
}