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)
54 object->get_signal<mpris::TrackList::Signals::TrackAdded>(),
55 object->get_signal<mpris::TrackList::Signals::TrackRemoved>(),
56 object->get_signal<mpris::TrackList::Signals::TrackListReplaced>(),
57 object->get_signal<mpris::TrackList::Signals::TrackChanged>()
63 std::shared_ptr<media::Player>
parent;
66 std::shared_ptr<core::dbus::Property<mpris::TrackList::Properties::CanEditTracks>>
can_edit_tracks;
67 std::shared_ptr<core::dbus::Property<mpris::TrackList::Properties::Tracks>>
tracks;
72 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackAdded, mpris::TrackList::Signals::TrackAdded::ArgumentType>
DBusTrackAddedSignal;
73 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackRemoved, mpris::TrackList::Signals::TrackRemoved::ArgumentType>
DBusTrackRemovedSignal;
74 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackListReplaced, mpris::TrackList::Signals::TrackListReplaced::ArgumentType>
DBusTrackListReplacedSignal;
75 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackChanged, mpris::TrackList::Signals::TrackChanged::ArgumentType>
DBusTrackChangedSignal;
77 Signals(
const std::shared_ptr<DBusTrackAddedSignal>& track_added,
78 const std::shared_ptr<DBusTrackRemovedSignal>& track_removed,
79 const std::shared_ptr<DBusTrackListReplacedSignal>& track_list_replaced,
80 const std::shared_ptr<DBusTrackChangedSignal>& track_changed)
95 std::cout <<
"OnTrackAdded signal arrived via the bus." << std::endl;
101 std::cout <<
"OnTrackRemoved signal arrived via the bus." << std::endl;
107 std::cout <<
"OnTrackListRemoved signal arrived via the bus." << std::endl;
113 std::cout <<
"OnTrackChanged signal arrived via the bus." << std::endl;
136 const std::shared_ptr<media::Player>& parent,
137 const core::dbus::Object::Ptr&
object)
138 : d(new
Private(this, parent, object))
148 return *d->can_edit_tracks;
158 auto op = d->object->invoke_method_synchronously<
159 mpris::TrackList::GetTracksMetadata,
160 std::map<std::string, std::string>>(id);
163 throw std::runtime_error(
"Problem querying meta data for track: " + op.error());
165 media::Track::MetaData md;
166 for(
auto pair : op.value())
168 md.
set(pair.first, pair.second);
175 auto op = d->object->invoke_method_synchronously<
176 mpris::TrackList::GetTracksUri,
180 throw std::runtime_error(
"Problem querying track for uri: " + op.error());
190 auto op = d->object->invoke_method_synchronously<mpris::TrackList::AddTrack,
void>(
196 throw std::runtime_error(
"Problem adding track: " + op.error());
201 auto op = d->object->invoke_method_synchronously<mpris::TrackList::RemoveTrack,
void>(
205 throw std::runtime_error(
"Problem removing track: " + op.error());
210 (void) toggle_player_state;
211 auto op = d->object->invoke_method_synchronously<mpris::TrackList::GoTo,
void>(
215 throw std::runtime_error(
"Problem adding track: " + op.error());
232 std::cerr <<
"shuffle_tracks() does nothing from the client side" << std::endl;
237 std::cerr <<
"unshuffle_tracks() does nothing from the client side" << std::endl;
242 auto op = d->object->invoke_method_synchronously<mpris::TrackList::Reset,
void>();
245 throw std::runtime_error(
"Problem resetting tracklist: " + op.error());
250 return d->signals.on_track_list_replaced;
255 return d->signals.on_track_added;
260 return d->signals.on_track_removed;
265 return d->signals.on_track_changed;
270 return d->signals.on_go_to_track;
275 return d->signals.on_end_of_tracklist;