Add warnings for overwriting marker files
authorSakari Bergen <sakari.bergen@beatwaves.net>
Sun, 22 Jan 2012 18:02:27 +0000 (18:02 +0000)
committerSakari Bergen <sakari.bergen@beatwaves.net>
Sun, 22 Jan 2012 18:02:27 +0000 (18:02 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@11305 d708f5d6-7413-0410-9779-e7cbd77b26cf

libs/ardour/ardour/export_handler.h
libs/ardour/export_handler.cc
libs/ardour/export_profile_manager.cc

index 79a90ebb6f56ca8b760de3f643ee98a3d128eed9..6fb67bc41479eaae3a8b2a40faf008aad592ff71 100644 (file)
@@ -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);
index b789304bdc75bb616f36455dba519c7bb2427a15..c864cf4bf7c4b7933d1efdc0d069ed3206d5ff2d 100644 (file)
@@ -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)
 {
index 7eaa7c0632a1185ff4486d16dc7d0dee747f446d..459f8785967e72b82e8c76e37969a7db941ca172 100644 (file)
@@ -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);
+                       }
+               }
        }
 }