30 #include <core/dbus/property.h>
31 #include <core/dbus/types/object_path.h>
32 #include <core/dbus/types/variant.h>
33 #include <core/dbus/types/stl/map.h>
34 #include <core/dbus/types/stl/vector.h>
38 namespace dbus = core::dbus;
39 namespace media = core::ubuntu::media;
45 const std::shared_ptr<media::Player>&
parent,
46 const dbus::types::ObjectPath& op)
49 object(impl->access_service()->object_for_path(op)),
51 tracks(
object->get_property<mpris::TrackList::Properties::Tracks>())
56 std::shared_ptr<media::Player>
parent;
59 std::shared_ptr<core::dbus::Property<mpris::TrackList::Properties::CanEditTracks>>
can_edit_tracks;
60 std::shared_ptr<core::dbus::Property<mpris::TrackList::Properties::Tracks>>
tracks;
69 const std::shared_ptr<media::Player>& parent,
70 const core::dbus::types::ObjectPath& op)
72 d(new
Private(this, parent, op))
82 return *d->can_edit_tracks;
93 = d->object->invoke_method_synchronously<
94 mpris::TrackList::GetTracksMetadata,
95 std::map<std::string, std::string>>(id);
98 throw std::runtime_error(
"Problem querying meta data for track: " + op.error());
100 media::Track::MetaData md;
101 for(
auto pair : op.value())
103 md.
set(pair.first, pair.second);
113 auto op = d->object->invoke_method_synchronously<mpris::TrackList::AddTrack,
void>(
119 throw std::runtime_error(
"Problem adding track: " + op.error());
124 auto op = d->object->invoke_method_synchronously<mpris::TrackList::RemoveTrack,
void>(
128 throw std::runtime_error(
"Problem removing track: " + op.error());
133 auto op = d->object->invoke_method_synchronously<mpris::TrackList::GoTo,
void>(
137 throw std::runtime_error(
"Problem adding track: " + op.error());
142 return d->on_track_list_replaced;
147 return d->on_track_added;
152 return d->on_track_removed;
157 return d->on_track_changed;