31 #include <core/dbus/object.h>
32 #include <core/dbus/property.h>
33 #include <core/dbus/types/object_path.h>
34 #include <core/dbus/types/variant.h>
35 #include <core/dbus/types/stl/map.h>
36 #include <core/dbus/types/stl/vector.h>
40 namespace dbus = core::dbus;
41 namespace media = core::ubuntu::media;
46 dbus::Object::Ptr
object)
49 can_edit_tracks(object->get_property<mpris::TrackList::Properties::CanEditTracks>()),
50 tracks(object->get_property<mpris::TrackList::Properties::Tracks>()),
59 msg->reader() >> track;
61 auto meta_data =
impl->query_meta_data_for_track(track);
63 auto reply = dbus::Message::make_method_return(msg);
64 reply->writer() << *meta_data;
65 impl->access_bus()->send(reply);
71 msg->reader() >> uri >> after >> make_current;
73 impl->add_track_with_uri_at(uri, after, make_current);
75 auto reply = dbus::Message::make_method_return(msg);
76 impl->access_bus()->send(reply);
82 msg->reader() >> track;
84 impl->remove_track(track);
86 auto reply = dbus::Message::make_method_return(msg);
87 impl->access_bus()->send(reply);
93 msg->reader() >> track;
97 auto reply = dbus::Message::make_method_return(msg);
98 impl->access_bus()->send(reply);
104 std::shared_ptr<core::dbus::Property<mpris::TrackList::Properties::CanEditTracks>>
can_edit_tracks;
105 std::shared_ptr<core::dbus::Property<mpris::TrackList::Properties::Tracks>>
tracks;
116 const dbus::types::ObjectPath& op)
118 d(new
Private(this, access_service()->add_object_for_path(op)))
120 d->object->install_method_handler<mpris::TrackList::GetTracksMetadata>(
123 std::placeholders::_1));
125 d->object->install_method_handler<mpris::TrackList::AddTrack>(
128 std::placeholders::_1));
130 d->object->install_method_handler<mpris::TrackList::RemoveTrack>(
133 std::placeholders::_1));
135 d->object->install_method_handler<mpris::TrackList::GoTo>(
138 std::placeholders::_1));
147 return d->current_track != d->tracks->get().end();
152 if (d->tracks->get().empty())
153 return *(d->current_track);
155 if (d->tracks->get().size() && (d->current_track == d->empty_iterator))
157 d->current_track = d->tracks->get().begin();
158 return *(d->current_track = std::next(d->current_track));
161 d->current_track = std::next(d->current_track);
162 return *(d->current_track);
167 return *d->can_edit_tracks;
172 return *d->can_edit_tracks;
187 return d->on_track_list_replaced;
192 return d->on_track_added;
197 return d->on_track_removed;
202 return d->on_track_changed;
207 return d->on_track_list_replaced;
212 return d->on_track_added;
217 return d->on_track_removed;
222 return d->on_track_changed;