next (final?) part of handling missing MIDI files. 3.5.403
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 26 Sep 2014 19:38:48 +0000 (15:38 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 26 Sep 2014 19:38:48 +0000 (15:38 -0400)
If an external-to-session file is missing, consider it a fatal error in session
loading.

If an internal-to-session file is missing, just create a new MIDI source with
the same path and ID, and use that instead.

libs/ardour/session_state.cc

index 79d8ca1c022bce0aa2a14885203eedefe6624b18..db1eb30d3c26f24d90742aab7065be7892e3fdfa 100644 (file)
@@ -74,6 +74,7 @@
 #include "pbd/stacktrace.h"
 #include "pbd/convert.h"
 #include "pbd/clear_dir.h"
+#include "pbd/strsplit.h"
 
 #include "ardour/amp.h"
 #include "ardour/audio_diskstream.h"
@@ -1902,7 +1903,13 @@ Session::load_sources (const XMLNode& node)
                                        string fullpath;
 
                                        if (!Glib::path_is_absolute (err.path)) {
-                                               fullpath = Glib::build_filename (source_search_path (DataType::MIDI).front(), err.path);
+                                               vector<Glib::ustring> sdirs;
+                                               split (source_search_path (DataType::MIDI), sdirs, ':');
+                                               if (sdirs.empty()) {
+                                                       fatal << _("Empty MIDI source search path!") << endmsg;
+                                                       /*NOTREACHED*/
+                                               }
+                                               fullpath = Glib::build_filename (sdirs.front(), err.path);
                                        } else {
                                                /* this should be an unrecoverable error: we would be creating a MIDI file outside
                                                   the session tree.