fix bar crashing on monitor add/remove
This commit is contained in:
@@ -10,7 +10,10 @@
|
||||
#include "giomm/dbusproxy.h"
|
||||
|
||||
std::shared_ptr<MprisController> MprisController::getInstance() {
|
||||
static std::shared_ptr<MprisController> instance = std::shared_ptr<MprisController>(new MprisController());
|
||||
static std::shared_ptr<MprisController> instance;
|
||||
if (!instance) {
|
||||
instance = std::shared_ptr<MprisController>(new MprisController());
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@@ -18,7 +21,7 @@ std::shared_ptr<MprisController> MprisController::createForPlayer(const std::str
|
||||
return std::shared_ptr<MprisController>(new MprisController(bus_name));
|
||||
}
|
||||
|
||||
MprisController::MprisController() {
|
||||
MprisController::MprisController() : m_player_bus_name() {
|
||||
connect_session_async(sigc::mem_fun(*this, &MprisController::on_bus_connected));
|
||||
}
|
||||
|
||||
@@ -63,6 +66,33 @@ void MprisController::on_bus_connected(const Glib::RefPtr<Gio::AsyncResult> &res
|
||||
try {
|
||||
connection = Gio::DBus::Connection::get_finish(result);
|
||||
|
||||
// Per-player instances only need to create their own player proxy,
|
||||
// not monitor all players on the bus.
|
||||
if (!m_player_bus_name.empty()) {
|
||||
if (!m_proxy) {
|
||||
try {
|
||||
m_proxy = Gio::DBus::Proxy::create_sync(
|
||||
connection,
|
||||
m_player_bus_name,
|
||||
"/org/mpris/MediaPlayer2",
|
||||
"org.mpris.MediaPlayer2.Player");
|
||||
|
||||
if (m_proxy) {
|
||||
m_proxy->signal_properties_changed().connect(
|
||||
sigc::mem_fun(*this, &MprisController::on_properties_changed));
|
||||
signalNotification();
|
||||
emit_cached_playback_status();
|
||||
emit_cached_position();
|
||||
emit_cached_can_seek();
|
||||
}
|
||||
} catch (const Glib::Error &ex) {
|
||||
spdlog::error("DBus Connection Error for player {}: {}", m_player_bus_name, ex.what());
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Singleton instance: monitor all MPRIS players on the bus.
|
||||
if (!m_dbus_proxy) {
|
||||
m_dbus_proxy = Gio::DBus::Proxy::create_sync(
|
||||
connection,
|
||||
|
||||
Reference in New Issue
Block a user