2 Copyright (C) 2008 Paul Davis
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2 of the License, or (at your option)
10 This program is distributed in the hope that it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 You should have received a copy of the GNU General Public License along
16 with this program; if not, write to the Free Software Foundation, Inc.,
17 675 Mass Ave, Cambridge, MA 02139, USA.
20 #include "ardour/session_metadata.h"
25 using namespace ARDOUR;
28 SessionMetadata::SessionMetadata ()
31 map.insert (Property ("comment", ""));
32 map.insert (Property ("copyright", ""));
33 map.insert (Property ("isrc", ""));
34 map.insert (Property ("year", ""));
36 /*** Title and friends ***/
37 map.insert (Property ("grouping", ""));
38 map.insert (Property ("title", ""));
39 map.insert (Property ("subtitle", ""));
42 map.insert (Property ("artist", ""));
43 map.insert (Property ("album_artist", ""));
44 map.insert (Property ("lyricist", ""));
45 map.insert (Property ("composer", ""));
46 map.insert (Property ("conductor", ""));
47 map.insert (Property ("remixer", ""));
48 map.insert (Property ("arranger", ""));
49 map.insert (Property ("engineer", ""));
50 map.insert (Property ("producer", ""));
51 map.insert (Property ("dj_mixer", ""));
52 map.insert (Property ("mixer", ""));
53 //map.insert (Property ("performers", "")); // Multiple values [instrument]
56 map.insert (Property ("album", ""));
57 map.insert (Property ("compilation", ""));
58 map.insert (Property ("disc_subtitle", ""));
59 map.insert (Property ("disc_number", ""));
60 map.insert (Property ("total_discs", ""));
61 map.insert (Property ("track_number", ""));
62 map.insert (Property ("total_tracks", ""));
65 map.insert (Property ("genre", ""));
66 //map.insert (Property ("mood", ""));
67 //map.insert (Property ("bpm", ""));
70 //map.insert (Property ("lyrics", ""));
71 //map.insert (Property ("media", ""));
72 //map.insert (Property ("label", ""));
73 //map.insert (Property ("barcode", ""));
74 //map.insert (Property ("encoded_by", ""));
75 //map.insert (Property ("catalog_number", ""));
77 /*** Sorting orders ***/
78 //map.insert (Property ("album_sort", ""));
79 //map.insert (Property ("album_artist_sort", ""));
80 //map.insert (Property ("artist_sort", ""));
81 //map.insert (Property ("title_sort", ""));
84 SessionMetadata::~SessionMetadata ()
90 SessionMetadata::get_xml (const ustring & name)
92 ustring value = get_value (name);
97 XMLNode val ("value", value);
98 XMLNode * node = new XMLNode (name);
99 node->add_child_copy (val);
105 SessionMetadata::get_value (const ustring & name) const
107 PropertyMap::const_iterator it = map.find (name);
108 if (it == map.end()) {
109 // Should not be reached!
110 std::cerr << "Programming error in SessionMetadata::get_value" << std::endl;
118 SessionMetadata::get_uint_value (const ustring & name) const
120 return atoi (get_value (name).c_str());
124 SessionMetadata::set_value (const ustring & name, const ustring & value)
126 PropertyMap::iterator it = map.find (name);
127 if (it == map.end()) {
128 // Should not be reached!
129 std::cerr << "Programming error in SessionMetadata::set_value" << std::endl;
137 SessionMetadata::set_value (const ustring & name, uint32_t value)
139 std::ostringstream oss;
141 if (oss.str().compare("0")) {
142 set_value (name, oss.str());
144 set_value (name, "");
148 /*** Serialization ***/
150 SessionMetadata::get_state ()
152 XMLNode * node = new XMLNode ("Metadata");
155 for (PropertyMap::const_iterator it = map.begin(); it != map.end(); ++it) {
156 if ((prop = get_xml (it->first))) {
157 node->add_child_nocopy (*prop);
165 SessionMetadata::set_state (const XMLNode & state)
167 const XMLNodeList & children = state.children();
172 for (XMLNodeConstIterator it = children.begin(); it != children.end(); it++) {
174 if (node->children().empty()) {
179 node = *node->children().begin();
180 value = node->content();
182 set_value (name, value);
190 SessionMetadata::comment () const
192 return get_value("comment");
196 SessionMetadata::copyright () const
198 return get_value("copyright");
202 SessionMetadata::isrc () const
204 return get_value("isrc");
208 SessionMetadata::year () const
210 return get_uint_value("year");
214 SessionMetadata::grouping () const
216 return get_value("grouping");
220 SessionMetadata::title () const
222 return get_value("title");
226 SessionMetadata::subtitle () const
228 return get_value("subtitle");
232 SessionMetadata::artist () const
234 return get_value("artist");
238 SessionMetadata::album_artist () const
240 return get_value("album_artist");
244 SessionMetadata::lyricist () const
246 return get_value("lyricist");
250 SessionMetadata::composer () const
252 return get_value("composer");
256 SessionMetadata::conductor () const
258 return get_value("conductor");
262 SessionMetadata::remixer () const
264 return get_value("remixer");
268 SessionMetadata::arranger () const
270 return get_value("arranger");
274 SessionMetadata::engineer () const
276 return get_value("engineer");
280 SessionMetadata::producer () const
282 return get_value("producer");
286 SessionMetadata::dj_mixer () const
288 return get_value("dj_mixer");
292 SessionMetadata::mixer () const
294 return get_value("mixer");
298 SessionMetadata::album () const
300 return get_value("album");
304 SessionMetadata::compilation () const
306 return get_value("compilation");
310 SessionMetadata::disc_subtitle () const
312 return get_value("disc_subtitle");
316 SessionMetadata::disc_number () const
318 return get_uint_value("disc_number");
322 SessionMetadata::total_discs () const
324 return get_uint_value("total_discs");
328 SessionMetadata::track_number () const
330 return get_uint_value("track_number");
334 SessionMetadata::total_tracks () const
336 return get_uint_value("total_tracks");
340 SessionMetadata::genre () const
342 return get_value("genre");
347 SessionMetadata::set_comment (const ustring & v)
349 set_value ("comment", v);
353 SessionMetadata::set_copyright (const ustring & v)
355 set_value ("copyright", v);
359 SessionMetadata::set_isrc (const ustring & v)
361 set_value ("isrc", v);
365 SessionMetadata::set_year (uint32_t v)
367 set_value ("year", v);
371 SessionMetadata::set_grouping (const ustring & v)
373 set_value ("grouping", v);
377 SessionMetadata::set_title (const ustring & v)
379 set_value ("title", v);
383 SessionMetadata::set_subtitle (const ustring & v)
385 set_value ("subtitle", v);
389 SessionMetadata::set_artist (const ustring & v)
391 set_value ("artist", v);
395 SessionMetadata::set_album_artist (const ustring & v)
397 set_value ("album_artist", v);
401 SessionMetadata::set_lyricist (const ustring & v)
403 set_value ("lyricist", v);
407 SessionMetadata::set_composer (const ustring & v)
409 set_value ("composer", v);
413 SessionMetadata::set_conductor (const ustring & v)
415 set_value ("conductor", v);
419 SessionMetadata::set_remixer (const ustring & v)
421 set_value ("remixer", v);
425 SessionMetadata::set_arranger (const ustring & v)
427 set_value ("arranger", v);
431 SessionMetadata::set_engineer (const ustring & v)
433 set_value ("engineer", v);
437 SessionMetadata::set_producer (const ustring & v)
439 set_value ("producer", v);
443 SessionMetadata::set_dj_mixer (const ustring & v)
445 set_value ("dj_mixer", v);
449 SessionMetadata::set_mixer (const ustring & v)
451 set_value ("mixer", v);
455 SessionMetadata::set_album (const ustring & v)
457 set_value ("album", v);
461 SessionMetadata::set_compilation (const ustring & v)
463 set_value ("compilation", v);
467 SessionMetadata::set_disc_subtitle (const ustring & v)
469 set_value ("disc_subtitle", v);
473 SessionMetadata::set_disc_number (uint32_t v)
475 set_value ("disc_number", v);
479 SessionMetadata::set_total_discs (uint32_t v)
481 set_value ("total_discs", v);
485 SessionMetadata::set_track_number (uint32_t v)
487 set_value ("track_number", v);
491 SessionMetadata::set_total_tracks (uint32_t v)
493 set_value ("total_tracks", v);
497 SessionMetadata::set_genre (const ustring & v)
499 set_value ("genre", v);