fix bypassing plugins with sidechain i/o
[ardour.git] / libs / ardour / audio_track_importer.cc
index a831e480dbceafdf598d02dcd530575ae3eb0e3d..5280216d1b0c14c0335c9477284b2c9e8b6c5103 100644 (file)
@@ -24,8 +24,9 @@
 #include "ardour/audio_diskstream.h"
 #include "ardour/session.h"
 
-#include "pbd/failed_constructor.h"
+#include "pbd/controllable.h"
 #include "pbd/convert.h"
+#include "pbd/failed_constructor.h"
 
 #include <sstream>
 #include <algorithm>
@@ -39,8 +40,7 @@ using namespace ARDOUR;
 /*** AudioTrackImportHandler ***/
 
 AudioTrackImportHandler::AudioTrackImportHandler (XMLTree const & source, Session & session, AudioPlaylistImportHandler & pl_handler) :
-  ElementImportHandler (source, session),
-  pl_handler (pl_handler)
+  ElementImportHandler (source, session)
 {
        XMLNode const * root = source.root();
        XMLNode const * routes;
@@ -51,7 +51,7 @@ AudioTrackImportHandler::AudioTrackImportHandler (XMLTree const & source, Sessio
 
        XMLNodeList const & route_list = routes->children();
        for (XMLNodeList::const_iterator it = route_list.begin(); it != route_list.end(); ++it) {
-               const XMLProperty* type = (*it)->property("default-type");
+               XMLProperty const * type = (*it)->property("default-type");
                if ( (!type || type->value() == "audio") &&  ((*it)->property ("diskstream") != 0 || (*it)->property ("diskstream-id") != 0)) {
                        try {
                                elements.push_back (ElementPtr ( new AudioTrackImporter (source, session, *this, **it, pl_handler)));
@@ -222,6 +222,7 @@ AudioTrackImporter::get_info () const
        return name;
 }
 
+/** @return true if everything is ok */
 bool
 AudioTrackImporter::_prepare_move ()
 {
@@ -246,7 +247,21 @@ AudioTrackImporter::_prepare_move ()
                }
                name = rename_pair.second;
        }
-       xml_track.child ("IO")->property ("name")->set_value (name);
+
+       XMLNode* c = xml_track.child ("IO");
+       if (!c) {
+               error << _("badly-formed XML in imported track") << endmsg;
+               return false;
+       }
+
+       XMLProperty * p = c->property ("name");
+       if (!p) {
+               error << _("badly-formed XML in imported track") << endmsg;
+               return false;
+       }
+
+       p->set_value (name);
+
        track_handler.add_name (name);
 
        return true;
@@ -266,7 +281,7 @@ AudioTrackImporter::_move ()
 
        boost::shared_ptr<XMLSharedNodeList> ds_node_list;
        string xpath = "/Session/DiskStreams/AudioDiskstream[@id='" + old_ds_id.to_s() + "']";
-       ds_node_list = source.root()->find (xpath);
+       ds_node_list = source.find (xpath);
 
        if (ds_node_list->size() != 1) {
                error << string_compose (_("Error Importing Audio track %1"), name) << endmsg;
@@ -274,7 +289,9 @@ AudioTrackImporter::_move ()
        }
 
        boost::shared_ptr<XMLNode> ds_node = ds_node_list->front();
-       ds_node->property ("id")->set_value (new_ds_id.to_s());
+       XMLProperty * p = ds_node->property (X_("id"));
+       assert (p);
+       p->set_value (new_ds_id.to_s());
 
        boost::shared_ptr<Diskstream> new_ds (new AudioDiskstream (session, *ds_node));
        new_ds->set_name (name);