summaryrefslogtreecommitdiff
path: root/libs/ardour/session_state.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2017-08-17 10:33:38 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2017-09-18 11:40:53 -0400
commitac8dc40035ea0bab5d024515a3ea3704c4d4b691 (patch)
treee41221e9fc47d1b6a5361ab6debc151ec63c687d /libs/ardour/session_state.cc
parentde7963941d46cbdaff2fb136a68df7a338dc5455 (diff)
fix for loading older sessions, where the rest for "is-track" was "has-diskstream", rather than "has-playlist"
Diffstat (limited to 'libs/ardour/session_state.cc')
-rw-r--r--libs/ardour/session_state.cc54
1 files changed, 54 insertions, 0 deletions
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index 19bfc4c41c..28a0725da8 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -1711,8 +1711,11 @@ Session::load_routes (const XMLNode& node, int version)
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
boost::shared_ptr<Route> route;
+
if (version < 3000) {
route = XMLRouteFactory_2X (**niter, version);
+ } else if (version < 5000) {
+ route = XMLRouteFactory_3X (**niter, version);
} else {
route = XMLRouteFactory (**niter, version);
}
@@ -1783,6 +1786,57 @@ Session::XMLRouteFactory (const XMLNode& node, int version)
PresentationInfo::Flag flags = PresentationInfo::get_flags (node);
boost::shared_ptr<Route> r (new Route (*this, X_("toBeResetFroXML"), flags));
+
+ if (r->init () == 0 && r->set_state (node, version) == 0) {
+ BOOST_MARK_ROUTE (r);
+ ret = r;
+ }
+ }
+
+ return ret;
+}
+
+boost::shared_ptr<Route>
+Session::XMLRouteFactory_3X (const XMLNode& node, int version)
+{
+ boost::shared_ptr<Route> ret;
+
+ if (node.name() != "Route") {
+ return ret;
+ }
+
+ XMLNode* ds_child = find_named_node (node, X_("Diskstream"));
+
+ DataType type = DataType::AUDIO;
+ node.get_property("default-type", type);
+
+ assert (type != DataType::NIL);
+
+ if (ds_child) {
+
+ boost::shared_ptr<Track> track;
+
+ if (type == DataType::AUDIO) {
+ track.reset (new AudioTrack (*this, X_("toBeResetFroXML")));
+ } else {
+ track.reset (new MidiTrack (*this, X_("toBeResetFroXML")));
+ }
+
+ if (track->init()) {
+ return ret;
+ }
+
+ if (track->set_state (node, version)) {
+ return ret;
+ }
+
+ BOOST_MARK_TRACK (track);
+ ret = track;
+
+ } else {
+ PresentationInfo::Flag flags = PresentationInfo::get_flags (node);
+ boost::shared_ptr<Route> r (new Route (*this, X_("toBeResetFroXML"), flags));
+
if (r->init () == 0 && r->set_state (node, version) == 0) {
BOOST_MARK_ROUTE (r);
ret = r;