summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/session.h4
-rw-r--r--libs/ardour/ardour/session_configuration_vars.h2
-rw-r--r--libs/ardour/ardour/session_metadata.h29
-rw-r--r--libs/ardour/broadcast_info.cc5
-rw-r--r--libs/ardour/rc_configuration.cc7
-rw-r--r--libs/ardour/session.cc2
-rw-r--r--libs/ardour/session_metadata.cc137
-rw-r--r--libs/ardour/session_state.cc8
8 files changed, 167 insertions, 27 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h
index 5becfd9a8f..6c7a9af844 100644
--- a/libs/ardour/ardour/session.h
+++ b/libs/ardour/ardour/session.h
@@ -777,8 +777,6 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
boost::shared_ptr<PBD::Controllable> solo_cut_control() const;
- SessionMetadata & metadata () { return *_metadata; }
-
SessionConfiguration config;
bool exporting () const {
@@ -1466,8 +1464,6 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
static bool _disable_all_loaded_plugins;
- SessionMetadata * _metadata;
-
mutable bool have_looped; ///< Used in ::audible_frame(*)
void update_have_rec_enabled_track ();
diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h
index 87b317d3e8..a6147f9140 100644
--- a/libs/ardour/ardour/session_configuration_vars.h
+++ b/libs/ardour/ardour/session_configuration_vars.h
@@ -45,8 +45,6 @@ CONFIG_VARIABLE (TimecodeFormat, timecode_format, "timecode-format", timecode_30
CONFIG_VARIABLE_SPECIAL(std::string, raid_path, "raid-path", "", path_expand)
CONFIG_VARIABLE_SPECIAL(std::string, audio_search_path, "audio-search-path", "", search_path_expand)
CONFIG_VARIABLE_SPECIAL(std::string, midi_search_path, "midi-search-path", "", search_path_expand)
-CONFIG_VARIABLE (std::string, bwf_country_code, "bwf-country-code", "US")
-CONFIG_VARIABLE (std::string, bwf_organization_code, "bwf-organization-code", "US")
CONFIG_VARIABLE (std::string, auditioner_output_left, "auditioner-output-left", "default")
CONFIG_VARIABLE (std::string, auditioner_output_right, "auditioner-output-right", "default")
CONFIG_VARIABLE (bool, timecode_source_is_synced, "timecode-source-is-synced", true)
diff --git a/libs/ardour/ardour/session_metadata.h b/libs/ardour/ardour/session_metadata.h
index 296bf6243f..c4341dbc61 100644
--- a/libs/ardour/ardour/session_metadata.h
+++ b/libs/ardour/ardour/session_metadata.h
@@ -37,6 +37,9 @@ namespace ARDOUR {
class SessionMetadata : public PBD::StatefulDestructible
{
public:
+ //singleton instance:
+ static SessionMetadata *Metadata() { if (_metadata == NULL) _metadata = new SessionMetadata(); return _metadata; }
+
SessionMetadata ();
~SessionMetadata ();
@@ -72,6 +75,15 @@ class SessionMetadata : public PBD::StatefulDestructible
std::string genre () const;
+ std::string instructor () const;
+ std::string course () const;
+
+ std::string user_name () const;
+ std::string user_email () const;
+ std::string user_web () const;
+ std::string organization () const;
+ std::string country () const;
+
/*** Editing ***/
void set_comment (const std::string &);
void set_copyright (const std::string &);
@@ -104,15 +116,28 @@ class SessionMetadata : public PBD::StatefulDestructible
void set_genre (const std::string &);
+ void set_instructor (const std::string &);
+ void set_course (const std::string &);
+
+ void set_user_name (const std::string &);
+ void set_user_email (const std::string &);
+ void set_user_web (const std::string &);
+ void set_organization (const std::string &);
+ void set_country (const std::string &);
+
/*** Serialization ***/
- XMLNode & get_state ();
- int set_state (const XMLNode &, int version);
+ XMLNode & get_state (); //serializes stuff in the map, to be stored in session file
+ XMLNode & get_user_state (); //serializes stuff in the user_map, to be stored in user's config file
+ int set_state (const XMLNode &, int version_num);
private:
+ static SessionMetadata *_metadata; //singleton instance
+
typedef std::pair<std::string, std::string> Property;
typedef std::map<std::string, std::string> PropertyMap;
PropertyMap map;
+ PropertyMap user_map;
XMLNode * get_xml (const std::string & name);
diff --git a/libs/ardour/broadcast_info.cc b/libs/ardour/broadcast_info.cc
index cdc63cae11..af760629ff 100644
--- a/libs/ardour/broadcast_info.cc
+++ b/libs/ardour/broadcast_info.cc
@@ -28,6 +28,7 @@
#include "ardour/svn_revision.h"
#include "ardour/ardour.h"
#include "ardour/session.h"
+#include "ardour/session_metadata.h"
#include "pbd/convert.h"
@@ -94,8 +95,8 @@ BroadcastInfo::set_originator_ref_from_session (Session const & session)
serial_number << "ARDOUR" << "r" << std::setfill('0') << std::right << std::setw(5) << svn_revision;
snprintf_bounded_null_filled (info->originator_reference, sizeof (info->originator_reference), "%2s%3s%12s%02d%02d%02d%9d",
- session.config.get_bwf_country_code().c_str(),
- session.config.get_bwf_organization_code().c_str(),
+ SessionMetadata::Metadata()->country().c_str(),
+ SessionMetadata::Metadata()->organization().c_str(),
serial_number.str().c_str(),
_time.tm_hour,
_time.tm_min,
diff --git a/libs/ardour/rc_configuration.cc b/libs/ardour/rc_configuration.cc
index 8c4650b2e6..d5bfc7a9a8 100644
--- a/libs/ardour/rc_configuration.cc
+++ b/libs/ardour/rc_configuration.cc
@@ -36,6 +36,7 @@
#include "ardour/audio_diskstream.h"
#include "ardour/control_protocol_manager.h"
#include "ardour/filesystem_paths.h"
+#include "ardour/session_metadata.h"
#include "i18n.h"
@@ -208,6 +209,8 @@ RCConfiguration::get_state ()
root->add_child_nocopy (get_variables ());
+ root->add_child_nocopy (SessionMetadata::Metadata()->get_user_state());
+
if (_extra_xml) {
root->add_child_copy (*_extra_xml);
}
@@ -239,7 +242,7 @@ RCConfiguration::get_variables ()
}
int
-RCConfiguration::set_state (const XMLNode& root, int /*version*/)
+RCConfiguration::set_state (const XMLNode& root, int version)
{
if (root.name() != "Ardour") {
return -1;
@@ -263,6 +266,8 @@ RCConfiguration::set_state (const XMLNode& root, int /*version*/)
if (node->name() == "Config") {
set_variables (*node);
+ } else if (node->name() == "Metadata") {
+ SessionMetadata::Metadata()->set_state (*node, version);
} else if (node->name() == ControlProtocolManager::state_node_name) {
_control_protocol_state = new XMLNode (*node);
} else if (node->name() == MIDI::Port::state_node_name) {
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index 152113aa83..a7fc6740c2 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -94,7 +94,6 @@
#include "ardour/session.h"
#include "ardour/session_directory.h"
#include "ardour/session_directory.h"
-#include "ardour/session_metadata.h"
#include "ardour/session_playlists.h"
#include "ardour/slave.h"
#include "ardour/smf_source.h"
@@ -162,7 +161,6 @@ Session::Session (AudioEngine &eng,
, click_data (0)
, click_emphasis_data (0)
, main_outs (0)
- , _metadata (new SessionMetadata())
, _have_rec_enabled_track (false)
, _suspend_timecode_transmission (0)
{
diff --git a/libs/ardour/session_metadata.cc b/libs/ardour/session_metadata.cc
index 51dba7ceff..8e2a4ca057 100644
--- a/libs/ardour/session_metadata.cc
+++ b/libs/ardour/session_metadata.cc
@@ -26,6 +26,8 @@ using namespace std;
using namespace Glib;
using namespace ARDOUR;
+SessionMetadata *SessionMetadata::_metadata = NULL; //singleton instance
+
SessionMetadata::SessionMetadata ()
{
/*** General ***/
@@ -53,6 +55,10 @@ SessionMetadata::SessionMetadata ()
map.insert (Property ("mixer", ""));
//map.insert (Property ("performers", "")); // Multiple values [instrument]
+ /*** Education... ***/
+ map.insert (Property ("instructor", ""));
+ map.insert (Property ("course", ""));
+
/*** Album info ***/
map.insert (Property ("album", ""));
map.insert (Property ("compilation", ""));
@@ -79,7 +85,14 @@ SessionMetadata::SessionMetadata ()
//map.insert (Property ("album_sort", ""));
//map.insert (Property ("album_artist_sort", ""));
//map.insert (Property ("artist_sort", ""));
- //map.insert (Property ("title_sort", ""));
+ //map.insert (Property ("title_sort", ""));\
+
+ /*** Globals ***/
+ user_map.insert (Property ("user_name", ""));
+ user_map.insert (Property ("user_email", ""));
+ user_map.insert (Property ("user_web", ""));
+ user_map.insert (Property ("user_organization", ""));
+ user_map.insert (Property ("user_country", ""));
}
SessionMetadata::~SessionMetadata ()
@@ -107,9 +120,12 @@ SessionMetadata::get_value (const string & 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 "";
+ it = user_map.find (name);
+ if (it == user_map.end()) {
+ // Should not be reached!
+ std::cerr << "Programming error in SessionMetadata::get_value" << std::endl;
+ return "";
+ }
}
return it->second;
@@ -126,9 +142,12 @@ SessionMetadata::set_value (const string & name, const string & 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 = user_map.find (name);
+ if (it == user_map.end()) {
+ // Should not be reached!
+ std::cerr << "Programming error in SessionMetadata::set_value" << std::endl;
+ return;
+ }
}
it->second = value;
@@ -163,7 +182,7 @@ SessionMetadata::get_state ()
}
int
-SessionMetadata::set_state (const XMLNode & state, int /*version*/)
+SessionMetadata::set_state (const XMLNode & state, int version_num)
{
const XMLNodeList & children = state.children();
string name;
@@ -186,6 +205,22 @@ SessionMetadata::set_state (const XMLNode & state, int /*version*/)
return 0;
}
+
+XMLNode &
+SessionMetadata::get_user_state ()
+{
+ XMLNode * node = new XMLNode ("Metadata");
+ XMLNode * prop;
+
+ for (PropertyMap::const_iterator it = user_map.begin(); it != user_map.end(); ++it) {
+ if ((prop = get_xml (it->first))) {
+ node->add_child_nocopy (*prop);
+ }
+ }
+
+ return *node;
+}
+
/*** Accessing ***/
string
SessionMetadata::comment () const
@@ -343,6 +378,51 @@ SessionMetadata::genre () const
return get_value("genre");
}
+string
+SessionMetadata::instructor () const
+{
+ return get_value("instructor");
+}
+
+string
+SessionMetadata::course () const
+{
+ return get_value("course");
+}
+
+
+string
+SessionMetadata::user_name () const
+{
+ return get_value("user_name");
+}
+
+string
+SessionMetadata::user_email () const
+{
+ return get_value("user_email");
+}
+
+string
+SessionMetadata::user_web () const
+{
+ return get_value("user_web");
+}
+
+string
+SessionMetadata::organization () const
+{
+ return get_value("user_organization");
+}
+
+string
+SessionMetadata::country () const
+{
+ return get_value("user_country");
+}
+
+
+
/*** Editing ***/
void
SessionMetadata::set_comment (const string & v)
@@ -499,3 +579,44 @@ SessionMetadata::set_genre (const string & v)
{
set_value ("genre", v);
}
+
+void
+SessionMetadata::set_instructor (const string & v)
+{
+ set_value ("instructor", v);
+}
+
+void
+SessionMetadata::set_course (const string & v)
+{
+ set_value ("course", v);
+}
+
+void
+SessionMetadata::set_user_name (const string & v)
+{
+ set_value ("user_name", v);
+}
+
+void
+SessionMetadata::set_user_email (const string & v)
+{
+ set_value ("user_email", v);
+}
+
+void
+SessionMetadata::set_user_web (const string & v)
+{
+ set_value ("user_web", v);
+}
+
+void
+SessionMetadata::set_organization (const string & v)
+{
+ set_value ("user_organization", v);
+}
+void
+SessionMetadata::set_country (const string & v)
+{
+ set_value ("user_country", v);
+}
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index 218f70cd5b..efde3e2f4e 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -566,10 +566,6 @@ Session::create (const string& session_template, BusProfile* bus_profile)
}
- /* Instantiate metadata */
-
- _metadata = new SessionMetadata ();
-
/* set initial start + end point */
_state_of_the_state = Clean;
@@ -1058,7 +1054,7 @@ Session::state(bool full_state)
node->add_child_nocopy (config.get_variables ());
- node->add_child_nocopy (_metadata->get_state());
+ node->add_child_nocopy (ARDOUR::SessionMetadata::Metadata()->get_state());
child = node->add_child ("Sources");
@@ -1275,7 +1271,7 @@ Session::set_state (const XMLNode& node, int version)
if (version >= 3000) {
if ((child = find_named_node (node, "Metadata")) == 0) {
warning << _("Session: XML state has no metadata section") << endmsg;
- } else if (_metadata->set_state (*child, version)) {
+ } else if ( ARDOUR::SessionMetadata::Metadata()->set_state (*child, version) ) {
goto out;
}
}