From ee9f369e382205087ea737ffecd75f51d7a54143 Mon Sep 17 00:00:00 2001 From: Tim Mayberry Date: Mon, 19 Oct 2015 10:08:47 +1000 Subject: Refactor common code in MidiPatchManager class into new method --- libs/ardour/midi_patch_manager.cc | 96 ++++++++++++++++++--------------------- 1 file changed, 44 insertions(+), 52 deletions(-) (limited to 'libs/ardour/midi_patch_manager.cc') diff --git a/libs/ardour/midi_patch_manager.cc b/libs/ardour/midi_patch_manager.cc index 2e9b37b14a..6852de8ba3 100644 --- a/libs/ardour/midi_patch_manager.cc +++ b/libs/ardour/midi_patch_manager.cc @@ -53,6 +53,48 @@ MidiPatchManager::set_session (Session* s) add_session_patches (); } +bool +MidiPatchManager::add_midi_name_document (const std::string& file_path) +{ + boost::shared_ptr document; + try { + document = boost::shared_ptr(new MIDINameDocument(file_path)); + } + catch (...) { + error << "Error parsing MIDI patch file " << file_path << endmsg; + return false; + } + for (MIDINameDocument::MasterDeviceNamesList::const_iterator device = + 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, + file_path) << endmsg; + continue; + } + + _documents[device->first] = document; + _master_devices_by_model[device->first] = device->second; + + _all_models.insert(device->first); + const std::string& manufacturer = device->second->manufacturer(); + if (_devices_by_manufacturer.find(manufacturer) == + _devices_by_manufacturer.end()) { + MIDINameDocument::MasterDeviceNamesList empty; + _devices_by_manufacturer.insert(std::make_pair(manufacturer, empty)); + } + _devices_by_manufacturer[manufacturer].insert( + std::make_pair(device->first, device->second)); + + // TODO: handle this gracefully. + assert(_documents.count(device->first) == 1); + assert(_master_devices_by_model.count(device->first) == 1); + } + return true; +} + void MidiPatchManager::add_session_patches () { @@ -75,29 +117,7 @@ MidiPatchManager::add_session_patches () info << "Loading " << result.size() << " MIDI patches from " << path_to_patches << endmsg; for (vector::iterator i = result.begin(); i != result.end(); ++i) { - boost::shared_ptr document(new MIDINameDocument(*i)); - 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 - _master_devices_by_model[device->first] = device->second; - _all_models.insert(device->first); - const std::string& manufacturer = device->second->manufacturer(); - if (_devices_by_manufacturer.find(manufacturer) == _devices_by_manufacturer.end()) { - MIDINameDocument::MasterDeviceNamesList empty; - _devices_by_manufacturer.insert(std::make_pair(manufacturer, empty)); - } - _devices_by_manufacturer[manufacturer].insert(std::make_pair(device->first, device->second)); - - // 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); - } + add_midi_name_document(*i); } } @@ -117,35 +137,7 @@ MidiPatchManager::refresh() info << "Loading " << result.size() << " MIDI patches from " << search_path.to_string() << endmsg; for (vector::iterator i = result.begin(); i != result.end(); ++i) { - boost::shared_ptr document; - try { - document = boost::shared_ptr(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) { - 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); - const std::string& manufacturer = device->second->manufacturer(); - if (_devices_by_manufacturer.find(manufacturer) == _devices_by_manufacturer.end()) { - MIDINameDocument::MasterDeviceNamesList empty; - _devices_by_manufacturer.insert(std::make_pair(manufacturer, empty)); - } - _devices_by_manufacturer[manufacturer].insert(std::make_pair(device->first, device->second)); - } + add_midi_name_document (*i); } if (_session) { -- cgit v1.2.3