summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_patch_manager.cc
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2015-10-19 10:08:47 +1000
committerPaul Davis <paul@linuxaudiosystems.com>2015-10-22 11:51:02 -0400
commitee9f369e382205087ea737ffecd75f51d7a54143 (patch)
treea40a2f9c0f1f98a0385f147b38d3ec109991e7c1 /libs/ardour/midi_patch_manager.cc
parent9fd75e33fedd99bd8e30be7ca3727c5bbdce279a (diff)
Refactor common code in MidiPatchManager class into new method
Diffstat (limited to 'libs/ardour/midi_patch_manager.cc')
-rw-r--r--libs/ardour/midi_patch_manager.cc96
1 files changed, 44 insertions, 52 deletions
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<MIDINameDocument> document;
+ try {
+ document = boost::shared_ptr<MIDINameDocument>(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<std::string>::iterator i = result.begin(); i != result.end(); ++i) {
- boost::shared_ptr<MIDINameDocument> 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<std::string>::iterator i = result.begin(); i != result.end(); ++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) {
- 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) {