summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2020-01-30 01:08:57 +0100
committerRobin Gareus <robin@gareus.org>2020-01-30 01:08:57 +0100
commit6452f62d64cfc473a4fce9a027d31ed56368d8cb (patch)
tree56054730502666d0ba9ac8f2324342adb8911244 /libs
parent51d2bb36ceec7386370f1999952b04bec291f312 (diff)
Cont'd work on loading old route templates
This builds on top of 51d2bb: * v6 routes templates/states have a version per <Route> * older route-states are assumed to be from ardour-5 Stateful::loading_state_version 3002, unless specified otherwise
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/route.cc9
-rw-r--r--libs/ardour/session.cc18
-rw-r--r--libs/ardour/track.cc2
3 files changed, 22 insertions, 7 deletions
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index 0b684f560c..a358201b80 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -2494,9 +2494,13 @@ Route::state (bool save_template)
std::string modified_with = string_compose ("%1 %2", PROGRAM_NAME, revision);
child->set_property("modified-with", modified_with);
- node->set_property("version", CURRENT_SESSION_FILE_VERSION);
}
+ /* This is needed for templates and when duplicating routes, in which case
+ * the route-state is directly passed to new_route_from_template().
+ */
+ node->set_property("version", CURRENT_SESSION_FILE_VERSION);
+
node->set_property (X_("id"), id ());
node->set_property (X_("name"), name());
node->set_property (X_("default-type"), _default_type);
@@ -2590,9 +2594,6 @@ Route::state (bool save_template)
int
Route::set_state (const XMLNode& node, int version)
{
- /* when loading a template, use the version of the Route (if available) */
- node.get_property (X_("version"), version);
-
if (version < 3000) {
return set_state_2X (node, version);
}
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc
index c88d85cd77..82b0e14073 100644
--- a/libs/ardour/session.cc
+++ b/libs/ardour/session.cc
@@ -2948,7 +2948,23 @@ Session::new_route_from_template (uint32_t how_many, PresentationInfo::order_t i
*/
node_copy.remove_node_and_delete (X_("Controllable"), X_("name"), X_("solo"));
- boost::shared_ptr<Route> route (XMLRouteFactory (node_copy, Stateful::loading_state_version));
+ /* New v6 templates do have a version in the Route-Template,
+ * we assume that all older, unversioned templates are
+ * from Ardour 5.x
+ * when Stateful::loading_state_version was 3002
+ */
+ int version = 3002;
+ node.get_property (X_("version"), version);
+
+ boost::shared_ptr<Route> route;
+
+ if (version < 3000) {
+ route = XMLRouteFactory_2X (node_copy, version);
+ } else if (version < 5000) {
+ route = XMLRouteFactory_3X (node_copy, version);
+ } else {
+ route = XMLRouteFactory (node_copy, version);
+ }
if (route == 0) {
error << _("Session: cannot create track/bus from template description") << endmsg;
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 482c17c270..a4c26a7ffb 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -177,8 +177,6 @@ Track::set_state (const XMLNode& node, int version)
return -1;
}
- node.get_property (X_("version"), version);
-
if (version >= 3000 && version < 6000) {
if (XMLNode* ds_node = find_named_node (node, "Diskstream")) {
std::string name;