don't double-load NestedSource nodes, which are listed both forthe parent/root region and all children; even better, don't list them twice anyway - just for the whole file parent/root region

git-svn-id: svn://localhost/ardour2/branches/3.0@9761 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2011-06-22 22:46:31 +00:00
parent ae3c7234e7
commit 7181a20dc6
3 changed files with 26 additions and 6 deletions

View File

@ -1207,7 +1207,11 @@ Region::state ()
node->add_property (buf2, buf);
}
if (max_source_level() > 0) {
/* Only store nested sources for the whole-file region that acts
as the parent/root of all regions using it.
*/
if (_whole_file && max_source_level() > 0) {
XMLNode* nested_node = new XMLNode (X_("NestedSource"));

View File

@ -1660,11 +1660,26 @@ Session::load_nested_sources (const XMLNode& node)
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
if ((*niter)->name() == "Source") {
try {
SourceFactory::create (*this, **niter, true);
/* it may already exist, so don't recreate it unnecessarily
*/
XMLProperty* prop = (*niter)->property (X_("id"));
if (!prop) {
error << _("Nested source has no ID info in session state file! (ignored)") << endmsg;
continue;
}
catch (failed_constructor& err) {
error << string_compose (_("Cannot reconstruct nested source for region %1"), name()) << endmsg;
ID source_id (prop->value());
if (!source_by_id (source_id)) {
try {
SourceFactory::create (*this, **niter, true);
}
catch (failed_constructor& err) {
error << string_compose (_("Cannot reconstruct nested source for region %1"), name()) << endmsg;
}
}
}
}

View File

@ -155,12 +155,13 @@ SourceFactory::create (Session& s, const XMLNode& node, bool defer_peaks)
try {
boost::shared_ptr<AudioPlaylistSource> ap (new AudioPlaylistSource (s, node));
if (setup_peakfile (ap, true)) {
return boost::shared_ptr<Source>();
}
ap->check_for_analysis_data_on_disk ();
SourceCreated (ap);
return ap;