19 #ifndef MPRIS_TRACK_LIST_H_ 20 #define MPRIS_TRACK_LIST_H_ 22 #include <core/dbus/macros.h> 24 #include <core/dbus/types/any.h> 25 #include <core/dbus/macros.h> 26 #include <core/dbus/types/object_path.h> 27 #include <core/dbus/object.h> 28 #include <core/dbus/property.h> 29 #include <core/dbus/types/variant.h> 31 #include <boost/utility/identity_type.hpp> 43 typedef std::map<std::string, core::dbus::types::Variant>
Dictionary;
45 static const std::string&
name()
47 static const std::string s{
"org.mpris.MediaPlayer2.TrackList"};
55 static constexpr
const char*
name 57 "mpris.TrackList.Error.InsufficientPermissionsToAddTrack" 63 static constexpr
const char*
name 65 "mpris.TrackList.Error.FailedToMoveTrack" 71 static constexpr
const char*
name 73 "mpris.TrackList.Error.FailedToFindMoveTrackSource" 79 static constexpr
const char*
name 81 "mpris.TrackList.Error.FailedToFindMoveTrackDest" 87 static constexpr
const char*
name 89 "mpris.TrackList.Error.TrackNotFound" 94 DBUS_CPP_METHOD_DEF(GetTracksMetadata,
TrackList)
95 DBUS_CPP_METHOD_DEF(GetTracksUri,
TrackList)
99 DBUS_CPP_METHOD_DEF(RemoveTrack,
TrackList)
132 BOOST_IDENTITY_TYPE((std::tuple<core::ubuntu::media::Track::Id, core::ubuntu::media::Track::Id>))
158 TrackMetadataChanged,
160 BOOST_IDENTITY_TYPE((std::tuple<std::map<std::string, dbus::types::Variant>, dbus::types::ObjectPath>))
168 DBUS_CPP_READABLE_PROPERTY_DEF(Tracks,
TrackList, std::vector<core::ubuntu::media::Track::Id>)
169 DBUS_CPP_READABLE_PROPERTY_DEF(CanEditTracks,
TrackList,
bool)
176 static const std::vector<std::string> instance;
return instance;
187 Properties::Tracks::ValueType tracks{std::vector<core::ubuntu::media::Track::Id>()};
188 Properties::CanEditTracks::ValueType can_edit_tracks{
true};
193 : configuration(configuration),
196 configuration.
object->template get_property<Properties::Tracks>(),
197 configuration.
object->template get_property<Properties::CanEditTracks>(),
201 configuration.object->template get_signal<Signals::TrackListReplaced>(),
202 configuration.object->template get_signal<Signals::TrackAdded>(),
203 configuration.object->template get_signal<Signals::TracksAdded>(),
204 configuration.object->template get_signal<Signals::TrackMoved>(),
205 configuration.object->template get_signal<Signals::TrackRemoved>(),
206 configuration.object->template get_signal<Signals::TrackChanged>(),
207 configuration.object->template get_signal<Signals::TrackListReset>(),
208 configuration.object->template get_signal<Signals::TrackMetadataChanged>(),
209 configuration.object->template get_signal<core::dbus::interfaces::Properties::Signals::PropertiesChanged>()
213 properties.tracks->set(configuration.defaults.tracks);
214 properties.can_edit_tracks->set(configuration.defaults.can_edit_tracks);
217 template<
typename Property>
221 dict[Property::name()] = dbus::types::Variant::encode(value);
223 signals.properties_changed->emit(std::make_tuple(
224 dbus::traits::Service<TrackList>::interface_name(),
226 the_empty_list_of_invalidated_properties()));
231 std::map<std::string, core::dbus::types::Variant> dict;
232 dict[Properties::Tracks::name()] = core::dbus::types::Variant::encode(properties.tracks->get());
233 dict[Properties::CanEditTracks::name()] = core::dbus::types::Variant::encode(properties.can_edit_tracks->get());
242 std::shared_ptr<core::dbus::Property<Properties::Tracks>>
tracks;
248 core::dbus::Signal<Signals::TrackListReplaced, Signals::TrackListReplaced::ArgumentType>::Ptr
tracklist_replaced;
249 core::dbus::Signal<Signals::TrackAdded, Signals::TrackAdded::ArgumentType>::Ptr
track_added;
250 core::dbus::Signal<Signals::TracksAdded, Signals::TracksAdded::ArgumentType>::Ptr
tracks_added;
251 core::dbus::Signal<Signals::TrackMoved, Signals::TrackMoved::ArgumentType>::Ptr
track_moved;
252 core::dbus::Signal<Signals::TrackRemoved, Signals::TrackRemoved::ArgumentType>::Ptr
track_removed;
253 core::dbus::Signal<Signals::TrackChanged, Signals::TrackChanged::ArgumentType>::Ptr
track_changed;
254 core::dbus::Signal<Signals::TrackListReset, Signals::TrackListReset::ArgumentType>::Ptr
track_list_reset;
255 core::dbus::Signal<Signals::TrackMetadataChanged, Signals::TrackMetadataChanged::ArgumentType>::Ptr
track_metadata_changed;
257 dbus::Signal <core::dbus::interfaces::Properties::Signals::PropertiesChanged,
258 core::dbus::interfaces::Properties::Signals::PropertiesChanged::ArgumentType
265 #endif // MPRIS_TRACK_LIST_H_ core::dbus::Object::Ptr object
std::shared_ptr< core::dbus::Property< Properties::Tracks > > tracks
dbus::Signal< core::dbus::interfaces::Properties::Signals::PropertiesChanged, core::dbus::interfaces::Properties::Signals::PropertiesChanged::ArgumentType >::Ptr properties_changed
core::dbus::Signal< Signals::TracksAdded, Signals::TracksAdded::ArgumentType >::Ptr tracks_added
static const std::vector< std::string > & the_empty_list_of_invalidated_properties()
core::dbus::Signal< Signals::TrackListReplaced, Signals::TrackListReplaced::ArgumentType >::Ptr tracklist_replaced
core::dbus::Signal< Signals::TrackListReset, Signals::TrackListReset::ArgumentType >::Ptr track_list_reset
static constexpr const char * name
core::dbus::Signal< Signals::TrackMetadataChanged, Signals::TrackMetadataChanged::ArgumentType >::Ptr track_metadata_changed
std::map< std::string, core::dbus::types::Variant > get_all_properties()
Skeleton(const Configuration &configuration)
core::dbus::Signal< Signals::TrackAdded, Signals::TrackAdded::ArgumentType >::Ptr track_added
static const std::string & name()
std::map< std::string, core::dbus::types::Variant > Dictionary
void on_property_value_changed(const typename Property::ValueType &value)
Configuration configuration
core::dbus::Signal< Signals::TrackRemoved, Signals::TrackRemoved::ArgumentType >::Ptr track_removed
core::dbus::Signal< Signals::TrackMoved, Signals::TrackMoved::ArgumentType >::Ptr track_moved
core::dbus::Signal< Signals::TrackChanged, Signals::TrackChanged::ArgumentType >::Ptr track_changed
std::shared_ptr< core::dbus::Property< Properties::CanEditTracks > > can_edit_tracks