fix conflicts and merge with master
[ardour.git] / libs / ardour / export_handler.cc
index d93ec7779af5941d9a2d7358f6fdb3872609f218..5710ecc45213624d2749bff190b5c41903cb3608 100644 (file)
@@ -20,6 +20,7 @@
 
 #include "ardour/export_handler.h"
 
+#include <glib/gstdio.h>
 #include <glibmm.h>
 #include <glibmm/convert.h>
 
@@ -171,6 +172,7 @@ ExportHandler::start_timespan ()
        timespan_bounds = config_map.equal_range (current_timespan);
        graph_builder->reset ();
        graph_builder->set_current_timespan (current_timespan);
+       handle_duplicate_format_extensions();
        for (ConfigMap::iterator it = timespan_bounds.first; it != timespan_bounds.second; ++it) {
                // Filenames can be shared across timespans
                FileSpec & spec = it->second;
@@ -186,6 +188,27 @@ ExportHandler::start_timespan ()
        session.start_audio_export (process_position);
 }
 
+void
+ExportHandler::handle_duplicate_format_extensions()
+{
+       typedef std::map<std::string, int> ExtCountMap;
+
+       ExtCountMap counts;
+       for (ConfigMap::iterator it = timespan_bounds.first; it != timespan_bounds.second; ++it) {
+               counts[it->second.format->extension()]++;
+       }
+
+       bool duplicates_found = false;
+       for (ExtCountMap::iterator it = counts.begin(); it != counts.end(); ++it) {
+               if (it->second > 1) { duplicates_found = true; }
+       }
+
+       // Set this always, as the filenames are shared...
+       for (ConfigMap::iterator it = timespan_bounds.first; it != timespan_bounds.second; ++it) {
+               it->second.filename->include_format_name = duplicates_found;
+       }
+}
+
 int
 ExportHandler::process (framecnt_t frames)
 {
@@ -393,10 +416,10 @@ ExportHandler::export_cd_marker_file (ExportTimespanPtr timespan, ExportFormatSp
 
        } catch (std::exception& e) {
                error << string_compose (_("an error occured while writing a TOC/CUE file: %1"), e.what()) << endmsg;
-               ::unlink (filepath.c_str());
+               ::g_unlink (filepath.c_str());
        } catch (Glib::Exception& e) {
                error << string_compose (_("an error occured while writing a TOC/CUE file: %1"), e.what()) << endmsg;
-               ::unlink (filepath.c_str());
+               ::g_unlink (filepath.c_str());
        }
 }