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>
45 const std::shared_ptr<media::Player>&
parent,
46 const dbus::Object::Ptr&
object)
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;
70 const std::shared_ptr<media::Player>& parent,
71 const core::dbus::Object::Ptr&
object)
72 : d(new
Private(this, parent, object))
82 return *d->can_edit_tracks;
92 auto op = d->object->invoke_method_synchronously<
93 mpris::TrackList::GetTracksMetadata,
94 std::map<std::string, std::string>>(id);
97 throw std::runtime_error(
"Problem querying meta data for track: " + op.error());
99 media::Track::MetaData md;
100 for(
auto pair : op.value())
102 md.
set(pair.first, pair.second);
112 auto op = d->object->invoke_method_synchronously<mpris::TrackList::AddTrack,
void>(
118 throw std::runtime_error(
"Problem adding track: " + op.error());
123 auto op = d->object->invoke_method_synchronously<mpris::TrackList::RemoveTrack,
void>(
127 throw std::runtime_error(
"Problem removing track: " + op.error());
132 (void) toggle_player_state;
133 auto op = d->object->invoke_method_synchronously<mpris::TrackList::GoTo,
void>(
137 throw std::runtime_error(
"Problem adding track: " + op.error());
142 std::cerr <<
"shuffle_tracks() does nothing from the client side" << std::endl;
147 std::cerr <<
"unshuffle_tracks() does nothing from the client side" << std::endl;
152 std::cerr <<
"reset() does nothing from the client side" << std::endl;
157 std::cout <<
"Signal on_track_list_replaced arrived via the bus" << std::endl;
158 return d->on_track_list_replaced;
163 std::cout <<
"Signal on_track_added arrived via the bus" << std::endl;
164 return d->on_track_added;
169 std::cout <<
"Signal on_track_removed arrived via the bus" << std::endl;
170 return d->on_track_removed;
175 return d->on_track_changed;
180 return d->on_go_to_track;