diff options
author | Eddy Pedroni <epedroni@pm.me> | 2025-07-24 12:40:13 +0200 |
---|---|---|
committer | Eddy Pedroni <epedroni@pm.me> | 2025-07-24 12:40:13 +0200 |
commit | 7f85c4bbdbf52cddcf3be7b39c7d645c7fe80388 (patch) | |
tree | 1a06eb7834063cd44c1458906b05e1e6bebbc799 | |
parent | 5a40f51085e2132bf91eccdd37e1a8dabe588efd (diff) |
Improved autoconnect
-rw-r--r-- | daemon/src/connection_manager.cpp | 11 | ||||
-rw-r--r-- | daemon/src/device_connection.h | 14 |
2 files changed, 18 insertions, 7 deletions
diff --git a/daemon/src/connection_manager.cpp b/daemon/src/connection_manager.cpp index faad061..88f6659 100644 --- a/daemon/src/connection_manager.cpp +++ b/daemon/src/connection_manager.cpp @@ -90,13 +90,20 @@ Connection_Manager::refresh_devices([[maybe_unused]] bool add, [[maybe_unused]] for (auto & [id, device] : m_connections) { + bool attached = false; for (auto const & [port, name] : port_map) { - if (name.contains(device->device_name)) + attached |= name.contains(device->device_name); + if (attached) { - device->reconnect(port); + device->connect(port); + break; } } + if (!attached) + { + device->disconnect(); + } } } diff --git a/daemon/src/device_connection.h b/daemon/src/device_connection.h index a2af8cc..58ddd7f 100644 --- a/daemon/src/device_connection.h +++ b/daemon/src/device_connection.h @@ -41,13 +41,17 @@ struct Device_Connection : public Sender } void - reconnect(std::size_t port) + connect(std::size_t port) { - midi_in.closePort(); - midi_out.closePort(); + if (!midi_in.isPortOpen()) midi_in.openPort(port); + if (!midi_out.isPortOpen()) midi_out.openPort(port); + } - midi_in.openPort(port); - midi_out.openPort(port); + void + disconnect() + { + if (midi_in.isPortOpen()) midi_in.closePort(); + if (midi_out.isPortOpen()) midi_out.closePort(); } }; |