First part of consolidating ::roll(), ::no_roll()
[ardour.git] / libs / ardour / port_manager.cc
index aa56ab8d438597a2b90baff1e5cce591a1ed48f9..dfc1c6442107c4aefdf5c59356d0b92813f0a514 100644 (file)
@@ -27,7 +27,6 @@
 #include <glibmm/fileutils.h>
 #include <glibmm/miscutils.h>
 
-#include "pbd/convert.h"
 #include "pbd/error.h"
 
 #include "ardour/async_midi_port.h"
@@ -40,6 +39,7 @@
 #include "ardour/port_manager.h"
 #include "ardour/profile.h"
 #include "ardour/session.h"
+#include "ardour/types_convert.h"
 
 #include "pbd/i18n.h"
 
@@ -749,7 +749,7 @@ void
 PortManager::cycle_start (pframes_t nframes)
 {
        Port::set_global_port_buffer_offset (0);
-        Port::set_cycle_framecnt (nframes);
+        Port::set_cycle_samplecnt (nframes);
 
        _cycle_ports = ports.reader ();
 
@@ -1069,9 +1069,9 @@ PortManager::save_midi_port_info ()
 
                for (MidiPortInfo::iterator i = midi_port_info.begin(); i != midi_port_info.end(); ++i) {
                        XMLNode* node = new XMLNode (X_("port"));
-                       node->add_property (X_("name"), i->first);
-                       node->add_property (X_("input"), i->second.input ? X_("yes") : X_("no"));
-                       node->add_property (X_("properties"), enum_2_string (i->second.properties));
+                       node->set_property (X_("name"), i->first);
+                       node->set_property (X_("input"), i->second.input);
+                       node->set_property (X_("properties"), i->second.properties);
                        root->add_child_nocopy (*node);
                }
        }
@@ -1103,27 +1103,15 @@ PortManager::load_midi_port_info ()
        midi_port_info.clear ();
 
        for (XMLNodeConstIterator i = tree.root()->children().begin(); i != tree.root()->children().end(); ++i) {
-               XMLProperty const* prop;
                MidiPortInformation mpi;
                string name;
 
-               if ((prop = (*i)->property (X_("name"))) == 0) {
+               if (!(*i)->get_property (X_("name"), name) ||
+                   !(*i)->get_property (X_("input"), mpi.input) ||
+                   !(*i)->get_property (X_("properties"), mpi.properties)) {
                        continue;
                }
 
-               name = prop->value ();
-
-               if ((prop = (*i)->property (X_("input"))) == 0) {
-                       continue;
-               }
-               mpi.input = string_is_affirmative (prop->value());
-
-               if ((prop = (*i)->property (X_("properties"))) == 0) {
-                       continue;
-               }
-
-               mpi.properties = (MidiPortFlags) string_2_enum (prop->value(), mpi.properties);
-
                midi_port_info.insert (make_pair (name, mpi));
        }
 }
@@ -1204,22 +1192,34 @@ PortManager::fill_midi_port_info_locked ()
         * PortManager
         */
 
+       // rg: I don't understand what this attempts to solve
+       //
+       // Naming ports should be left to the backend:
+       // Ardour cannot associate numeric IDs with corresponding hardware.
+       // (see also 7dde6c3b)
+
        for (MidiPortInfo::iterator x = midi_port_info.begin(); x != midi_port_info.end(); ++x) {
                PortEngine::PortHandle ph = _backend->get_port_by_name (x->first);
 
-               if (x->second.pretty_name != x->first) {
+               if (!ph) {
+                       /* port info saved from some condition where this port
+                        * existed, but no longer does (i.e. device unplugged
+                        * at present)
+                        */
+                       continue;
+               }
+
+               if (!x->second.pretty_name.empty () && x->second.pretty_name != x->first) {
                        /* name set in port info ... propagate */
                        _backend->set_port_property (ph, "http://jackaudio.org/metadata/pretty-name", x->second.pretty_name, string());
                } else {
                        /* check with backend for pre-existing pretty name */
-                       if (ph) {
-                               string value;
-                               string type;
-                               if (0 == _backend->get_port_property (ph,
-                                                                     "http://jackaudio.org/metadata/pretty-name",
-                                                                     value, type)) {
-                                       x->second.pretty_name = value;
-                               }
+                       string value;
+                       string type;
+                       if (0 == _backend->get_port_property (ph,
+                                                             "http://jackaudio.org/metadata/pretty-name",
+                                                             value, type)) {
+                               x->second.pretty_name = value;
                        }
                }
        }