Merge lp:~thomas-voss/media-hub/rebuild-against-dbus-cpp into lp:media-hub

Proposed by Thomas Voß
Status: Superseded
Proposed branch: lp:~thomas-voss/media-hub/rebuild-against-dbus-cpp
Merge into: lp:media-hub
Diff against target: 678 lines (+292/-32) (has conflicts)
13 files modified
CMakeLists.txt (+5/-0)
README (+4/-0)
debian/changelog (+20/-0)
include/core/media/track_list.h (+18/-1)
src/core/media/mpris/track_list.h (+21/-0)
src/core/media/player_implementation.cpp (+12/-0)
src/core/media/track_list.cpp (+5/-0)
src/core/media/track_list_implementation.cpp (+74/-23)
src/core/media/track_list_implementation.h (+1/-0)
src/core/media/track_list_skeleton.cpp (+85/-5)
src/core/media/track_list_skeleton.h (+2/-0)
src/core/media/track_list_stub.cpp (+43/-3)
src/core/media/track_list_stub.h (+2/-0)
Text conflict in CMakeLists.txt
Text conflict in debian/changelog
To merge this branch: bzr merge lp:~thomas-voss/media-hub/rebuild-against-dbus-cpp
Reviewer Review Type Date Requested Status
Ubuntu Phablet Team Pending
Review via email: mp+277222@code.launchpad.net

This proposal has been superseded by a proposal from 2015-11-11.

Commit message

Version bump to force rebuild.

Description of the change

Version bump to force rebuild.

To post a comment you must log in.

Unmerged revisions

163. By Thomas Voß

