X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fexport_range_markers_dialog.cc;h=c6bf578a329dc947c1b796c09ee2c13d73b13090;hb=4774527c5b1cdff807c1932bc93cf317401042a5;hp=1184294a6712e6f5fd6314f80ade182486650ba9;hpb=45d3ec1437cf661533bc7750c623865def4424df;p=ardour.git diff --git a/gtk2_ardour/export_range_markers_dialog.cc b/gtk2_ardour/export_range_markers_dialog.cc index 1184294a67..c6bf578a32 100644 --- a/gtk2_ardour/export_range_markers_dialog.cc +++ b/gtk2_ardour/export_range_markers_dialog.cc @@ -22,8 +22,10 @@ #include -#include -#include +#include "pbd/filesystem.h" + +#include "ardour/audioengine.h" +#include "ardour/sndfile_helpers.h" #include "ardour_ui.h" #include "export_range_markers_dialog.h" @@ -35,14 +37,14 @@ using namespace ARDOUR; using namespace PBD; using namespace std; -ExportRangeMarkersDialog::ExportRangeMarkersDialog (PublicEditor& editor) +ExportRangeMarkersDialog::ExportRangeMarkersDialog (PublicEditor& editor) : ExportDialog(editor) -{ - set_title (_("ardour: export ranges")); +{ + set_title (_("Export Ranges")); file_frame.set_label (_("Export to Directory")); do_not_allow_export_cd_markers(); - + total_duration = 0; current_range_marker_index = 0; } @@ -52,9 +54,9 @@ ExportRangeMarkersDialog::browse_action () const { return Gtk::FILE_CHOOSER_ACTION_CREATE_FOLDER; } - -void -ExportRangeMarkersDialog::export_audio_data () + +void +ExportRangeMarkersDialog::export_data () { getSession().locations()->apply(*this, &ExportRangeMarkersDialog::process_range_markers_export); } @@ -74,17 +76,15 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList& string filepath = get_target_filepath( get_selected_file_name(), currentLocation->name(), - sndfile_file_ending_from_string(get_selected_header_format())); - + get_selected_header_format()); + initSpec(filepath); - + spec.start_frame = currentLocation->start(); spec.end_frame = currentLocation->end(); - getSession().request_locate(spec.start_frame, false); - - if (getSession().start_audio_export(spec)){ - // if export fails + if (getSession().start_export(spec)){ + // if export fails return; } @@ -98,11 +98,13 @@ ExportRangeMarkersDialog::process_range_markers_export(Locations::LocationList& usleep(10000); } } - + current_range_marker_index++; + + getSession().stop_export (spec); } } - + spec.running = false; } @@ -117,27 +119,26 @@ ExportRangeMarkersDialog::get_target_filepath(string path, string filename, stri string target_filepath = target_path + filename + postfix; struct stat statbuf; - + for(int counter=1; (stat (target_filepath.c_str(), &statbuf) == 0); counter++){ - // while file exists + // while file exists ostringstream scounter; scounter.flush(); scounter << counter; - - target_filepath = + + target_filepath = target_path + filename + "_" + scounter.str() + postfix; } - + return target_filepath; } - bool ExportRangeMarkersDialog::is_filepath_valid(string &filepath) { // sanity check file name first struct stat statbuf; - + if (filepath.empty()) { // warning dialog string txt = _("Please enter a valid target directory."); @@ -145,51 +146,50 @@ ExportRangeMarkersDialog::is_filepath_valid(string &filepath) msg.run(); return false; } - - if ( (stat (filepath.c_str(), &statbuf) != 0) || + + if ( (stat (filepath.c_str(), &statbuf) != 0) || (!S_ISDIR (statbuf.st_mode)) ) { - string txt = _("Please select an existing target directory. Files are not allowed!"); - MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true); - msg.run(); - return false; + string txt = _("Please select an existing target directory. Files are not allowed!"); + MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true); + msg.run(); + return false; } - + // directory needs to exist and be writable string dirpath = Glib::path_get_dirname (filepath); - if (::access (dirpath.c_str(), W_OK) != 0) { + if (!exists_and_writable (sys::path (dirpath))) { string txt = _("Cannot write file in: ") + dirpath; MessageDialog msg (*this, txt, false, MESSAGE_ERROR, BUTTONS_OK, true); msg.run(); return false; } - + return true; } - void ExportRangeMarkersDialog::init_progress_computing(Locations::LocationList& locations) { // flush vector range_markers_durations_aggregated.resize(0); - - nframes_t duration_before_current_location = 0; + + framecnt_t duration_before_current_location = 0; Locations::LocationList::iterator locationIter; - + for (locationIter = locations.begin(); locationIter != locations.end(); ++locationIter) { Location *currentLocation = (*locationIter); - + if(currentLocation->is_range_marker()){ range_markers_durations_aggregated.push_back (duration_before_current_location); - - nframes_t duration = currentLocation->end() - currentLocation->start(); - + + framecnt_t duration = currentLocation->end() - currentLocation->start(); + range_markers_durations.push_back (duration); - duration_before_current_location += duration; + duration_before_current_location += duration; } } - total_duration = duration_before_current_location; + total_duration = duration_before_current_location; } @@ -205,7 +205,7 @@ ExportRangeMarkersDialog::progress_timeout () (spec.progress * (double) range_markers_durations[current_range_marker_index])) / (double) total_duration; } - + set_progress_fraction( progress ); return TRUE; }