aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYoni Rabkin <yoni@rabkins.net>2017-03-01 17:06:42 -0500
committerYoni Rabkin <yoni@rabkins.net>2017-03-01 17:06:42 -0500
commit6601ba8ef710b8ed260773e18a3baa940a7adc3a (patch)
tree33e9b493e7bdccc57823fd364f6074a52faf626b /src
parent0b0bdd12eb97797d3c481de70871d64f42672a58 (diff)
Move to a new emms-print-metadata.
The new emms-print-metadata is written in C++ and brings on board new features from TagLib. Patch by Petteri Hintsanen <petterih@iki.fi>.
Diffstat (limited to 'src')
-rw-r--r--src/emms-print-metadata.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/src/emms-print-metadata.cpp b/src/emms-print-metadata.cpp
new file mode 100644
index 0000000..7283657
--- /dev/null
+++ b/src/emms-print-metadata.cpp
@@ -0,0 +1,112 @@
+/* emms-print-metadata.cpp --- Info function for TagLib
+ Copyright (C) 2016 Free Software Foundation, Inc.
+
+ Author: Petteri Hintsanen <petterih@iki.fi>
+
+ This file is part of EMMS.
+
+ EMMS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3, or (at your option)
+ any later version.
+
+ EMMS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with EMMS; see the file COPYING. If not, write to
+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
+
+#include <taglib/fileref.h>
+#include <taglib/tag.h>
+#include <taglib/tpropertymap.h>
+#include <iostream>
+
+static const char* const tags_to_extract[] = {
+ "album",
+ "albumsort",
+ "albumartist",
+ "albumartistsort",
+ "artist",
+ "artistsort",
+ "composer",
+ "composersort",
+ "performer",
+ "year",
+ "originalyear",
+ "date",
+ "originaldate",
+ "genre",
+ "label",
+ "title",
+ "titlesort",
+ "tracknumber",
+ "discnumber"
+};
+
+void print_tag (const TagLib::PropertyMap& tags, const std::string& tag);
+
+int
+main (int argc, char* argv[])
+{
+ if (argc != 2)
+ {
+ std::cerr << argv[0] << ": "
+ << "usage: emms-print-metadata FILENAME"
+ << std::endl
+ << "FILENAME must end to one of these extensions: "
+ << TagLib::FileRef::defaultFileExtensions ().toString ()
+ << std::endl;
+ return 1;
+ }
+
+ TagLib::FileRef file (argv[1]);
+ if (file.isNull ()) {
+ std::cerr << argv[0] << ": "
+ << argv[1] << ": "
+ << "file does not exist or is of an unknown type"
+ << std::endl;
+ return 1;
+ }
+
+ const TagLib::PropertyMap tags = file.file ()->properties ();
+ if (tags.isEmpty ()) {
+ std::cerr << argv[0] << ": "
+ << argv[1] << ": "
+ << "file does not have tags or is of an unknown type"
+ << std::endl;
+ return 1;
+ }
+
+ for (unsigned int i = 0; i < sizeof (tags_to_extract) / sizeof (char*);
+ i++)
+ {
+ print_tag (tags, tags_to_extract[i]);
+ }
+
+ int length = 0;
+ if (file.audioProperties ())
+ {
+ const TagLib::AudioProperties* properties = file.audioProperties ();
+ length = properties->length ();
+ }
+ std::cout << "info-playing-time=" << length << std::endl;
+
+ return 0;
+}
+
+void
+print_tag (const TagLib::PropertyMap& tags, const std::string& tag)
+{
+ TagLib::StringList values = tags[tag];
+ if (!values.isEmpty ())
+ {
+ const TagLib::String& value = values.front ();
+ std::cout << "info-" << tag << "=" << value.to8Bit (true) << std::endl;
+ }
+}
+
+/* emms-print-taglib-metadata.cpp ends here. */