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"
27 using namespace ARDOUR;
29 SessionMetadata *SessionMetadata::_metadata = NULL; //singleton instance
31 SessionMetadata::SessionMetadata ()
34 map.insert (Property ("comment", ""));
35 map.insert (Property ("copyright", ""));
36 map.insert (Property ("isrc", ""));
37 map.insert (Property ("year", ""));
39 /*** Title and friends ***/
40 map.insert (Property ("grouping", ""));
41 map.insert (Property ("title", ""));
42 map.insert (Property ("subtitle", ""));
45 map.insert (Property ("artist", ""));
46 map.insert (Property ("album_artist", ""));
47 map.insert (Property ("lyricist", ""));
48 map.insert (Property ("composer", ""));
49 map.insert (Property ("conductor", ""));
50 map.insert (Property ("remixer", ""));
51 map.insert (Property ("arranger", ""));
52 map.insert (Property ("engineer", ""));
53 map.insert (Property ("producer", ""));
54 map.insert (Property ("dj_mixer", ""));
55 map.insert (Property ("mixer", ""));
56 //map.insert (Property ("performers", "")); // Multiple values [instrument]
58 /*** Education... ***/
59 map.insert (Property ("instructor", ""));
60 map.insert (Property ("course", ""));
63 map.insert (Property ("album", ""));
64 map.insert (Property ("compilation", ""));
65 map.insert (Property ("disc_subtitle", ""));
66 map.insert (Property ("disc_number", ""));
67 map.insert (Property ("total_discs", ""));
68 map.insert (Property ("track_number", ""));
69 map.insert (Property ("total_tracks", ""));
72 map.insert (Property ("genre", ""));
73 //map.insert (Property ("mood", ""));
74 //map.insert (Property ("bpm", ""));
77 //map.insert (Property ("lyrics", ""));
78 //map.insert (Property ("media", ""));
79 //map.insert (Property ("label", ""));
80 //map.insert (Property ("barcode", ""));
81 //map.insert (Property ("encoded_by", ""));
82 //map.insert (Property ("catalog_number", ""));
84 /*** Sorting orders ***/
85 //map.insert (Property ("album_sort", ""));
86 //map.insert (Property ("album_artist_sort", ""));
87 //map.insert (Property ("artist_sort", ""));
88 //map.insert (Property ("title_sort", ""));
91 user_map.insert (Property ("user_name", ""));
92 user_map.insert (Property ("user_email", ""));
93 user_map.insert (Property ("user_web", ""));
94 user_map.insert (Property ("user_organization", ""));
95 user_map.insert (Property ("user_country", ""));
98 SessionMetadata::~SessionMetadata ()
104 SessionMetadata::get_xml (const string & name)
106 string value = get_value (name);
111 XMLNode val ("value", value);
112 XMLNode * node = new XMLNode (name);
113 node->add_child_copy (val);
119 SessionMetadata::get_value (const string & name) const
121 PropertyMap::const_iterator it = map.find (name);
122 if (it == map.end()) {
123 it = user_map.find (name);
124 if (it == user_map.end()) {
125 // Should not be reached!
126 std::cerr << "Programming error in SessionMetadata::get_value" << std::endl;
135 SessionMetadata::get_uint_value (const string & name) const
137 return atoi (get_value (name).c_str());
141 SessionMetadata::set_value (const string & name, const string & value)
143 PropertyMap::iterator it = map.find (name);
144 if (it == map.end()) {
145 it = user_map.find (name);
146 if (it == user_map.end()) {
147 // Should not be reached!
148 std::cerr << "Programming error in SessionMetadata::set_value" << std::endl;
157 SessionMetadata::set_value (const string & name, uint32_t value)
159 std::ostringstream oss;
161 if (oss.str().compare("0")) {
162 set_value (name, oss.str());
164 set_value (name, "");
168 /*** Serialization ***/
170 SessionMetadata::get_state ()
172 XMLNode * node = new XMLNode ("Metadata");
175 for (PropertyMap::const_iterator it = map.begin(); it != map.end(); ++it) {
176 if ((prop = get_xml (it->first))) {
177 node->add_child_nocopy (*prop);
185 SessionMetadata::set_state (const XMLNode & state, int /*version_num*/)
187 const XMLNodeList & children = state.children();
192 for (XMLNodeConstIterator it = children.begin(); it != children.end(); it++) {
194 if (node->children().empty()) {
199 node = *node->children().begin();
200 value = node->content();
202 set_value (name, value);
210 SessionMetadata::get_user_state ()
212 XMLNode * node = new XMLNode ("Metadata");
215 for (PropertyMap::const_iterator it = user_map.begin(); it != user_map.end(); ++it) {
216 if ((prop = get_xml (it->first))) {
217 node->add_child_nocopy (*prop);
226 SessionMetadata::comment () const
228 return get_value("comment");
232 SessionMetadata::copyright () const
234 return get_value("copyright");
238 SessionMetadata::isrc () const
240 return get_value("isrc");
244 SessionMetadata::year () const
246 return get_uint_value("year");
250 SessionMetadata::grouping () const
252 return get_value("grouping");
256 SessionMetadata::title () const
258 return get_value("title");
262 SessionMetadata::subtitle () const
264 return get_value("subtitle");
268 SessionMetadata::artist () const
270 return get_value("artist");
274 SessionMetadata::album_artist () const
276 return get_value("album_artist");
280 SessionMetadata::lyricist () const
282 return get_value("lyricist");
286 SessionMetadata::composer () const
288 return get_value("composer");
292 SessionMetadata::conductor () const
294 return get_value("conductor");
298 SessionMetadata::remixer () const
300 return get_value("remixer");
304 SessionMetadata::arranger () const
306 return get_value("arranger");
310 SessionMetadata::engineer () const
312 return get_value("engineer");
316 SessionMetadata::producer () const
318 return get_value("producer");
322 SessionMetadata::dj_mixer () const
324 return get_value("dj_mixer");
328 SessionMetadata::mixer () const
330 return get_value("mixer");
334 SessionMetadata::album () const
336 return get_value("album");
340 SessionMetadata::compilation () const
342 return get_value("compilation");
346 SessionMetadata::disc_subtitle () const
348 return get_value("disc_subtitle");
352 SessionMetadata::disc_number () const
354 return get_uint_value("disc_number");
358 SessionMetadata::total_discs () const
360 return get_uint_value("total_discs");
364 SessionMetadata::track_number () const
366 return get_uint_value("track_number");
370 SessionMetadata::total_tracks () const
372 return get_uint_value("total_tracks");
376 SessionMetadata::genre () const
378 return get_value("genre");
382 SessionMetadata::instructor () const
384 return get_value("instructor");
388 SessionMetadata::course () const
390 return get_value("course");
395 SessionMetadata::user_name () const
397 return get_value("user_name");
401 SessionMetadata::user_email () const
403 return get_value("user_email");
407 SessionMetadata::user_web () const
409 return get_value("user_web");
413 SessionMetadata::organization () const
415 return get_value("user_organization");
419 SessionMetadata::country () const
421 return get_value("user_country");
428 SessionMetadata::set_comment (const string & v)
430 set_value ("comment", v);
434 SessionMetadata::set_copyright (const string & v)
436 set_value ("copyright", v);
440 SessionMetadata::set_isrc (const string & v)
442 set_value ("isrc", v);
446 SessionMetadata::set_year (uint32_t v)
448 set_value ("year", v);
452 SessionMetadata::set_grouping (const string & v)
454 set_value ("grouping", v);
458 SessionMetadata::set_title (const string & v)
460 set_value ("title", v);
464 SessionMetadata::set_subtitle (const string & v)
466 set_value ("subtitle", v);
470 SessionMetadata::set_artist (const string & v)
472 set_value ("artist", v);
476 SessionMetadata::set_album_artist (const string & v)
478 set_value ("album_artist", v);
482 SessionMetadata::set_lyricist (const string & v)
484 set_value ("lyricist", v);
488 SessionMetadata::set_composer (const string & v)
490 set_value ("composer", v);
494 SessionMetadata::set_conductor (const string & v)
496 set_value ("conductor", v);
500 SessionMetadata::set_remixer (const string & v)
502 set_value ("remixer", v);
506 SessionMetadata::set_arranger (const string & v)
508 set_value ("arranger", v);
512 SessionMetadata::set_engineer (const string & v)
514 set_value ("engineer", v);
518 SessionMetadata::set_producer (const string & v)
520 set_value ("producer", v);
524 SessionMetadata::set_dj_mixer (const string & v)
526 set_value ("dj_mixer", v);
530 SessionMetadata::set_mixer (const string & v)
532 set_value ("mixer", v);
536 SessionMetadata::set_album (const string & v)
538 set_value ("album", v);
542 SessionMetadata::set_compilation (const string & v)
544 set_value ("compilation", v);
548 SessionMetadata::set_disc_subtitle (const string & v)
550 set_value ("disc_subtitle", v);
554 SessionMetadata::set_disc_number (uint32_t v)
556 set_value ("disc_number", v);
560 SessionMetadata::set_total_discs (uint32_t v)
562 set_value ("total_discs", v);
566 SessionMetadata::set_track_number (uint32_t v)
568 set_value ("track_number", v);
572 SessionMetadata::set_total_tracks (uint32_t v)
574 set_value ("total_tracks", v);
578 SessionMetadata::set_genre (const string & v)
580 set_value ("genre", v);
584 SessionMetadata::set_instructor (const string & v)
586 set_value ("instructor", v);
590 SessionMetadata::set_course (const string & v)
592 set_value ("course", v);
596 SessionMetadata::set_user_name (const string & v)
598 set_value ("user_name", v);
602 SessionMetadata::set_user_email (const string & v)
604 set_value ("user_email", v);
608 SessionMetadata::set_user_web (const string & v)
610 set_value ("user_web", v);
614 SessionMetadata::set_organization (const string & v)
616 set_value ("user_organization", v);
619 SessionMetadata::set_country (const string & v)
621 set_value ("user_country", v);