35 access_service()->object_for_path(
36 dbus::types::ObjectPath(
42 dbus::DBus::WatchMode::registration)
44 service_watcher_unreg(
46 dbus::DBus::WatchMode::unregistration)
50 worker = std::move(std::thread([bus]()
55 service_watcher_reg->service_registered().connect(
58 MH_DEBUG(
"media-hub service registered");
59 signals.service_reconnected();
61 service_watcher_unreg->service_unregistered().connect(
64 MH_DEBUG(
"media-hub service unregistered");
65 signals.service_disconnected();
74 if (worker.joinable())
80 const auto op =
object->invoke_method_synchronously<mpris::Service::CreateSession,
81 std::tuple<dbus::types::ObjectPath, std::string>>();
84 throw std::runtime_error(
"Problem creating session: " + op.error());
90 access_service()->object_for_path(std::get<0>(op.value())),
91 std::get<1>(op.value())
98 const auto op =
object->invoke_method_synchronously<mpris::Service::DetachSession,
102 throw std::runtime_error(
"Problem detaching session: " + op.error());
108 const auto op =
object->invoke_method_synchronously<mpris::Service::ReattachSession,
109 dbus::types::ObjectPath>(uuid);
112 throw std::runtime_error(
"Problem reattaching session: " + op.error());
118 access_service()->object_for_path(op.value()),
126 const auto op =
object->invoke_method_synchronously<mpris::Service::DestroySession,
130 throw std::runtime_error(
"Problem destroying session: " + op.error());
136 const auto op =
object->invoke_method_synchronously<mpris::Service::CreateFixedSession,
137 dbus::types::ObjectPath>(name);
140 throw std::runtime_error(
"Problem creating session: " + op.error());
146 access_service()->object_for_path(op.value())
152 const auto op =
object->invoke_method_synchronously<mpris::Service::ResumeSession,
153 dbus::types::ObjectPath>(key);
156 throw std::runtime_error(
"Problem resuming session: " + op.error());
162 access_service()->object_for_path(op.value())
168 const auto op =
object->invoke_method_synchronously<mpris::Service::PauseOtherSessions,
172 throw std::runtime_error(
"Problem pausing other sessions: " + op.error());
177 return signals.service_disconnected;
182 return signals.service_reconnected;