fix invalid mapping detection
[ardour.git] / libs / ardour / export_profile_manager.cc
index b9bc16886457edf5e1d23a21ace2311178796365..932b99057a89b6c63c56c7c82dd01d4169c10190 100644 (file)
@@ -23,7 +23,7 @@
 #include <cerrno>
 
 #include <glib.h>
-#include <glib/gstdio.h>
+#include "pbd/gstdio_compat.h"
 
 #include <glibmm/fileutils.h>
 #include <glibmm/miscutils.h>
@@ -43,6 +43,7 @@
 #include "ardour/export_failed.h"
 #include "ardour/directory_names.h"
 #include "ardour/filename_extensions.h"
+#include "ardour/profile.h"
 #include "ardour/route.h"
 #include "ardour/session.h"
 #include "ardour/broadcast_info.h"
@@ -123,6 +124,11 @@ void
 ExportProfileManager::load_profile ()
 {
        XMLNode * extra_node = session.extra_xml (xml_node_name);
+       /* Legacy sessions used Session instant.xml for this */
+       if (!extra_node) {
+               extra_node = session.instant_xml (xml_node_name);
+       }
+
        if (extra_node) {
                set_state (*extra_node);
        } else {
@@ -387,7 +393,14 @@ ExportProfileManager::init_timespans (XMLNodeList nodes)
                timespans.push_back (state);
 
                // Add session as default selection
-               Location * session_range = session.locations()->session_range_location();
+               Location * session_range;
+
+               if (Profile->get_trx()) {
+                       session_range = (session.get_play_loop () ? session.locations()->auto_loop_location () : session.locations()->session_range_location());
+               } else {
+                       session_range = session.locations()->session_range_location();
+               }
+
                if (!session_range) { return false; }
 
                ExportTimespanPtr timespan = handler->add_timespan();
@@ -470,11 +483,15 @@ ExportProfileManager::update_ranges () {
                return;
        }
 
-       /* Session */
 
-       Location * session_range = session.locations()->session_range_location();
-       if (session_range) {
-               ranges->push_back (session_range);
+       /* Loop */
+       if (session.locations()->auto_loop_location ()) {
+               ranges->push_back (session.locations()->auto_loop_location ());
+       }
+
+       /* Session */
+       if (session.locations()->session_range_location()) {
+               ranges->push_back (session.locations()->session_range_location());
        }
 
        /* Selection */
@@ -772,7 +789,7 @@ std::string
 ExportProfileManager::get_sample_filename_for_format (ExportFilenamePtr filename, ExportFormatSpecPtr format)
 {
        assert (format);
-       
+
        if (channel_configs.empty()) { return ""; }
 
        std::list<string> filenames;
@@ -812,7 +829,7 @@ ExportProfileManager::get_warnings ()
        if (!channel_configs.empty ()) {
                channel_config_state = channel_configs.front();
        }
-       
+
        TimespanStatePtr timespan_state = timespans.front();
 
        /*** Check "global" config ***/
@@ -850,7 +867,7 @@ ExportProfileManager::get_warnings ()
                        check_config (warnings, timespan_state, channel_config_state, *format_it, *filename_it);
                }
        }
-       
+
        return warnings;
 }