Fixes to get legacy 2.x sends working.
[ardour.git] / libs / ardour / io_processor.cc
index 9802c8333020dc8b2704b5d6cefb28e6a8aa54c0..08530b924ce8dfa8cca5ceabcc78ca7390f96ac6 100644 (file)
@@ -73,26 +73,40 @@ int
 IOProcessor::set_state (const XMLNode& node)
 {
        const XMLProperty *prop;
+       const XMLNode *io_node = 0;
 
        Processor::set_state(node);
 
        XMLNodeList nlist = node.children();
        XMLNodeIterator niter;
-       bool have_io = false;
 
        for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
                if ((*niter)->name() == IO::state_node_name) {
-                       have_io = true;
-                       _io->set_state(**niter);
-
-                       // legacy sessions: use IO name
-                       if ((prop = node.property ("name")) == 0) {
-                               set_name(_io->name());
+                       io_node = (*niter);
+                       break;
+               } else if ((*niter)->name() == "Redirect") {
+                       XMLNodeList rlist = (*niter)->children();
+                       XMLNodeIterator riter;
+
+                       for (riter = rlist.begin(); riter != rlist.end(); ++riter) {
+                               if ( (*riter)->name() == IO::state_node_name) {
+                                       warning << _("Found legacy IO in a redirect") << endmsg;
+                                       io_node = (*riter);
+                                       break;
+                               }
                        }
                }
        }
 
-       if (!have_io) {
+       if (io_node) {
+               _io->set_state(*io_node);
+
+               // legacy sessions: use IO name
+               if ((prop = node.property ("name")) == 0) {
+                       set_name(_io->name());
+               }
+
+       } else {
                error << _("XML node describing a redirect is missing an IO node") << endmsg;
                return -1;
        }