diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-09-17 12:58:33 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-09-17 12:58:33 +0000 |
commit | f2b007195cd75b195e38a4cd7757debac73e7792 (patch) | |
tree | 90474413776806f02794602bbb495663e07a81ea /libs/ardour/session_metadata.cc | |
parent | 6ba5125e991e08a9d117b39a4c337cf453fd015d (diff) |
new files from sakari, missed last time
git-svn-id: svn://localhost/ardour2/branches/3.0@3740 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/session_metadata.cc')
-rw-r--r-- | libs/ardour/session_metadata.cc | 500 |
1 files changed, 500 insertions, 0 deletions
diff --git a/libs/ardour/session_metadata.cc b/libs/ardour/session_metadata.cc new file mode 100644 index 0000000000..7eb24e7586 --- /dev/null +++ b/libs/ardour/session_metadata.cc @@ -0,0 +1,500 @@ +/* + Copyright (C) 2008 Paul Davis + Author: Sakari Bergen + + This program 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 2 of the License, or (at your option) + any later version. + + This program 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 this program; if not, write to the Free Software Foundation, Inc., + 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include <ardour/session_metadata.h> + +#include <iostream> +#include <sstream> + +using namespace ARDOUR; + + +SessionMetadata::SessionMetadata () +{ + /*** General ***/ + map.insert (Property ("comment", "")); + map.insert (Property ("copyright", "")); + map.insert (Property ("isrc", "")); + map.insert (Property ("year", "")); + + /*** Title and friends ***/ + map.insert (Property ("grouping", "")); + map.insert (Property ("title", "")); + map.insert (Property ("subtitle", "")); + + /*** People... ***/ + map.insert (Property ("artist", "")); + map.insert (Property ("album_artist", "")); + map.insert (Property ("lyricist", "")); + map.insert (Property ("composer", "")); + map.insert (Property ("conductor", "")); + map.insert (Property ("remixer", "")); + map.insert (Property ("arranger", "")); + map.insert (Property ("engineer", "")); + map.insert (Property ("producer", "")); + map.insert (Property ("dj_mixer", "")); + map.insert (Property ("mixer", "")); + //map.insert (Property ("performers", "")); // Multiple values [instrument] + + /*** Album info ***/ + map.insert (Property ("album", "")); + map.insert (Property ("compilation", "")); + map.insert (Property ("disc_subtitle", "")); + map.insert (Property ("disc_number", "")); + map.insert (Property ("total_discs", "")); + map.insert (Property ("track_number", "")); + map.insert (Property ("total_tracks", "")); + + /*** Style ***/ + map.insert (Property ("genre", "")); + //map.insert (Property ("mood", "")); + //map.insert (Property ("bpm", "")); + + /*** Other ***/ + //map.insert (Property ("lyrics", "")); + //map.insert (Property ("media", "")); + //map.insert (Property ("label", "")); + //map.insert (Property ("barcode", "")); + //map.insert (Property ("encoded_by", "")); + //map.insert (Property ("catalog_number", "")); + + /*** Sorting orders ***/ + //map.insert (Property ("album_sort", "")); + //map.insert (Property ("album_artist_sort", "")); + //map.insert (Property ("artist_sort", "")); + //map.insert (Property ("title_sort", "")); +} + +SessionMetadata::~SessionMetadata () +{ + +} + +XMLNode * +SessionMetadata::get_xml (const ustring & name) +{ + ustring value = get_value (name); + if (value.empty()) { + return 0; + } + + XMLNode val ("value", value); + XMLNode * node = new XMLNode (name); + node->add_child_copy (val); + + return node; +} + +ustring +SessionMetadata::get_value (const ustring & name) const +{ + PropertyMap::const_iterator it = map.find (name); + if (it == map.end()) { + // Should not be reached! + std::cerr << "Programming error in SessionMetadata::get_value" << std::endl; + return ""; + } + + return it->second; +} + +uint32_t +SessionMetadata::get_uint_value (const ustring & name) const +{ + return atoi (get_value (name).c_str()); +} + +void +SessionMetadata::set_value (const ustring & name, const ustring & value) +{ + PropertyMap::iterator it = map.find (name); + if (it == map.end()) { + // Should not be reached! + std::cerr << "Programming error in SessionMetadata::set_value" << std::endl; + return; + } + + it->second = value; +} + +void +SessionMetadata::set_value (const ustring & name, uint32_t value) +{ + std::ostringstream oss; + oss << value; + if (oss.str().compare("0")) { + set_value (name, oss.str()); + } else { + set_value (name, ""); + } +} + +/*** Serialization ***/ +XMLNode & +SessionMetadata::get_state () +{ + XMLNode * node = new XMLNode ("Metadata"); + XMLNode * prop; + + for (PropertyMap::const_iterator it = map.begin(); it != map.end(); ++it) { + if ((prop = get_xml (it->first))) { + node->add_child_nocopy (*prop); + } + } + + return *node; +} + +int +SessionMetadata::set_state (const XMLNode & state) +{ + const XMLNodeList & children = state.children(); + ustring name; + ustring value; + XMLNode * node; + + for (XMLNodeConstIterator it = children.begin(); it != children.end(); it++) { + node = *it; + if (node->children().empty()) { + continue; + } + + name = node->name(); + node = *node->children().begin(); + value = node->content(); + + set_value (name, value); + } + + return 0; +} + +/*** Accessing ***/ +ustring +SessionMetadata::comment () const +{ + return get_value("comment"); +} + +ustring +SessionMetadata::copyright () const +{ + return get_value("copyright"); +} + +ustring +SessionMetadata::isrc () const +{ + return get_value("isrc"); +} + +uint32_t +SessionMetadata::year () const +{ + return get_uint_value("year"); +} + +ustring +SessionMetadata::grouping () const +{ + return get_value("grouping"); +} + +ustring +SessionMetadata::title () const +{ + return get_value("title"); +} + +ustring +SessionMetadata::subtitle () const +{ + return get_value("subtitle"); +} + +ustring +SessionMetadata::artist () const +{ + return get_value("artist"); +} + +ustring +SessionMetadata::album_artist () const +{ + return get_value("album_artist"); +} + +ustring +SessionMetadata::lyricist () const +{ + return get_value("lyricist"); +} + +ustring +SessionMetadata::composer () const +{ + return get_value("composer"); +} + +ustring +SessionMetadata::conductor () const +{ + return get_value("conductor"); +} + +ustring +SessionMetadata::remixer () const +{ + return get_value("remixer"); +} + +ustring +SessionMetadata::arranger () const +{ + return get_value("arranger"); +} + +ustring +SessionMetadata::engineer () const +{ + return get_value("engineer"); +} + +ustring +SessionMetadata::producer () const +{ + return get_value("producer"); +} + +ustring +SessionMetadata::dj_mixer () const +{ + return get_value("dj_mixer"); +} + +ustring +SessionMetadata::mixer () const +{ + return get_value("mixer"); +} + +ustring +SessionMetadata::album () const +{ + return get_value("album"); +} + +ustring +SessionMetadata::compilation () const +{ + return get_value("compilation"); +} + +ustring +SessionMetadata::disc_subtitle () const +{ + return get_value("disc_subtitle"); +} + +uint32_t +SessionMetadata::disc_number () const +{ + return get_uint_value("disc_number"); +} + +uint32_t +SessionMetadata::total_discs () const +{ + return get_uint_value("total_discs"); +} + +uint32_t +SessionMetadata::track_number () const +{ + return get_uint_value("track_number"); +} + +uint32_t +SessionMetadata::total_tracks () const +{ + return get_uint_value("total_tracks"); +} + +ustring +SessionMetadata::genre () const +{ + return get_value("genre"); +} + +/*** Editing ***/ +void +SessionMetadata::set_comment (const ustring & v) +{ + set_value ("comment", v); +} + +void +SessionMetadata::set_copyright (const ustring & v) +{ + set_value ("copyright", v); +} + +void +SessionMetadata::set_isrc (const ustring & v) +{ + set_value ("isrc", v); +} + +void +SessionMetadata::set_year (uint32_t v) +{ + set_value ("year", v); +} + +void +SessionMetadata::set_grouping (const ustring & v) +{ + set_value ("grouping", v); +} + +void +SessionMetadata::set_title (const ustring & v) +{ + set_value ("title", v); +} + +void +SessionMetadata::set_subtitle (const ustring & v) +{ + set_value ("subtitle", v); +} + +void +SessionMetadata::set_artist (const ustring & v) +{ + set_value ("artist", v); +} + +void +SessionMetadata::set_album_artist (const ustring & v) +{ + set_value ("album_artist", v); +} + +void +SessionMetadata::set_lyricist (const ustring & v) +{ + set_value ("lyricist", v); +} + +void +SessionMetadata::set_composer (const ustring & v) +{ + set_value ("composer", v); +} + +void +SessionMetadata::set_conductor (const ustring & v) +{ + set_value ("conductor", v); +} + +void +SessionMetadata::set_remixer (const ustring & v) +{ + set_value ("remixer", v); +} + +void +SessionMetadata::set_arranger (const ustring & v) +{ + set_value ("arranger", v); +} + +void +SessionMetadata::set_engineer (const ustring & v) +{ + set_value ("engineer", v); +} + +void +SessionMetadata::set_producer (const ustring & v) +{ + set_value ("producer", v); +} + +void +SessionMetadata::set_dj_mixer (const ustring & v) +{ + set_value ("dj_mixer", v); +} + +void +SessionMetadata::set_mixer (const ustring & v) +{ + set_value ("mixer", v); +} + +void +SessionMetadata::set_album (const ustring & v) +{ + set_value ("album", v); +} + +void +SessionMetadata::set_compilation (const ustring & v) +{ + set_value ("compilation", v); +} + +void +SessionMetadata::set_disc_subtitle (const ustring & v) +{ + set_value ("disc_subtitle", v); +} + +void +SessionMetadata::set_disc_number (uint32_t v) +{ + set_value ("disc_number", v); +} + +void +SessionMetadata::set_total_discs (uint32_t v) +{ + set_value ("total_discs", v); +} + +void +SessionMetadata::set_track_number (uint32_t v) +{ + set_value ("track_number", v); +} + +void +SessionMetadata::set_total_tracks (uint32_t v) +{ + set_value ("total_tracks", v); +} + +void +SessionMetadata::set_genre (const ustring & v) +{ + set_value ("genre", v); +} |