diff options
Diffstat (limited to 'libs/ardour/midi_patch_manager.cc')
-rw-r--r-- | libs/ardour/midi_patch_manager.cc | 34 |
1 files changed, 21 insertions, 13 deletions
diff --git a/libs/ardour/midi_patch_manager.cc b/libs/ardour/midi_patch_manager.cc index 717f290944..4bced4e46d 100644 --- a/libs/ardour/midi_patch_manager.cc +++ b/libs/ardour/midi_patch_manager.cc @@ -30,6 +30,8 @@ #include "ardour/midi_patch_manager.h" #include "ardour/midi_patch_search_path.h" +#include "i18n.h" + using namespace std; using namespace ARDOUR; using namespace MIDI; @@ -109,22 +111,28 @@ MidiPatchManager::refresh() info << "Loading " << result.size() << " MIDI patches from " << search_path.to_string() << endmsg; for (vector<std::string>::iterator i = result.begin(); i != result.end(); ++i) { - boost::shared_ptr<MIDINameDocument> document(new MIDINameDocument(*i)); + boost::shared_ptr<MIDINameDocument> document; + try { + document = boost::shared_ptr<MIDINameDocument>(new MIDINameDocument(*i)); + } catch (...) { + error << "Error parsing MIDI patch file " << *i << endmsg; + continue; + } for (MIDINameDocument::MasterDeviceNamesList::const_iterator device = - document->master_device_names_by_model().begin(); - device != document->master_device_names_by_model().end(); - ++device) { - //cerr << "got model " << device->first << endl; - // have access to the documents by model name - _documents[device->first] = document; - // build a list of all master devices from all documents + document->master_device_names_by_model().begin(); + device != document->master_device_names_by_model().end(); + ++device) { + if (_documents.find(device->first) != _documents.end()) { + warning << string_compose(_("Duplicate MIDI device `%1' in `%2' ignored"), + device->first, *i) + << endmsg; + continue; + } + + _documents[device->first] = document; _master_devices_by_model[device->first] = device->second; - _all_models.insert(device->first); - // make sure there are no double model names - // TODO: handle this gracefully. - assert(_documents.count(device->first) == 1); - assert(_master_devices_by_model.count(device->first) == 1); + _all_models.insert(device->first); } } |