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);
}
Evoral::SMF::end_write (_path);
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,15 +220,18 @@ SourceFactory::create (Session& s, const XMLNode& node, bool defer_peaks)
}
}
} else if (type == DataType::MIDI) {
boost::shared_ptr<SMFSource> src (new SMFSource (s, node));
Source::Lock lock(src->mutex());
src->load_model (lock, true);
try {
boost::shared_ptr<SMFSource> src (new SMFSource (s, node));
Source::Lock lock(src->mutex());
src->load_model (lock, true);
#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
// boost_debug_shared_ptr_mark_interesting (src, "Source");
// boost_debug_shared_ptr_mark_interesting (src, "Source");
#endif
src->check_for_analysis_data_on_disk ();
SourceCreated (src);
return src;
src->check_for_analysis_data_on_disk ();
SourceCreated (src);
return src;
} catch (...) {
}
}
return boost::shared_ptr<Source>();
@ -289,18 +292,21 @@ SourceFactory::createExternal (DataType type, Session& s, const string& path,
} else if (type == DataType::MIDI) {
boost::shared_ptr<SMFSource> src (new SMFSource (s, path));
Source::Lock lock(src->mutex());
src->load_model (lock, true);
try {
boost::shared_ptr<SMFSource> src (new SMFSource (s, path));
Source::Lock lock(src->mutex());
src->load_model (lock, true);
#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
// boost_debug_shared_ptr_mark_interesting (src, "Source");
// boost_debug_shared_ptr_mark_interesting (src, "Source");
#endif
if (announce) {
SourceCreated (src);
}
if (announce) {
SourceCreated (src);
}
return src;
return src;
} catch (...) {
}
}
@ -339,22 +345,27 @@ SourceFactory::createWritable (DataType type, Session& s, const std::string& pat
} else if (type == DataType::MIDI) {
// XXX writable flags should belong to MidiSource too
boost::shared_ptr<SMFSource> src (new SMFSource (s, path, SndFileSource::default_writable_flags));
assert (src->writable ());
try {
boost::shared_ptr<SMFSource> src (new SMFSource (s, path, SndFileSource::default_writable_flags));
Source::Lock lock(src->mutex());
src->load_model (lock, true);
assert (src->writable ());
Source::Lock lock(src->mutex());
src->load_model (lock, true);
#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
// boost_debug_shared_ptr_mark_interesting (src, "Source");
// boost_debug_shared_ptr_mark_interesting (src, "Source");
#endif
// no analysis data - this is a new file
// no analysis data - this is a new file
if (announce) {
SourceCreated (src);
if (announce) {
SourceCreated (src);
}
return src;
} catch (...) {
}
return src;
}
return boost::shared_ptr<Source> ();
@ -455,4 +466,3 @@ SourceFactory::createFromPlaylist (DataType type, Session& s, boost::shared_ptr<
return boost::shared_ptr<Source>();
}