fix data loss/file deletion caused by mistaken used of Session::source_by_path() to check if an AUDIO filesource with a given path already exists.
::source_by_path() was written for MIDI files only. I fixed the call and renamed the two similar functions (one for audio and one for MIDI) to make it more clear.
This commit is contained in:
parent
c6930c1aef
commit
be575b7945
|
@ -611,7 +611,7 @@ Editor::embed_sndfiles (vector<string> paths, bool multifile,
|
|||
|
||||
boost::shared_ptr<Source> s;
|
||||
|
||||
if ((s = _session->source_by_path_and_channel (path, n)) == 0) {
|
||||
if ((s = _session->audio_source_by_path_and_channel (path, n)) == 0) {
|
||||
|
||||
source = boost::dynamic_pointer_cast<AudioFileSource> (
|
||||
SourceFactory::createExternal (DataType::AUDIO, *_session,
|
||||
|
|
|
@ -585,8 +585,8 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
|
|||
boost::shared_ptr<MidiSource> create_midi_source_by_stealing_name (boost::shared_ptr<Track>);
|
||||
|
||||
boost::shared_ptr<Source> source_by_id (const PBD::ID&);
|
||||
boost::shared_ptr<AudioFileSource> source_by_path_and_channel (const std::string&, uint16_t) const;
|
||||
boost::shared_ptr<MidiSource> source_by_path (const std::string&) const;
|
||||
boost::shared_ptr<AudioFileSource> audio_source_by_path_and_channel (const std::string&, uint16_t) const;
|
||||
boost::shared_ptr<MidiSource> midi_source_by_path (const std::string&) const;
|
||||
uint32_t count_sources_by_origin (const std::string&);
|
||||
|
||||
void add_playlist (boost::shared_ptr<Playlist>, bool unused = false);
|
||||
|
|
|
@ -202,7 +202,7 @@ map_existing_mono_sources (const vector<string>& new_paths, Session& /*sess*/,
|
|||
for (vector<string>::const_iterator i = new_paths.begin();
|
||||
i != new_paths.end(); ++i)
|
||||
{
|
||||
boost::shared_ptr<Source> source = session->source_by_path_and_channel(*i, 0);
|
||||
boost::shared_ptr<Source> source = session->audio_source_by_path_and_channel(*i, 0);
|
||||
|
||||
if (source == 0) {
|
||||
error << string_compose(_("Could not find a source for %1 even though we are updating this file!"), (*i)) << endl;
|
||||
|
|
|
@ -3311,7 +3311,7 @@ Session::source_by_id (const PBD::ID& id)
|
|||
}
|
||||
|
||||
boost::shared_ptr<AudioFileSource>
|
||||
Session::source_by_path_and_channel (const string& path, uint16_t chn) const
|
||||
Session::audio_source_by_path_and_channel (const string& path, uint16_t chn) const
|
||||
{
|
||||
/* Restricted to audio files because only audio sources have channel
|
||||
as a property.
|
||||
|
@ -3332,7 +3332,7 @@ Session::source_by_path_and_channel (const string& path, uint16_t chn) const
|
|||
}
|
||||
|
||||
boost::shared_ptr<MidiSource>
|
||||
Session::source_by_path (const std::string& path) const
|
||||
Session::midi_source_by_path (const std::string& path) const
|
||||
{
|
||||
/* Restricted to MIDI files because audio sources require a channel
|
||||
for unique identification, in addition to a path.
|
||||
|
@ -3487,7 +3487,7 @@ Session::new_audio_source_name (const string& base, uint32_t nchan, uint32_t cha
|
|||
|
||||
string possible_path = Glib::build_filename (spath, buf);
|
||||
|
||||
if (source_by_path (possible_path)) {
|
||||
if (audio_source_by_path_and_channel (possible_path, chan)) {
|
||||
existing++;
|
||||
break;
|
||||
}
|
||||
|
@ -3553,7 +3553,7 @@ Session::new_midi_source_name (const string& owner_name)
|
|||
existing++;
|
||||
}
|
||||
|
||||
if (source_by_path (possible_path)) {
|
||||
if (midi_source_by_path (possible_path)) {
|
||||
existing++;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue