blob: a0d1cee953ccae6a082000a699f6036d43be02b5 [file] [log] [blame]
// $Id: demo_convert.cpp,v 1.15 2002/06/27 12:46:55 t1mpy Exp $
//
// The authors have released ID3Lib as Public Domain (PD) and claim no
// copyright, patent or other intellectual property protection in this work.
// This means that it may be modified, redistributed and used in commercial
// and non-commercial software and hardware without restrictions. ID3Lib is
// distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either
// express or implied.
//
// The ID3Lib authors encourage improvements and optimisations to be sent to
// the ID3Lib coordinator, currently Dirk Mahoney (dirk@id3.org). Approved
// submissions may be altered, and will be included and released under these
// terms.
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
#include <string.h>
#include "id3/id3lib_streams.h"
#include "id3/tag.h"
#include "demo_convert_options.h"
using std::cout;
using std::endl;
static const char* VERSION_NUMBER = "$Revision: 1.15 $";
void PrintUsage(const char *sName)
{
cout << "Converts between id3v1 and id3v2 tags of an mp3 file." << endl;
cout << endl;
cout << "Will render both types of tag by default. Only the last" << endl
<< "tag type indicated in the option list will be used. Non-" << endl
<< "rendered will remain unchanged in the original file. Will" << endl
<< "also parse and convert Lyrics3 v2.0 frames, but will not" << endl
<< "render them." << endl;
}
void PrintVersion(const char *sName)
{
size_t nIndex;
cout << sName << " ";
for (nIndex = 0; nIndex < strlen(VERSION_NUMBER); nIndex++)
{
if (VERSION_NUMBER[nIndex] == ' ')
{
break;
}
}
nIndex++;
for (; nIndex < strlen (VERSION_NUMBER); nIndex++)
{
if (VERSION_NUMBER[nIndex] == ' ')
{
break;
}
cout << VERSION_NUMBER[nIndex];
}
cout << endl;
cout << "Uses " << ID3LIB_FULL_NAME << endl << endl;
cout << "This program converts and strips ID3v1/1.1 and Lyrics3 v2.0" << endl;
cout << "tags to ID3v2 tags." << endl << endl;
}
void DisplayTags(ostream &os, luint nTags)
{
if (!((nTags & ID3TT_ID3V1) || (nTags & ID3TT_ID3V2)))
{
os << "no tag";
}
if (nTags & ID3TT_ID3V1)
{
os << "v1";
}
if ((nTags & ID3TT_ID3V1) && (nTags & ID3TT_ID3V2))
{
os << " and ";
}
if (nTags & ID3TT_ID3V2)
{
os << "v2";
}
}
int main( unsigned int argc, char * const argv[])
{
flags_t ulFlag = ID3TT_ALL;
gengetopt_args_info args;
if (cmdline_parser(argc, argv, &args) != 0)
{
exit(1);
}
#if defined ID3_ENABLE_DEBUG
if (args.warning_flag)
{
ID3D_INIT_WARNING();
ID3D_WARNING ( "warnings turned on" );
}
if (args.notice_flag)
{
ID3D_INIT_NOTICE();
ID3D_NOTICE ( "notices turned on" );
}
#endif
if (args.v1tag_flag)
{
ulFlag = ID3TT_ID3V1;
}
if (args.v2tag_flag)
{
ulFlag = ID3TT_ID3V2;
}
const char* filename = NULL;
for (size_t i = 0; i < args.inputs_num; ++i)
{
filename = args.inputs[i];
ID3_Tag myTag;
if (args.strip_given)
{
cout << "Stripping ";
}
else
{
cout << "Converting ";
}
cout << filename << ": ";
myTag.Clear();
myTag.Link(filename, ID3TT_ALL);
myTag.SetPadding(args.padding_flag);
cout << "attempting ";
DisplayTags(cout, ulFlag);
luint nTags;
if (args.strip_flag)
{
nTags = myTag.Strip(ulFlag);
cout << ", stripped ";
}
else
{
nTags = myTag.Update(ulFlag);
cout << ", converted ";
}
DisplayTags(cout, nTags);
cout << endl;
}
return 0;
}