aboutsummaryrefslogtreecommitdiff
path: root/examples/demo_tag.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/demo_tag.cpp')
-rw-r--r--examples/demo_tag.cpp199
1 files changed, 199 insertions, 0 deletions
diff --git a/examples/demo_tag.cpp b/examples/demo_tag.cpp
new file mode 100644
index 0000000..3c31307
--- /dev/null
+++ b/examples/demo_tag.cpp
@@ -0,0 +1,199 @@
+// $Id: demo_tag.cpp,v 1.15 2002/06/29 17:18:35 t1mpy Exp $
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "id3/id3lib_streams.h"
+#include <stdlib.h>
+#include <string.h>
+
+#include <id3/tag.h>
+#include <id3/misc_support.h>
+
+#include "demo_tag_options.h"
+
+using std::cout;
+using std::endl;
+
+static const char* VERSION_NUMBER = "$Revision: 1.15 $";
+
+void PrintUsage(const char *sName)
+{
+ 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)
+{
+ cout << "Uses " << ID3LIB_FULL_NAME << endl << endl;
+
+ cout << "This program tags mp3 files with ID3v1/1.1 and/or id3v2 tags" << 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[])
+{
+ int ulFlag = ID3TT_ID3;
+ ID3D_INIT_DOUT();
+ 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
+ *sArtist = "",
+ *sAlbum = "",
+ *sTitle = "",
+ *sComment = "",
+ *sYear = "",
+ *sDesc = "";
+ unsigned short
+ nYear = 0,
+ nTrack = 0,
+ nTotal = 0,
+ nGenre = 0;
+
+
+ if (args.artist_given)
+ {
+ sArtist = args.artist_arg;
+ cout << "+++ Artist = " << sArtist << endl;
+ }
+ if (args.album_given)
+ {
+ sAlbum = args.album_arg;
+ cout << "+++ Album = " << sAlbum << endl;
+ }
+ if (args.song_given)
+ {
+ sTitle = args.song_arg;
+ cout << "+++ Song = " << sTitle << endl;
+ }
+ if (args.year_given)
+ {
+ sYear = args.year_arg;
+ nYear = ::strtol(sYear, NULL, 10);
+ cout << "+++ Year = " << nYear << endl;
+ }
+ if (args.comment_given)
+ {
+ sComment = args.comment_arg;
+ cout << "+++ Comment = " << sComment << endl;
+ if (args.desc_given)
+ {
+ sDesc = args.desc_arg;
+ cout << "+++ Comment Description" << endl;
+ cout << " = " << sDesc << endl;
+ }
+ else
+ {
+ sDesc = "";
+ }
+ }
+ if (args.genre_given && args.genre_arg > 0 && args.genre_arg < 0xFF)
+ {
+ nGenre = args.genre_arg;
+ cout << "+++ Genre = " << args.genre_arg << endl;
+ }
+ if (args.track_given)
+ {
+ nTrack = ::strtol(args.track_arg, NULL, 10);
+ cout << "+++ Track = " << nTrack << endl;
+ }
+ if (args.total_given)
+ {
+ nTotal = ::strtol(args.total_arg, NULL, 10);
+ cout << "+++ Total = " << nTotal << endl;
+ }
+ const char* filename = NULL;
+ for (size_t i = 0; i < args.inputs_num; ++i)
+ {
+ filename = args.inputs[i];
+ ID3_Tag myTag;
+
+ cout << "Tagging " << filename << ": ";
+
+ myTag.Link(filename);
+
+ cout << "attempting ";
+ DisplayTags(cout, ulFlag);
+
+ if (args.artist_given)
+ {
+ ID3_AddArtist(&myTag, sArtist, true);
+ }
+ if (args.album_given)
+ {
+ ID3_AddAlbum(&myTag, sAlbum, true);
+ }
+ if (args.song_given)
+ {
+ ID3_AddTitle(&myTag, sTitle, true);
+ }
+ if (args.year_given)
+ {
+ ID3_AddYear(&myTag, sYear, true);
+ }
+ if (args.comment_given)
+ {
+ ID3_AddComment(&myTag, sComment, sDesc, true);
+ }
+ if (args.genre_given)
+ {
+ ID3_AddGenre(&myTag, nGenre, true);
+ }
+ if (args.track_given)
+ {
+ ID3_AddTrack(&myTag, nTrack, nTotal, true);
+ }
+ luint nTags = myTag.Update(ulFlag);
+ cout << ", tagged ";
+
+ DisplayTags(cout, nTags);
+
+ cout << endl;
+ }
+
+ return 0;
+}
+