Version bump to force rebuild.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2015-10-16 08:32:58 +0000
+++ CMakeLists.txt 2015-11-11 09:47:06 +0000
@@ -2,8 +2,13 @@
22
3project(ubuntu-media-hub)3project(ubuntu-media-hub)
44
5<<<<<<< TREE
5set(UBUNTU_MEDIA_HUB_VERSION_MAJOR 4)6set(UBUNTU_MEDIA_HUB_VERSION_MAJOR 4)
6set(UBUNTU_MEDIA_HUB_VERSION_MINOR 1)7set(UBUNTU_MEDIA_HUB_VERSION_MINOR 1)
8=======
9set(UBUNTU_MEDIA_HUB_VERSION_MAJOR 3)
10set(UBUNTU_MEDIA_HUB_VERSION_MINOR 3)
11>>>>>>> MERGE-SOURCE
7set(UBUNTU_MEDIA_HUB_VERSION_PATCH 0)12set(UBUNTU_MEDIA_HUB_VERSION_PATCH 0)
813
9set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fPIC -pthread")14set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fPIC -pthread")
1015
=== modified file 'README'
--- README 2015-09-09 14:08:12 +0000
+++ README 2015-11-11 09:47:06 +0000
@@ -6,6 +6,10 @@
66
7https://google-styleguide.googlecode.com/svn/trunk/cppguide.html7https://google-styleguide.googlecode.com/svn/trunk/cppguide.html
88
9Deviations from the Google Style Guide above:
10
111. We will agree to maximum of 100 characters in a single line instead of 80.
12
913
10To Build:14To Build:
11---------15---------
1216
=== modified file 'debian/changelog'
--- debian/changelog 2015-10-16 08:42:28 +0000
+++ debian/changelog 2015-11-11 09:47:06 +0000
@@ -1,3 +1,4 @@
1<<<<<<< TREE
1media-hub (4.1.0+15.10.20151016.1-0ubuntu1) wily; urgency=medium2media-hub (4.1.0+15.10.20151016.1-0ubuntu1) wily; urgency=medium
23
3 [ Simon Fels ]4 [ Simon Fels ]
@@ -9,6 +10,25 @@
9 being freed. Also, remove unneeded unrefs that must be performed in10 being freed. Also, remove unneeded unrefs that must be performed in
10 gstreamer instead.11 gstreamer instead.
11 * Emit CanPlay, CanPause, and CanGo[Next|Previous] in the mpris object path12 * Emit CanPlay, CanPause, and CanGo[Next|Previous] in the mpris object path
13=======
14media-hub (3.3.0+15.04.20151023.3-0ubuntu2) UNRELEASED; urgency=medium
15
16 * Version bump to force rebuild.
17
18 -- Thomas Voß <thomas.voss@canonical.com> Wed, 11 Nov 2015 10:34:27 +0100
19
20media-hub (3.3.0+15.04.20151023.3-0ubuntu1) vivid; urgency=medium
21
22 [ Jim Hodapp ]
23 * Add batch adding of tracks to the TrackList.
24
25 [ CI Train Bot ]
26 * New rebuild forced.
27
28 -- Jim Hodapp <ci-train-bot@canonical.com> Fri, 23 Oct 2015 19:07:52 +0000
29
30media-hub (3.2.0+15.04.20151014-0ubuntu1) vivid; urgency=medium
31>>>>>>> MERGE-SOURCE
1232
13 [ Jim Hodapp ]33 [ Jim Hodapp ]
14 * Make sure the correct player is set as the current player controled by34 * Make sure the correct player is set as the current player controled by
1535
=== modified file 'include/core/media/track_list.h'
--- include/core/media/track_list.h 2015-07-20 20:39:42 +0000
+++ include/core/media/track_list.h 2015-11-11 09:47:06 +0000
@@ -41,10 +41,21 @@
41{41{
42 public:42 public:
43 typedef std::vector<Track::Id> Container;43 typedef std::vector<Track::Id> Container;
44 typedef std::vector<Track::UriType> ContainerURI;
44 typedef std::tuple<std::vector<Track::Id>, Track::Id> ContainerTrackIdTuple;45 typedef std::tuple<std::vector<Track::Id>, Track::Id> ContainerTrackIdTuple;
45 typedef Container::iterator Iterator;46 typedef Container::iterator Iterator;
46 typedef Container::const_iterator ConstIterator;47 typedef Container::const_iterator ConstIterator;
4748
49 struct Errors
50 {
51 Errors() = delete;
52
53 struct InsufficientPermissionsToAddTrack : public std::runtime_error
54 {
55 InsufficientPermissionsToAddTrack();
56 };
57 };
58
48 static const Track::Id& after_empty_track();59 static const Track::Id& after_empty_track();
4960
50 TrackList(const TrackList&) = delete;61 TrackList(const TrackList&) = delete;
@@ -65,9 +76,12 @@
65 /** Gets the URI for a given Track. */76 /** Gets the URI for a given Track. */
66 virtual Track::UriType query_uri_for_track(const Track::Id& id) = 0;77 virtual Track::UriType query_uri_for_track(const Track::Id& id) = 0;
6778
68 /** Adds a URI in the TrackList. */79 /** Adds a URI into the TrackList. */
69 virtual void add_track_with_uri_at(const Track::UriType& uri, const Track::Id& position, bool make_current) = 0;80 virtual void add_track_with_uri_at(const Track::UriType& uri, const Track::Id& position, bool make_current) = 0;
7081
82 /** Adds a list of URIs into the TrackList. */
83 virtual void add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position) = 0;
84
71 /** Removes a Track from the TrackList. */85 /** Removes a Track from the TrackList. */
72 virtual void remove_track(const Track::Id& id) = 0;86 virtual void remove_track(const Track::Id& id) = 0;
7387
@@ -103,6 +117,9 @@
103 /** Indicates that a track has been added to the track list. */117 /** Indicates that a track has been added to the track list. */
104 virtual const core::Signal<Track::Id>& on_track_added() const = 0;118 virtual const core::Signal<Track::Id>& on_track_added() const = 0;
105119
120 /** Indicates that one or more tracks have been added to the track list. */
121 virtual const core::Signal<ContainerURI>& on_tracks_added() const = 0;
122
106 /** Indicates that a track has been removed from the track list. */123 /** Indicates that a track has been removed from the track list. */
107 virtual const core::Signal<Track::Id>& on_track_removed() const = 0;124 virtual const core::Signal<Track::Id>& on_track_removed() const = 0;
108125
109126
=== modified file 'src/core/media/mpris/track_list.h'
--- src/core/media/mpris/track_list.h 2015-07-27 22:15:33 +0000
+++ src/core/media/mpris/track_list.h 2015-11-11 09:47:06 +0000
@@ -48,9 +48,21 @@
48 return s;48 return s;
49 }49 }
5050
51 struct Error
52 {
53 struct InsufficientPermissionsToAddTrack
54 {
55 static constexpr const char* name
56 {
57 "mpris.TrackList.Error.InsufficientPermissionsToAddTrack"
58 };
59 };
60 };
61
51 DBUS_CPP_METHOD_DEF(GetTracksMetadata, TrackList)62 DBUS_CPP_METHOD_DEF(GetTracksMetadata, TrackList)
52 DBUS_CPP_METHOD_DEF(GetTracksUri, TrackList)63 DBUS_CPP_METHOD_DEF(GetTracksUri, TrackList)
53 DBUS_CPP_METHOD_DEF(AddTrack, TrackList)64 DBUS_CPP_METHOD_DEF(AddTrack, TrackList)
65 DBUS_CPP_METHOD_DEF(AddTracks, TrackList)
54 DBUS_CPP_METHOD_DEF(RemoveTrack, TrackList)66 DBUS_CPP_METHOD_DEF(RemoveTrack, TrackList)
55 DBUS_CPP_METHOD_DEF(GoTo, TrackList)67 DBUS_CPP_METHOD_DEF(GoTo, TrackList)
56 DBUS_CPP_METHOD_DEF(Reset, TrackList)68 DBUS_CPP_METHOD_DEF(Reset, TrackList)
@@ -75,6 +87,13 @@
7587
76 DBUS_CPP_SIGNAL_DEF88 DBUS_CPP_SIGNAL_DEF
77 (89 (
90 TracksAdded,
91 TrackList,
92 core::ubuntu::media::TrackList::ContainerURI
93 )
94
95 DBUS_CPP_SIGNAL_DEF
96 (
78 TrackRemoved,97 TrackRemoved,
79 TrackList,98 TrackList,
80 core::ubuntu::media::Track::Id99 core::ubuntu::media::Track::Id
@@ -134,6 +153,7 @@
134 {153 {
135 configuration.object->template get_signal<Signals::TrackListReplaced>(),154 configuration.object->template get_signal<Signals::TrackListReplaced>(),
136 configuration.object->template get_signal<Signals::TrackAdded>(),155 configuration.object->template get_signal<Signals::TrackAdded>(),
156 configuration.object->template get_signal<Signals::TracksAdded>(),
137 configuration.object->template get_signal<Signals::TrackRemoved>(),157 configuration.object->template get_signal<Signals::TrackRemoved>(),
138 configuration.object->template get_signal<Signals::TrackChanged>(),158 configuration.object->template get_signal<Signals::TrackChanged>(),
139 configuration.object->template get_signal<Signals::TrackMetadataChanged>(),159 configuration.object->template get_signal<Signals::TrackMetadataChanged>(),
@@ -178,6 +198,7 @@
178 {198 {
179 core::dbus::Signal<Signals::TrackListReplaced, Signals::TrackListReplaced::ArgumentType>::Ptr tracklist_replaced;199 core::dbus::Signal<Signals::TrackListReplaced, Signals::TrackListReplaced::ArgumentType>::Ptr tracklist_replaced;
180 core::dbus::Signal<Signals::TrackAdded, Signals::TrackAdded::ArgumentType>::Ptr track_added;200 core::dbus::Signal<Signals::TrackAdded, Signals::TrackAdded::ArgumentType>::Ptr track_added;
201 core::dbus::Signal<Signals::TracksAdded, Signals::TracksAdded::ArgumentType>::Ptr tracks_added;
181 core::dbus::Signal<Signals::TrackRemoved, Signals::TrackRemoved::ArgumentType>::Ptr track_removed;202 core::dbus::Signal<Signals::TrackRemoved, Signals::TrackRemoved::ArgumentType>::Ptr track_removed;
182 core::dbus::Signal<Signals::TrackChanged, Signals::TrackChanged::ArgumentType>::Ptr track_changed;203 core::dbus::Signal<Signals::TrackChanged, Signals::TrackChanged::ArgumentType>::Ptr track_changed;
183 core::dbus::Signal<Signals::TrackMetadataChanged, Signals::TrackMetadataChanged::ArgumentType>::Ptr track_metadata_changed;204 core::dbus::Signal<Signals::TrackMetadataChanged, Signals::TrackMetadataChanged::ArgumentType>::Ptr track_metadata_changed;
184205
=== modified file 'src/core/media/player_implementation.cpp'
--- src/core/media/player_implementation.cpp 2015-09-29 11:07:54 +0000
+++ src/core/media/player_implementation.cpp 2015-11-11 09:47:06 +0000
@@ -547,6 +547,18 @@
547 d->update_mpris_properties();547 d->update_mpris_properties();
548 });548 });
549549
550 d->track_list->on_tracks_added().connect([this](const media::TrackList::ContainerURI& tracks)
551 {
552 std::cout << "** Track was added, handling in PlayerImplementation" << std::endl;
553 // If the two sizes are the same, that means the TrackList was previously empty and we need
554 // to open the first track in the TrackList so that is_audio_source() and is_video_source()
555 // will function correctly.
556 if (tracks.size() >= 1 and d->track_list->tracks()->size() == tracks.size())
557 d->open_first_track_from_tracklist(tracks.front());
558
559 d->update_mpris_properties();
560 });
561
550 d->track_list->on_track_removed().connect([this](const media::Track::Id&)562 d->track_list->on_track_removed().connect([this](const media::Track::Id&)
551 {563 {
552 d->update_mpris_properties();564 d->update_mpris_properties();
553565
=== modified file 'src/core/media/track_list.cpp'
--- src/core/media/track_list.cpp 2015-07-20 20:39:42 +0000
+++ src/core/media/track_list.cpp 2015-11-11 09:47:06 +0000
@@ -20,6 +20,11 @@
2020
21namespace media = core::ubuntu::media;21namespace media = core::ubuntu::media;
2222
23media::TrackList::Errors::InsufficientPermissionsToAddTrack::InsufficientPermissionsToAddTrack()
24 : std::runtime_error{"Insufficient client permissions for adding track to TrackList"}
25{
26}
27
23const media::Track::Id& media::TrackList::after_empty_track()28const media::Track::Id& media::TrackList::after_empty_track()
24{29{
25 static const media::Track::Id id{"/org/mpris/MediaPlayer2/TrackList/NoTrack"};30 static const media::Track::Id id{"/org/mpris/MediaPlayer2/TrackList/NoTrack"};
2631
=== modified file 'src/core/media/track_list_implementation.cpp'
--- src/core/media/track_list_implementation.cpp 2015-09-28 13:20:01 +0000
+++ src/core/media/track_list_implementation.cpp 2015-11-11 09:47:06 +0000
@@ -20,6 +20,9 @@
20#include <stdio.h>20#include <stdio.h>
21#include <stdlib.h>21#include <stdlib.h>
22#include <tuple>22#include <tuple>
23#include <unistd.h>
24
25#include <dbus/dbus.h>
2326
24#include "track_list_implementation.h"27#include "track_list_implementation.h"
2528
@@ -39,6 +42,30 @@
39 // Used for caching the original tracklist order to be used to restore the order42 // Used for caching the original tracklist order to be used to restore the order
40 // to the live TrackList after shuffle is turned off43 // to the live TrackList after shuffle is turned off
41 media::TrackList::Container original_tracklist;44 media::TrackList::Container original_tracklist;
45
46 void updateCachedTrackMetadata(const media::Track::Id& id, const media::Track::UriType& uri)
47 {
48 if (meta_data_cache.count(id) == 0)
49 {
50 // FIXME: This code seems to conflict badly when called multiple times in a row: causes segfaults
51#if 0
52 try {
53 meta_data_cache[id] = std::make_tuple(
54 uri,
55 extractor->meta_data_for_track_with_uri(uri));
56 } catch (const std::runtime_error &e) {
57 std::cerr << "Failed to retrieve metadata for track '" << uri << "' (" << e.what() << ")" << std::endl;
58 }
59#else
60 meta_data_cache[id] = std::make_tuple(
61 uri,
62 core::ubuntu::media::Track::MetaData{});
63#endif
64 } else
65 {
66 std::get<0>(meta_data_cache[id]) = uri;
67 }
68 }
42};69};
4370
44media::TrackListImplementation::TrackListImplementation(71media::TrackListImplementation::TrackListImplementation(
@@ -84,7 +111,8 @@
84{111{
85 std::cout << __PRETTY_FUNCTION__ << std::endl;112 std::cout << __PRETTY_FUNCTION__ << std::endl;
86113
87 std::stringstream ss; ss << d->object->path().as_string() << "/" << d->track_counter++;114 std::stringstream ss;
115 ss << d->object->path().as_string() << "/" << d->track_counter++;
88 Track::Id id{ss.str()};116 Track::Id id{ss.str()};
89117
90 std::cout << "Adding Track::Id: " << id << std::endl;118 std::cout << "Adding Track::Id: " << id << std::endl;
@@ -101,26 +129,7 @@
101129
102 if (result)130 if (result)
103 {131 {
104 if (d->meta_data_cache.count(id) == 0)132 d->updateCachedTrackMetadata(id, uri);
105 {
106 // FIXME: This code seems to conflict badly when called multiple times in a row: causes segfaults
107#if 0
108 try {
109 d->meta_data_cache[id] = std::make_tuple(
110 uri,
111 d->extractor->meta_data_for_track_with_uri(uri));
112 } catch (const std::runtime_error &e) {
113 std::cerr << "Failed to retrieve metadata for track '" << uri << "' (" << e.what() << ")" << std::endl;
114 }
115#else
116 d->meta_data_cache[id] = std::make_tuple(
117 uri,
118 core::ubuntu::media::Track::MetaData{});
119#endif
120 } else
121 {
122 std::get<0>(d->meta_data_cache[id]) = uri;
123 }
124133
125 if (make_current)134 if (make_current)
126 {135 {
@@ -138,8 +147,50 @@
138 std::cout << "Signaling that we just added track id: " << id << std::endl;147 std::cout << "Signaling that we just added track id: " << id << std::endl;
139 // Signal to the client that a track was added to the TrackList148 // Signal to the client that a track was added to the TrackList
140 on_track_added()(id);149 on_track_added()(id);
141 std::cout << "Signaled that we just added track id: " << id << std::endl;150 }
142 }151}
152
153void media::TrackListImplementation::add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position)
154{
155 std::cout << __PRETTY_FUNCTION__ << std::endl;
156
157 ContainerURI tmp;
158 for (const auto uri : uris)
159 {
160 // TODO: Refactor this code to use a smaller common function shared with add_track_with_uri_at()
161 std::stringstream ss;
162 ss << d->object->path().as_string() << "/" << d->track_counter++;
163 Track::Id id{ss.str()};
164 std::cout << "Adding Track::Id: " << id << std::endl;
165 std::cout << "\tURI: " << uri << std::endl;
166
167 tmp.push_back(id);
168
169 Track::Id insert_position = position;
170
171 auto it = std::find(tracks().get().begin(), tracks().get().end(), insert_position);
172 auto result = tracks().update([this, id, position, it, &insert_position](TrackList::Container& container)
173 {
174 container.insert(it, id);
175 // Make sure the next insert position is after the current insert position
176 // Update the Track::Id after which to insert the next one from uris
177 insert_position = id;
178
179 return true;
180 });
181
182 if (result)
183 {
184 d->updateCachedTrackMetadata(id, uri);
185
186 // Signal to the client that the current track has changed for the first track added to the TrackList
187 if (tracks().get().size() == 1)
188 on_track_changed()(id);
189 }
190 }
191
192 std::cout << "Signaling that we just added " << tmp.size() << " tracks to the TrackList" << std::endl;
193 on_tracks_added()(tmp);
143}194}
144195
145void media::TrackListImplementation::remove_track(const media::Track::Id& id)196void media::TrackListImplementation::remove_track(const media::Track::Id& id)
146197
=== modified file 'src/core/media/track_list_implementation.h'
--- src/core/media/track_list_implementation.h 2015-05-22 21:19:28 +0000
+++ src/core/media/track_list_implementation.h 2015-11-11 09:47:06 +0000
@@ -43,6 +43,7 @@
43 Track::MetaData query_meta_data_for_track(const Track::Id& id);43 Track::MetaData query_meta_data_for_track(const Track::Id& id);
4444
45 void add_track_with_uri_at(const Track::UriType& uri, const Track::Id& position, bool make_current);45 void add_track_with_uri_at(const Track::UriType& uri, const Track::Id& position, bool make_current);
46 void add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position);
46 void remove_track(const Track::Id& id);47 void remove_track(const Track::Id& id);
4748
48 void go_to(const Track::Id& track, bool toggle_player_state);49 void go_to(const Track::Id& track, bool toggle_player_state);
4950
=== modified file 'src/core/media/track_list_skeleton.cpp'
--- src/core/media/track_list_skeleton.cpp 2015-09-28 15:31:46 +0000
+++ src/core/media/track_list_skeleton.cpp 2015-11-11 09:47:06 +0000
@@ -59,6 +59,7 @@
59 signals59 signals
60 {60 {
61 skeleton.signals.track_added,61 skeleton.signals.track_added,
62 skeleton.signals.tracks_added,
62 skeleton.signals.track_removed,63 skeleton.signals.track_removed,
63 skeleton.signals.track_changed,64 skeleton.signals.track_changed,
64 skeleton.signals.tracklist_replaced65 skeleton.signals.tracklist_replaced
@@ -93,9 +94,12 @@
93 void handle_add_track_with_uri_at(const core::dbus::Message::Ptr& msg)94 void handle_add_track_with_uri_at(const core::dbus::Message::Ptr& msg)
94 {95 {
95 std::cout << "*** " << __PRETTY_FUNCTION__ << std::endl;96 std::cout << "*** " << __PRETTY_FUNCTION__ << std::endl;
96 request_context_resolver->resolve_context_for_dbus_name_async(msg->sender(), [this, msg](const media::apparmor::ubuntu::Context& context)97 request_context_resolver->resolve_context_for_dbus_name_async
98 (msg->sender(), [this, msg](const media::apparmor::ubuntu::Context& context)
97 {99 {
98 Track::UriType uri; media::Track::Id after; bool make_current;100 Track::UriType uri;
101 media::Track::Id after;
102 bool make_current;
99 msg->reader() >> uri >> after >> make_current;103 msg->reader() >> uri >> after >> make_current;
100104
101 // Make sure the client has adequate apparmor permissions to open the URI105 // Make sure the client has adequate apparmor permissions to open the URI
@@ -104,10 +108,63 @@
104 auto reply = dbus::Message::make_method_return(msg);108 auto reply = dbus::Message::make_method_return(msg);
105 // Only add the track to the TrackList if it passes the apparmor permissions check109 // Only add the track to the TrackList if it passes the apparmor permissions check
106 if (std::get<0>(result))110 if (std::get<0>(result))
111 {
107 impl->add_track_with_uri_at(uri, after, make_current);112 impl->add_track_with_uri_at(uri, after, make_current);
108 else113 }
109 std::cerr << "Warning: Not adding track " << uri <<114 else
110 " to TrackList because of inadequate client apparmor permissions." << std::endl;115 {
116 const std::string err_str = {"Warning: Not adding track " + uri +
117 " to TrackList because of inadequate client apparmor permissions."};
118 std::cerr << err_str << std::endl;
119 reply = dbus::Message::make_error(
120 msg,
121 mpris::TrackList::Error::InsufficientPermissionsToAddTrack::name,
122 err_str);
123 }
124
125 bus->send(reply);
126 });
127 }
128
129 void handle_add_tracks_with_uri_at(const core::dbus::Message::Ptr& msg)
130 {
131 std::cout << "*** " << __PRETTY_FUNCTION__ << std::endl;
132 request_context_resolver->resolve_context_for_dbus_name_async
133 (msg->sender(), [this, msg](const media::apparmor::ubuntu::Context& context)
134 {
135 ContainerURI uris;
136 media::Track::Id after;
137 msg->reader() >> uris >> after;
138
139 media::apparmor::ubuntu::RequestAuthenticator::Result result;
140 std::string err_str;
141 for (const auto uri : uris)
142 {
143 // Make sure the client has adequate apparmor permissions to open the URI
144 result = request_authenticator->authenticate_open_uri_request(context, uri);
145 if (not std::get<0>(result))
146 {
147 err_str = {"Warning: Not adding track " + uri +
148 " to TrackList because of inadequate client apparmor permissions."};
149 break;
150 }
151 }
152
153 core::dbus::Message::Ptr reply;
154 // Only add the track to the TrackList if it passes the apparmor permissions check
155 if (std::get<0>(result))
156 {
157 reply = dbus::Message::make_method_return(msg);
158 impl->add_tracks_with_uri_at(uris, after);
159 }
160 else
161 {
162 std::cerr << err_str << std::endl;
163 reply = dbus::Message::make_error(
164 msg,
165 mpris::TrackList::Error::InsufficientPermissionsToAddTrack::name,
166 err_str);
167 }
111168
112 bus->send(reply);169 bus->send(reply);
113 });170 });
@@ -159,11 +216,13 @@
159 struct Signals216 struct Signals
160 {217 {
161 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackAdded, mpris::TrackList::Signals::TrackAdded::ArgumentType> DBusTrackAddedSignal;218 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackAdded, mpris::TrackList::Signals::TrackAdded::ArgumentType> DBusTrackAddedSignal;
219 typedef core::dbus::Signal<mpris::TrackList::Signals::TracksAdded, mpris::TrackList::Signals::TracksAdded::ArgumentType> DBusTracksAddedSignal;
162 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackRemoved, mpris::TrackList::Signals::TrackRemoved::ArgumentType> DBusTrackRemovedSignal;220 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackRemoved, mpris::TrackList::Signals::TrackRemoved::ArgumentType> DBusTrackRemovedSignal;
163 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackChanged, mpris::TrackList::Signals::TrackChanged::ArgumentType> DBusTrackChangedSignal;221 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackChanged, mpris::TrackList::Signals::TrackChanged::ArgumentType> DBusTrackChangedSignal;
164 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackListReplaced, mpris::TrackList::Signals::TrackListReplaced::ArgumentType> DBusTrackListReplacedSignal;222 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackListReplaced, mpris::TrackList::Signals::TrackListReplaced::ArgumentType> DBusTrackListReplacedSignal;
165223
166 Signals(const std::shared_ptr<DBusTrackAddedSignal>& remote_track_added,224 Signals(const std::shared_ptr<DBusTrackAddedSignal>& remote_track_added,
225 const std::shared_ptr<DBusTracksAddedSignal>& remote_tracks_added,
167 const std::shared_ptr<DBusTrackRemovedSignal>& remote_track_removed,226 const std::shared_ptr<DBusTrackRemovedSignal>& remote_track_removed,
168 const std::shared_ptr<DBusTrackChangedSignal>& remote_track_changed,227 const std::shared_ptr<DBusTrackChangedSignal>& remote_track_changed,
169 const std::shared_ptr<DBusTrackListReplacedSignal>& remote_track_list_replaced)228 const std::shared_ptr<DBusTrackListReplacedSignal>& remote_track_list_replaced)
@@ -174,6 +233,11 @@
174 remote_track_added->emit(id);233 remote_track_added->emit(id);
175 });234 });
176235
236 on_tracks_added.connect([remote_tracks_added](const media::TrackList::ContainerURI &tracks)
237 {
238 remote_tracks_added->emit(tracks);
239 });
240
177 on_track_removed.connect([remote_track_removed](const media::Track::Id &id)241 on_track_removed.connect([remote_track_removed](const media::Track::Id &id)
178 {242 {
179 remote_track_removed->emit(id);243 remote_track_removed->emit(id);
@@ -191,6 +255,7 @@
191 }255 }
192256
193 core::Signal<Track::Id> on_track_added;257 core::Signal<Track::Id> on_track_added;
258 core::Signal<TrackList::ContainerURI> on_tracks_added;
194 core::Signal<Track::Id> on_track_removed;259 core::Signal<Track::Id> on_track_removed;
195 core::Signal<Track::Id> on_track_changed;260 core::Signal<Track::Id> on_track_changed;
196 core::Signal<TrackList::ContainerTrackIdTuple> on_track_list_replaced;261 core::Signal<TrackList::ContainerTrackIdTuple> on_track_list_replaced;
@@ -219,6 +284,11 @@
219 std::ref(d),284 std::ref(d),
220 std::placeholders::_1));285 std::placeholders::_1));
221286
287 d->object->install_method_handler<mpris::TrackList::AddTracks>(
288 std::bind(&Private::handle_add_tracks_with_uri_at,
289 std::ref(d),
290 std::placeholders::_1));
291
222 d->object->install_method_handler<mpris::TrackList::RemoveTrack>(292 d->object->install_method_handler<mpris::TrackList::RemoveTrack>(
223 std::bind(&Private::handle_remove_track,293 std::bind(&Private::handle_remove_track,
224 std::ref(d),294 std::ref(d),
@@ -490,6 +560,11 @@
490 return d->signals.on_track_added;560 return d->signals.on_track_added;
491}561}
492562
563const core::Signal<media::TrackList::ContainerURI>& media::TrackListSkeleton::on_tracks_added() const
564{
565 return d->signals.on_tracks_added;
566}
567
493const core::Signal<media::Track::Id>& media::TrackListSkeleton::on_track_removed() const568const core::Signal<media::Track::Id>& media::TrackListSkeleton::on_track_removed() const
494{569{
495 return d->signals.on_track_removed;570 return d->signals.on_track_removed;
@@ -520,6 +595,11 @@
520 return d->signals.on_track_added;595 return d->signals.on_track_added;
521}596}
522597
598core::Signal<media::TrackList::ContainerURI>& media::TrackListSkeleton::on_tracks_added()
599{
600 return d->signals.on_tracks_added;
601}
602
523core::Signal<media::Track::Id>& media::TrackListSkeleton::on_track_removed()603core::Signal<media::Track::Id>& media::TrackListSkeleton::on_track_removed()
524{604{
525 return d->signals.on_track_removed;605 return d->signals.on_track_removed;
526606
=== modified file 'src/core/media/track_list_skeleton.h'
--- src/core/media/track_list_skeleton.h 2015-09-28 13:20:01 +0000
+++ src/core/media/track_list_skeleton.h 2015-11-11 09:47:06 +0000
@@ -54,6 +54,8 @@
54 core::Signal<ContainerTrackIdTuple>& on_track_list_replaced();54 core::Signal<ContainerTrackIdTuple>& on_track_list_replaced();
55 const core::Signal<Track::Id>& on_track_added() const;55 const core::Signal<Track::Id>& on_track_added() const;
56 core::Signal<Track::Id>& on_track_added();56 core::Signal<Track::Id>& on_track_added();
57 const core::Signal<ContainerURI>& on_tracks_added() const;
58 core::Signal<ContainerURI>& on_tracks_added();
57 const core::Signal<Track::Id>& on_track_removed() const;59 const core::Signal<Track::Id>& on_track_removed() const;
58 const core::Signal<Track::Id>& on_track_changed() const;60 const core::Signal<Track::Id>& on_track_changed() const;
59 core::Signal<Track::Id>& on_track_changed();61 core::Signal<Track::Id>& on_track_changed();
6062
=== modified file 'src/core/media/track_list_stub.cpp'
--- src/core/media/track_list_stub.cpp 2015-07-27 22:15:33 +0000
+++ src/core/media/track_list_stub.cpp 2015-11-11 09:47:06 +0000
@@ -52,6 +52,7 @@
52 signals52 signals
53 {53 {
54 object->get_signal<mpris::TrackList::Signals::TrackAdded>(),54 object->get_signal<mpris::TrackList::Signals::TrackAdded>(),
55 object->get_signal<mpris::TrackList::Signals::TracksAdded>(),
55 object->get_signal<mpris::TrackList::Signals::TrackRemoved>(),56 object->get_signal<mpris::TrackList::Signals::TrackRemoved>(),
56 object->get_signal<mpris::TrackList::Signals::TrackListReplaced>(),57 object->get_signal<mpris::TrackList::Signals::TrackListReplaced>(),
57 object->get_signal<mpris::TrackList::Signals::TrackChanged>()58 object->get_signal<mpris::TrackList::Signals::TrackChanged>()
@@ -70,21 +71,25 @@
70 struct Signals71 struct Signals
71 {72 {
72 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackAdded, mpris::TrackList::Signals::TrackAdded::ArgumentType> DBusTrackAddedSignal;73 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackAdded, mpris::TrackList::Signals::TrackAdded::ArgumentType> DBusTrackAddedSignal;
74 typedef core::dbus::Signal<mpris::TrackList::Signals::TracksAdded, mpris::TrackList::Signals::TracksAdded::ArgumentType> DBusTracksAddedSignal;
73 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackRemoved, mpris::TrackList::Signals::TrackRemoved::ArgumentType> DBusTrackRemovedSignal;75 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;76 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 typedef core::dbus::Signal<mpris::TrackList::Signals::TrackChanged, mpris::TrackList::Signals::TrackChanged::ArgumentType> DBusTrackChangedSignal;
7678
77 Signals(const std::shared_ptr<DBusTrackAddedSignal>& track_added,79 Signals(const std::shared_ptr<DBusTrackAddedSignal>& track_added,
80 const std::shared_ptr<DBusTracksAddedSignal>& tracks_added,
78 const std::shared_ptr<DBusTrackRemovedSignal>& track_removed,81 const std::shared_ptr<DBusTrackRemovedSignal>& track_removed,
79 const std::shared_ptr<DBusTrackListReplacedSignal>& track_list_replaced,82 const std::shared_ptr<DBusTrackListReplacedSignal>& track_list_replaced,
80 const std::shared_ptr<DBusTrackChangedSignal>& track_changed)83 const std::shared_ptr<DBusTrackChangedSignal>& track_changed)
81 : on_track_added(),84 : on_track_added(),
85 on_tracks_added(),
82 on_track_removed(),86 on_track_removed(),
83 on_track_list_replaced(),87 on_track_list_replaced(),
84 on_track_changed(),88 on_track_changed(),
85 dbus89 dbus
86 {90 {
87 track_added,91 track_added,
92 tracks_added,
88 track_removed,93 track_removed,
89 track_list_replaced,94 track_list_replaced,
90 track_changed,95 track_changed,
@@ -96,6 +101,12 @@
96 on_track_added(id);101 on_track_added(id);
97 });102 });
98103
104 dbus.on_tracks_added->connect([this](const media::TrackList::ContainerURI& tracks)
105 {
106 std::cout << "OnTracksAdded signal arrived via the bus." << std::endl;
107 on_tracks_added(tracks);
108 });
109
99 dbus.on_track_removed->connect([this](const Track::Id& id)110 dbus.on_track_removed->connect([this](const Track::Id& id)
100 {111 {
101 std::cout << "OnTrackRemoved signal arrived via the bus." << std::endl;112 std::cout << "OnTrackRemoved signal arrived via the bus." << std::endl;
@@ -116,6 +127,7 @@
116 }127 }
117128
118 core::Signal<Track::Id> on_track_added;129 core::Signal<Track::Id> on_track_added;
130 core::Signal<media::TrackList::ContainerURI> on_tracks_added;
119 core::Signal<Track::Id> on_track_removed;131 core::Signal<Track::Id> on_track_removed;
120 core::Signal<media::TrackList::ContainerTrackIdTuple> on_track_list_replaced;132 core::Signal<media::TrackList::ContainerTrackIdTuple> on_track_list_replaced;
121 core::Signal<Track::Id> on_track_changed;133 core::Signal<Track::Id> on_track_changed;
@@ -125,6 +137,7 @@
125 struct DBus137 struct DBus
126 {138 {
127 std::shared_ptr<DBusTrackAddedSignal> on_track_added;139 std::shared_ptr<DBusTrackAddedSignal> on_track_added;
140 std::shared_ptr<DBusTracksAddedSignal> on_tracks_added;
128 std::shared_ptr<DBusTrackRemovedSignal> on_track_removed;141 std::shared_ptr<DBusTrackRemovedSignal> on_track_removed;
129 std::shared_ptr<DBusTrackListReplacedSignal> on_track_list_replaced;142 std::shared_ptr<DBusTrackListReplacedSignal> on_track_list_replaced;
130 std::shared_ptr<DBusTrackChangedSignal> on_track_changed;143 std::shared_ptr<DBusTrackChangedSignal> on_track_changed;
@@ -184,16 +197,38 @@
184197
185void media::TrackListStub::add_track_with_uri_at(198void media::TrackListStub::add_track_with_uri_at(
186 const media::Track::UriType& uri,199 const media::Track::UriType& uri,
187 const media::Track::Id& id,200 const media::Track::Id& position,
188 bool make_current)201 bool make_current)
189{202{
190 auto op = d->object->invoke_method_synchronously<mpris::TrackList::AddTrack, void>(203 auto op = d->object->invoke_method_synchronously<mpris::TrackList::AddTrack, void>(
191 uri,204 uri,
192 id,205 position,
193 make_current);206 make_current);
194207
195 if (op.is_error())208 if (op.is_error())
196 throw std::runtime_error("Problem adding track: " + op.error());209 {
210 if (op.error().name() ==
211 mpris::TrackList::Error::InsufficientPermissionsToAddTrack::name)
212 throw media::TrackList::Errors::InsufficientPermissionsToAddTrack{};
213 else
214 throw std::runtime_error{op.error().print()};
215 }
216}
217
218void media::TrackListStub::add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position)
219{
220 auto op = d->object->invoke_method_synchronously<mpris::TrackList::AddTracks, void>(
221 uris,
222 position);
223
224 if (op.is_error())
225 {
226 if (op.error().name() ==
227 mpris::TrackList::Error::InsufficientPermissionsToAddTrack::name)
228 throw media::TrackList::Errors::InsufficientPermissionsToAddTrack{};
229 else
230 throw std::runtime_error{op.error().print()};
231 }
197}232}
198233
199void media::TrackListStub::remove_track(const media::Track::Id& track)234void media::TrackListStub::remove_track(const media::Track::Id& track)
@@ -255,6 +290,11 @@
255 return d->signals.on_track_added;290 return d->signals.on_track_added;
256}291}
257292
293const core::Signal<media::TrackList::ContainerURI>& media::TrackListStub::on_tracks_added() const
294{
295 return d->signals.on_tracks_added;
296}
297
258const core::Signal<media::Track::Id>& media::TrackListStub::on_track_removed() const298const core::Signal<media::Track::Id>& media::TrackListStub::on_track_removed() const
259{299{
260 return d->signals.on_track_removed;300 return d->signals.on_track_removed;
261301
=== modified file 'src/core/media/track_list_stub.h'
--- src/core/media/track_list_stub.h 2015-07-20 20:39:42 +0000
+++ src/core/media/track_list_stub.h 2015-11-11 09:47:06 +0000
@@ -48,6 +48,7 @@
48 Track::UriType query_uri_for_track(const Track::Id& id);48 Track::UriType query_uri_for_track(const Track::Id& id);
4949
50 void add_track_with_uri_at(const Track::UriType& uri, const Track::Id& position, bool make_current);50 void add_track_with_uri_at(const Track::UriType& uri, const Track::Id& position, bool make_current);
51 void add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position);
51 void remove_track(const Track::Id& id);52 void remove_track(const Track::Id& id);
5253
53 void go_to(const Track::Id& track, bool toggle_player_state);54 void go_to(const Track::Id& track, bool toggle_player_state);
@@ -62,6 +63,7 @@
6263
63 const core::Signal<ContainerTrackIdTuple>& on_track_list_replaced() const;64 const core::Signal<ContainerTrackIdTuple>& on_track_list_replaced() const;
64 const core::Signal<Track::Id>& on_track_added() const;65 const core::Signal<Track::Id>& on_track_added() const;
66 const core::Signal<ContainerURI>& on_tracks_added() const;
65 const core::Signal<Track::Id>& on_track_removed() const;67 const core::Signal<Track::Id>& on_track_removed() const;
66 const core::Signal<Track::Id>& on_track_changed() const;68 const core::Signal<Track::Id>& on_track_changed() const;
67 const core::Signal<std::pair<Track::Id, bool>>& on_go_to_track() const;69 const core::Signal<std::pair<Track::Id, bool>>& on_go_to_track() const;

Subscribers

People subscribed via source and target branches