From ac8dc40035ea0bab5d024515a3ea3704c4d4b691 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 17 Aug 2017 10:33:38 -0400 Subject: fix for loading older sessions, where the rest for "is-track" was "has-diskstream", rather than "has-playlist" --- libs/ardour/ardour/session.h | 1 + libs/ardour/session_state.cc | 54 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) (limited to 'libs/ardour') diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 869a2d7230..02534c682f 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -1747,6 +1747,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop boost::shared_ptr XMLRouteFactory (const XMLNode&, int); boost::shared_ptr XMLRouteFactory_2X (const XMLNode&, int); + boost::shared_ptr XMLRouteFactory_3X (const XMLNode&, int); void route_processors_changed (RouteProcessorChange); 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; + if (version < 3000) { route = XMLRouteFactory_2X (**niter, version); + } else if (version < 5000) { + route = XMLRouteFactory_3X (**niter, version); } else { route = XMLRouteFactory (**niter, version); } @@ -1779,6 +1782,57 @@ Session::XMLRouteFactory (const XMLNode& node, int version) BOOST_MARK_TRACK (track); ret = track; + } else { + PresentationInfo::Flag flags = PresentationInfo::get_flags (node); + boost::shared_ptr 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 +Session::XMLRouteFactory_3X (const XMLNode& node, int version) +{ + boost::shared_ptr 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; + + 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 r (new Route (*this, X_("toBeResetFroXML"), flags)); -- cgit v1.2.3