diff options
-rw-r--r-- | libs/ardour/ardour/export_handler.h | 2 | ||||
-rw-r--r-- | libs/ardour/export_handler.cc | 29 | ||||
-rw-r--r-- | libs/ardour/export_profile_manager.cc | 17 |
3 files changed, 38 insertions, 10 deletions
diff --git a/libs/ardour/ardour/export_handler.h b/libs/ardour/ardour/export_handler.h index 79a90ebb6f..6fb67bc414 100644 --- a/libs/ardour/ardour/export_handler.h +++ b/libs/ardour/ardour/export_handler.h @@ -115,6 +115,8 @@ class ExportHandler : public ExportElementFactory BroadcastInfoPtr broadcast_info); void do_export (bool rt = false); + std::string get_cd_marker_filename(std::string filename, CDMarkerFormat format); + private: int process (framecnt_t frames); diff --git a/libs/ardour/export_handler.cc b/libs/ardour/export_handler.cc index b789304bdc..c864cf4bf7 100644 --- a/libs/ardour/export_handler.cc +++ b/libs/ardour/export_handler.cc @@ -266,12 +266,7 @@ void ExportHandler::export_cd_marker_file (ExportTimespanPtr timespan, ExportFormatSpecPtr file_format, std::string filename, CDMarkerFormat format) { - string filepath; - - /* do not strip file suffix because there may be more than one format, - and we do not want the CD marker file from one format to overwrite - another (e.g. foo.wav.cue > foo.aiff.cue) - */ + string filepath = get_cd_marker_filename(filename, format); void (ExportHandler::*header_func) (CDMarkerStatus &); void (ExportHandler::*track_func) (CDMarkerStatus &); @@ -279,15 +274,11 @@ ExportHandler::export_cd_marker_file (ExportTimespanPtr timespan, ExportFormatSp switch (format) { case CDMarkerTOC: - filepath = filename; - filepath += ".toc"; header_func = &ExportHandler::write_toc_header; track_func = &ExportHandler::write_track_info_toc; index_func = &ExportHandler::write_index_info_toc; break; case CDMarkerCUE: - filepath = filename; - filepath += ".cue"; header_func = &ExportHandler::write_cue_header; track_func = &ExportHandler::write_track_info_cue; index_func = &ExportHandler::write_index_info_cue; @@ -381,6 +372,24 @@ ExportHandler::export_cd_marker_file (ExportTimespanPtr timespan, ExportFormatSp } } +string +ExportHandler::get_cd_marker_filename(std::string filename, CDMarkerFormat format) +{ + /* do not strip file suffix because there may be more than one format, + and we do not want the CD marker file from one format to overwrite + another (e.g. foo.wav.cue > foo.aiff.cue) + */ + + switch (format) { + case CDMarkerTOC: + return filename + ".toc"; + case CDMarkerCUE: + return filename + ".cue"; + default: + return filename + ".marker"; // Should not be reached when actually creating a file + } +} + void ExportHandler::write_cue_header (CDMarkerStatus & status) { diff --git a/libs/ardour/export_profile_manager.cc b/libs/ardour/export_profile_manager.cc index 7eaa7c0632..459f878596 100644 --- a/libs/ardour/export_profile_manager.cc +++ b/libs/ardour/export_profile_manager.cc @@ -840,6 +840,23 @@ ExportProfileManager::check_config (boost::shared_ptr<Warnings> warnings, warnings->conflicting_filenames.push_back (path); } } + + // TODO check what happens with split channel configs... + string path = filename->get_path (format); + + if (format->with_toc()) { + string marker_file = handler->get_cd_marker_filename(path, CDMarkerTOC); + if (sys::exists (sys::path (marker_file))) { + warnings->conflicting_filenames.push_back (marker_file); + } + } + + if (format->with_cue()) { + string marker_file = handler->get_cd_marker_filename(path, CDMarkerCUE); + if (sys::exists (sys::path (marker_file))) { + warnings->conflicting_filenames.push_back (marker_file); + } + } } } |