| // $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; |
| } |
| |
| |