catch various libsmf errors rethrown as exceptions

This commit is contained in:
Paul Davis 2018-07-05 13:34:47 -04:00
parent 1a25672239
commit 027d0efc2d
2 changed files with 42 additions and 27 deletions

View file

@ -548,6 +548,7 @@ SMFSource::mark_midi_streaming_write_completed (const Lock& lm, Evoral::Sequence
MidiSource::mark_midi_streaming_write_completed (lm, stuck_notes_option, when);
if (!writable()) {
cerr << "not writable\n";
warning << string_compose ("attempt to write to unwritable SMF file %1", _path) << endmsg;
return;
}
@ -556,7 +557,11 @@ SMFSource::mark_midi_streaming_write_completed (const Lock& lm, Evoral::Sequence
_model->set_edited(false);
}
try {
Evoral::SMF::end_write (_path);
} catch (std::exception & e) {
error << string_compose (_("Exception while writing %1, file may be corrupt/unusable"), _path) << endmsg;
}
/* data in the file now, not removable */

View file

@ -220,6 +220,7 @@ SourceFactory::create (Session& s, const XMLNode& node, bool defer_peaks)
}
}
} else if (type == DataType::MIDI) {
try {
boost::shared_ptr<SMFSource> src (new SMFSource (s, node));
Source::Lock lock(src->mutex());
src->load_model (lock, true);
@ -229,6 +230,8 @@ SourceFactory::create (Session& s, const XMLNode& node, bool defer_peaks)
src->check_for_analysis_data_on_disk ();
SourceCreated (src);
return src;
} catch (...) {
}
}
return boost::shared_ptr<Source>();
@ -289,6 +292,7 @@ SourceFactory::createExternal (DataType type, Session& s, const string& path,
} else if (type == DataType::MIDI) {
try {
boost::shared_ptr<SMFSource> src (new SMFSource (s, path));
Source::Lock lock(src->mutex());
src->load_model (lock, true);
@ -301,6 +305,8 @@ SourceFactory::createExternal (DataType type, Session& s, const string& path,
}
return src;
} catch (...) {
}
}
@ -339,7 +345,9 @@ SourceFactory::createWritable (DataType type, Session& s, const std::string& pat
} else if (type == DataType::MIDI) {
// XXX writable flags should belong to MidiSource too
try {
boost::shared_ptr<SMFSource> src (new SMFSource (s, path, SndFileSource::default_writable_flags));
assert (src->writable ());
Source::Lock lock(src->mutex());
@ -353,8 +361,11 @@ SourceFactory::createWritable (DataType type, Session& s, const std::string& pat
if (announce) {
SourceCreated (src);
}
return src;
} catch (...) {
}
}
return boost::shared_ptr<Source> ();
@ -455,4 +466,3 @@ SourceFactory::createFromPlaylist (DataType type, Session& s, boost::shared_ptr<
return boost::shared_ptr<Source>();
}