25 #include <core/dbus/message.h>
26 #include <core/dbus/object.h>
27 #include <core/dbus/types/object_path.h>
32 namespace dbus = core::dbus;
33 namespace media = core::ubuntu::media;
37 std::map<dbus::types::ObjectPath, std::shared_ptr<media::Player>> session_store;
44 object(impl->access_service()->add_object_for_path(
45 dbus::traits::Service<media::Service>::object_path()))
47 object->install_method_handler<mpris::Service::CreateSession>(
51 std::placeholders::_1));
52 object->install_method_handler<mpris::Service::PauseOtherSessions>(
56 std::placeholders::_1));
61 static unsigned int session_counter = 0;
64 ss <<
"/core/ubuntu/media/Service/sessions/" << session_counter++;
66 dbus::types::ObjectPath op{ss.str()};
67 media::Player::Configuration config{op};
71 auto session =
impl->create_session(config);
73 bool inserted =
false;
74 std::tie(std::ignore, inserted)
75 = session_store.insert(std::make_pair(op, session));
78 throw std::runtime_error(
"Problem persisting session in session store.");
80 auto reply = dbus::Message::make_method_return(msg);
81 reply->writer() << op;
83 impl->access_bus()->send(reply);
84 }
catch(
const std::runtime_error& e)
86 auto reply = dbus::Message::make_error(
90 impl->access_bus()->send(reply);
96 std::cout << __PRETTY_FUNCTION__ << std::endl;
99 impl->pause_other_sessions(key);
101 auto reply = dbus::Message::make_method_return(msg);
102 impl->access_bus()->send(reply);
127 access_bus()->stop();
core::dbus::Bus::Ptr the_session_bus()
static const std::string & name()