+MidiPatchManager::refresh()
+{
+ _documents.clear();
+ _master_devices_by_model.clear();
+ _all_models.clear();
+ _devices_by_manufacturer.clear();
+
+ Searchpath search_path = midi_patch_search_path ();
+ vector<std::string> result;
+
+ find_files_matching_pattern (result, search_path, "*.midnam");
+
+ 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));
+ }
+ }
+
+ if (_session) {
+ add_session_patches ();
+ }
+}
+
+void
+MidiPatchManager::session_going_away ()