{
char buf[PATH_MAX+1];
bool goodfile = false;
- string base(basename);
+ string base = basename;
string ext = native_header_format_extension (hf, type);
+ uint32_t cnt = 1;
do {
if (type == DataType::AUDIO && channels == 2) {
if (channel == 0) {
- snprintf (buf, sizeof(buf), "%s-L%s", base.c_str(), ext.c_str());
+ if (cnt == 1) {
+ snprintf (buf, sizeof(buf), "%s-L%s", base.c_str(), ext.c_str());
+ } else {
+ snprintf (buf, sizeof(buf), "%s-%d-L%s", base.c_str(), cnt, ext.c_str());
+ }
} else {
- snprintf (buf, sizeof(buf), "%s-R%s", base.c_str(), ext.c_str());
+ if (cnt == 1) {
+ snprintf (buf, sizeof(buf), "%s-R%s", base.c_str(), ext.c_str());
+ } else {
+ snprintf (buf, sizeof(buf), "%s-%d-R%s", base.c_str(), cnt, ext.c_str());
+ }
}
} else if (channels > 1) {
- snprintf (buf, sizeof(buf), "%s-c%d%s", base.c_str(), channel, ext.c_str());
+ if (cnt == 1) {
+ snprintf (buf, sizeof(buf), "%s-c%d%s", base.c_str(), channel, ext.c_str());
+ } else {
+ snprintf (buf, sizeof(buf), "%s-%d-c%d%s", base.c_str(), cnt, channel, ext.c_str());
+ }
} else {
- snprintf (buf, sizeof(buf), "%s%s", base.c_str(), ext.c_str());
+ if (cnt == 1) {
+ snprintf (buf, sizeof(buf), "%s%s", base.c_str(), ext.c_str());
+ } else {
+ snprintf (buf, sizeof(buf), "%s-%d%s", base.c_str(), cnt, ext.c_str());
+ }
}
-
string tempname = destdir + "/" + buf;
+
if (!allow_replacing && Glib::file_test (tempname, Glib::FILE_TEST_EXISTS)) {
-
- /* if the file already exists, we must come up with
- * a new name for it. for now we just keep appending
- * _ to basename
- */
-
- base += "_";
+
+ cnt++;
} else {
goodfile = true;
}
- } while ( !goodfile);
+ } while (!goodfile);
return buf;
}
}
static bool
-create_mono_sources_for_writing (const vector<string>& new_paths, Session& sess,
- uint samplerate, vector<boost::shared_ptr<Source> >& newfiles,
+create_mono_sources_for_writing (const string& origin,
+ const vector<string>& new_paths,
+ Session& sess, uint samplerate,
+ vector<boost::shared_ptr<Source> >& newfiles,
framepos_t timeline_position)
{
- for (vector<string>::const_iterator i = new_paths.begin(); i != new_paths.end(); ++i)
- {
+ for (vector<string>::const_iterator i = new_paths.begin(); i != new_paths.end(); ++i) {
+
boost::shared_ptr<Source> source;
- try
- {
+ try {
const DataType type = SMFSource::safe_midi_file_extension (*i) ? DataType::MIDI : DataType::AUDIO;
-
source = SourceFactory::createWritable (type, sess,
- i->c_str(),
- false, // destructive
- samplerate);
+ i->c_str(),
+ origin,
+ false, // destructive
+ samplerate);
}
- catch (const failed_constructor& err)
- {
+
+ catch (const failed_constructor& err) {
error << string_compose (_("Unable to create file %1 during import"), *i) << endmsg;
return false;
}
return true;
}
-static Glib::ustring
+static string
compose_status_message (const string& path,
uint file_samplerate,
uint session_samplerate,
status.progress += 0.01;
}
- const nframes64_t pos = 0;
+ const framepos_t pos = 0;
const double length_beats = ceil(t / (double)source->ppqn());
BeatsFramesConverter converter(smfs->session().tempo_map(), pos);
smfs->update_length(pos, converter.to(length_beats));
status.sources.clear ();
- for (vector<Glib::ustring>::iterator p = status.paths.begin();
+ for (vector<string>::iterator p = status.paths.begin();
p != status.paths.end() && !status.cancel;
++p)
{
fatal << "THIS IS NOT IMPLEMENTED YET, IT SHOULD NEVER GET CALLED!!! DYING!" << endmsg;
status.cancel = !map_existing_mono_sources (new_paths, *this, frame_rate(), newfiles, this);
} else {
- status.cancel = !create_mono_sources_for_writing (new_paths, *this, frame_rate(), newfiles, natural_position);
+ status.cancel = !create_mono_sources_for_writing (*p, new_paths, *this, frame_rate(), newfiles, natural_position);
}
// copy on cancel/failure so that any files that were created will be removed below