mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-19 21:26:26 +01:00
catch various libsmf errors rethrown as exceptions
This commit is contained in:
parent
1a25672239
commit
027d0efc2d
2 changed files with 42 additions and 27 deletions
|
|
@ -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);
|
MidiSource::mark_midi_streaming_write_completed (lm, stuck_notes_option, when);
|
||||||
|
|
||||||
if (!writable()) {
|
if (!writable()) {
|
||||||
|
cerr << "not writable\n";
|
||||||
warning << string_compose ("attempt to write to unwritable SMF file %1", _path) << endmsg;
|
warning << string_compose ("attempt to write to unwritable SMF file %1", _path) << endmsg;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -556,7 +557,11 @@ SMFSource::mark_midi_streaming_write_completed (const Lock& lm, Evoral::Sequence
|
||||||
_model->set_edited(false);
|
_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 */
|
/* data in the file now, not removable */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -220,15 +220,18 @@ SourceFactory::create (Session& s, const XMLNode& node, bool defer_peaks)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (type == DataType::MIDI) {
|
} else if (type == DataType::MIDI) {
|
||||||
boost::shared_ptr<SMFSource> src (new SMFSource (s, node));
|
try {
|
||||||
Source::Lock lock(src->mutex());
|
boost::shared_ptr<SMFSource> src (new SMFSource (s, node));
|
||||||
src->load_model (lock, true);
|
Source::Lock lock(src->mutex());
|
||||||
|
src->load_model (lock, true);
|
||||||
#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
|
#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
|
||||||
// boost_debug_shared_ptr_mark_interesting (src, "Source");
|
// boost_debug_shared_ptr_mark_interesting (src, "Source");
|
||||||
#endif
|
#endif
|
||||||
src->check_for_analysis_data_on_disk ();
|
src->check_for_analysis_data_on_disk ();
|
||||||
SourceCreated (src);
|
SourceCreated (src);
|
||||||
return src;
|
return src;
|
||||||
|
} catch (...) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return boost::shared_ptr<Source>();
|
return boost::shared_ptr<Source>();
|
||||||
|
|
@ -289,18 +292,21 @@ SourceFactory::createExternal (DataType type, Session& s, const string& path,
|
||||||
|
|
||||||
} else if (type == DataType::MIDI) {
|
} else if (type == DataType::MIDI) {
|
||||||
|
|
||||||
boost::shared_ptr<SMFSource> src (new SMFSource (s, path));
|
try {
|
||||||
Source::Lock lock(src->mutex());
|
boost::shared_ptr<SMFSource> src (new SMFSource (s, path));
|
||||||
src->load_model (lock, true);
|
Source::Lock lock(src->mutex());
|
||||||
|
src->load_model (lock, true);
|
||||||
#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
|
#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
|
||||||
// boost_debug_shared_ptr_mark_interesting (src, "Source");
|
// boost_debug_shared_ptr_mark_interesting (src, "Source");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (announce) {
|
if (announce) {
|
||||||
SourceCreated (src);
|
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) {
|
} else if (type == DataType::MIDI) {
|
||||||
// XXX writable flags should belong to MidiSource too
|
// XXX writable flags should belong to MidiSource too
|
||||||
boost::shared_ptr<SMFSource> src (new SMFSource (s, path, SndFileSource::default_writable_flags));
|
try {
|
||||||
assert (src->writable ());
|
boost::shared_ptr<SMFSource> src (new SMFSource (s, path, SndFileSource::default_writable_flags));
|
||||||
|
|
||||||
Source::Lock lock(src->mutex());
|
assert (src->writable ());
|
||||||
src->load_model (lock, true);
|
|
||||||
|
Source::Lock lock(src->mutex());
|
||||||
|
src->load_model (lock, true);
|
||||||
#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
|
#ifdef BOOST_SP_ENABLE_DEBUG_HOOKS
|
||||||
// boost_debug_shared_ptr_mark_interesting (src, "Source");
|
// boost_debug_shared_ptr_mark_interesting (src, "Source");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// no analysis data - this is a new file
|
// no analysis data - this is a new file
|
||||||
|
|
||||||
if (announce) {
|
if (announce) {
|
||||||
SourceCreated (src);
|
SourceCreated (src);
|
||||||
|
}
|
||||||
|
|
||||||
|
return src;
|
||||||
|
|
||||||
|
} catch (...) {
|
||||||
}
|
}
|
||||||
return src;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return boost::shared_ptr<Source> ();
|
return boost::shared_ptr<Source> ();
|
||||||
|
|
@ -455,4 +466,3 @@ SourceFactory::createFromPlaylist (DataType type, Session& s, boost::shared_ptr<
|
||||||
|
|
||||||
return boost::shared_ptr<Source>();
|
return boost::shared_ptr<Source>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue