Merge lp:~thomas-voss/media-hub/rebuild-against-dbus-cpp into lp:media-hub
- rebuild-against-dbus-cpp
- Merge into trunk
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 |
Related bugs: |
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
1 | === modified file 'CMakeLists.txt' | |||
2 | --- CMakeLists.txt 2015-10-16 08:32:58 +0000 | |||
3 | +++ CMakeLists.txt 2015-11-11 09:47:06 +0000 | |||
4 | @@ -2,8 +2,13 @@ | |||
5 | 2 | 2 | ||
6 | 3 | project(ubuntu-media-hub) | 3 | project(ubuntu-media-hub) |
7 | 4 | 4 | ||
8 | 5 | <<<<<<< TREE | ||
9 | 5 | set(UBUNTU_MEDIA_HUB_VERSION_MAJOR 4) | 6 | set(UBUNTU_MEDIA_HUB_VERSION_MAJOR 4) |
10 | 6 | set(UBUNTU_MEDIA_HUB_VERSION_MINOR 1) | 7 | set(UBUNTU_MEDIA_HUB_VERSION_MINOR 1) |
11 | 8 | ======= | ||
12 | 9 | set(UBUNTU_MEDIA_HUB_VERSION_MAJOR 3) | ||
13 | 10 | set(UBUNTU_MEDIA_HUB_VERSION_MINOR 3) | ||
14 | 11 | >>>>>>> MERGE-SOURCE | ||
15 | 7 | set(UBUNTU_MEDIA_HUB_VERSION_PATCH 0) | 12 | set(UBUNTU_MEDIA_HUB_VERSION_PATCH 0) |
16 | 8 | 13 | ||
17 | 9 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fPIC -pthread") | 14 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -fPIC -pthread") |
18 | 10 | 15 | ||
19 | === modified file 'README' | |||
20 | --- README 2015-09-09 14:08:12 +0000 | |||
21 | +++ README 2015-11-11 09:47:06 +0000 | |||
22 | @@ -6,6 +6,10 @@ | |||
23 | 6 | 6 | ||
24 | 7 | https://google-styleguide.googlecode.com/svn/trunk/cppguide.html | 7 | https://google-styleguide.googlecode.com/svn/trunk/cppguide.html |
25 | 8 | 8 | ||
26 | 9 | Deviations from the Google Style Guide above: | ||
27 | 10 | |||
28 | 11 | 1. We will agree to maximum of 100 characters in a single line instead of 80. | ||
29 | 12 | |||
30 | 9 | 13 | ||
31 | 10 | To Build: | 14 | To Build: |
32 | 11 | --------- | 15 | --------- |
33 | 12 | 16 | ||
34 | === modified file 'debian/changelog' | |||
35 | --- debian/changelog 2015-10-16 08:42:28 +0000 | |||
36 | +++ debian/changelog 2015-11-11 09:47:06 +0000 | |||
37 | @@ -1,3 +1,4 @@ | |||
38 | 1 | <<<<<<< TREE | ||
39 | 1 | media-hub (4.1.0+15.10.20151016.1-0ubuntu1) wily; urgency=medium | 2 | media-hub (4.1.0+15.10.20151016.1-0ubuntu1) wily; urgency=medium |
40 | 2 | 3 | ||
41 | 3 | [ Simon Fels ] | 4 | [ Simon Fels ] |
42 | @@ -9,6 +10,25 @@ | |||
43 | 9 | being freed. Also, remove unneeded unrefs that must be performed in | 10 | being freed. Also, remove unneeded unrefs that must be performed in |
44 | 10 | gstreamer instead. | 11 | gstreamer instead. |
45 | 11 | * Emit CanPlay, CanPause, and CanGo[Next|Previous] in the mpris object path | 12 | * Emit CanPlay, CanPause, and CanGo[Next|Previous] in the mpris object path |
46 | 13 | ======= | ||
47 | 14 | media-hub (3.3.0+15.04.20151023.3-0ubuntu2) UNRELEASED; urgency=medium | ||
48 | 15 | |||
49 | 16 | * Version bump to force rebuild. | ||
50 | 17 | |||
51 | 18 | -- Thomas Voß <thomas.voss@canonical.com> Wed, 11 Nov 2015 10:34:27 +0100 | ||
52 | 19 | |||
53 | 20 | media-hub (3.3.0+15.04.20151023.3-0ubuntu1) vivid; urgency=medium | ||
54 | 21 | |||
55 | 22 | [ Jim Hodapp ] | ||
56 | 23 | * Add batch adding of tracks to the TrackList. | ||
57 | 24 | |||
58 | 25 | [ CI Train Bot ] | ||
59 | 26 | * New rebuild forced. | ||
60 | 27 | |||
61 | 28 | -- Jim Hodapp <ci-train-bot@canonical.com> Fri, 23 Oct 2015 19:07:52 +0000 | ||
62 | 29 | |||
63 | 30 | media-hub (3.2.0+15.04.20151014-0ubuntu1) vivid; urgency=medium | ||
64 | 31 | >>>>>>> MERGE-SOURCE | ||
65 | 12 | 32 | ||
66 | 13 | [ Jim Hodapp ] | 33 | [ Jim Hodapp ] |
67 | 14 | * Make sure the correct player is set as the current player controled by | 34 | * Make sure the correct player is set as the current player controled by |
68 | 15 | 35 | ||
69 | === modified file 'include/core/media/track_list.h' | |||
70 | --- include/core/media/track_list.h 2015-07-20 20:39:42 +0000 | |||
71 | +++ include/core/media/track_list.h 2015-11-11 09:47:06 +0000 | |||
72 | @@ -41,10 +41,21 @@ | |||
73 | 41 | { | 41 | { |
74 | 42 | public: | 42 | public: |
75 | 43 | typedef std::vector<Track::Id> Container; | 43 | typedef std::vector<Track::Id> Container; |
76 | 44 | typedef std::vector<Track::UriType> ContainerURI; | ||
77 | 44 | typedef std::tuple<std::vector<Track::Id>, Track::Id> ContainerTrackIdTuple; | 45 | typedef std::tuple<std::vector<Track::Id>, Track::Id> ContainerTrackIdTuple; |
78 | 45 | typedef Container::iterator Iterator; | 46 | typedef Container::iterator Iterator; |
79 | 46 | typedef Container::const_iterator ConstIterator; | 47 | typedef Container::const_iterator ConstIterator; |
80 | 47 | 48 | ||
81 | 49 | struct Errors | ||
82 | 50 | { | ||
83 | 51 | Errors() = delete; | ||
84 | 52 | |||
85 | 53 | struct InsufficientPermissionsToAddTrack : public std::runtime_error | ||
86 | 54 | { | ||
87 | 55 | InsufficientPermissionsToAddTrack(); | ||
88 | 56 | }; | ||
89 | 57 | }; | ||
90 | 58 | |||
91 | 48 | static const Track::Id& after_empty_track(); | 59 | static const Track::Id& after_empty_track(); |
92 | 49 | 60 | ||
93 | 50 | TrackList(const TrackList&) = delete; | 61 | TrackList(const TrackList&) = delete; |
94 | @@ -65,9 +76,12 @@ | |||
95 | 65 | /** Gets the URI for a given Track. */ | 76 | /** Gets the URI for a given Track. */ |
96 | 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; |
97 | 67 | 78 | ||
99 | 68 | /** Adds a URI in the TrackList. */ | 79 | /** Adds a URI into the TrackList. */ |
100 | 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; |
101 | 70 | 81 | ||
102 | 82 | /** Adds a list of URIs into the TrackList. */ | ||
103 | 83 | virtual void add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position) = 0; | ||
104 | 84 | |||
105 | 71 | /** Removes a Track from the TrackList. */ | 85 | /** Removes a Track from the TrackList. */ |
106 | 72 | virtual void remove_track(const Track::Id& id) = 0; | 86 | virtual void remove_track(const Track::Id& id) = 0; |
107 | 73 | 87 | ||
108 | @@ -103,6 +117,9 @@ | |||
109 | 103 | /** Indicates that a track has been added to the track list. */ | 117 | /** Indicates that a track has been added to the track list. */ |
110 | 104 | virtual const core::Signal<Track::Id>& on_track_added() const = 0; | 118 | virtual const core::Signal<Track::Id>& on_track_added() const = 0; |
111 | 105 | 119 | ||
112 | 120 | /** Indicates that one or more tracks have been added to the track list. */ | ||
113 | 121 | virtual const core::Signal<ContainerURI>& on_tracks_added() const = 0; | ||
114 | 122 | |||
115 | 106 | /** Indicates that a track has been removed from the track list. */ | 123 | /** Indicates that a track has been removed from the track list. */ |
116 | 107 | virtual const core::Signal<Track::Id>& on_track_removed() const = 0; | 124 | virtual const core::Signal<Track::Id>& on_track_removed() const = 0; |
117 | 108 | 125 | ||
118 | 109 | 126 | ||
119 | === modified file 'src/core/media/mpris/track_list.h' | |||
120 | --- src/core/media/mpris/track_list.h 2015-07-27 22:15:33 +0000 | |||
121 | +++ src/core/media/mpris/track_list.h 2015-11-11 09:47:06 +0000 | |||
122 | @@ -48,9 +48,21 @@ | |||
123 | 48 | return s; | 48 | return s; |
124 | 49 | } | 49 | } |
125 | 50 | 50 | ||
126 | 51 | struct Error | ||
127 | 52 | { | ||
128 | 53 | struct InsufficientPermissionsToAddTrack | ||
129 | 54 | { | ||
130 | 55 | static constexpr const char* name | ||
131 | 56 | { | ||
132 | 57 | "mpris.TrackList.Error.InsufficientPermissionsToAddTrack" | ||
133 | 58 | }; | ||
134 | 59 | }; | ||
135 | 60 | }; | ||
136 | 61 | |||
137 | 51 | DBUS_CPP_METHOD_DEF(GetTracksMetadata, TrackList) | 62 | DBUS_CPP_METHOD_DEF(GetTracksMetadata, TrackList) |
138 | 52 | DBUS_CPP_METHOD_DEF(GetTracksUri, TrackList) | 63 | DBUS_CPP_METHOD_DEF(GetTracksUri, TrackList) |
139 | 53 | DBUS_CPP_METHOD_DEF(AddTrack, TrackList) | 64 | DBUS_CPP_METHOD_DEF(AddTrack, TrackList) |
140 | 65 | DBUS_CPP_METHOD_DEF(AddTracks, TrackList) | ||
141 | 54 | DBUS_CPP_METHOD_DEF(RemoveTrack, TrackList) | 66 | DBUS_CPP_METHOD_DEF(RemoveTrack, TrackList) |
142 | 55 | DBUS_CPP_METHOD_DEF(GoTo, TrackList) | 67 | DBUS_CPP_METHOD_DEF(GoTo, TrackList) |
143 | 56 | DBUS_CPP_METHOD_DEF(Reset, TrackList) | 68 | DBUS_CPP_METHOD_DEF(Reset, TrackList) |
144 | @@ -75,6 +87,13 @@ | |||
145 | 75 | 87 | ||
146 | 76 | DBUS_CPP_SIGNAL_DEF | 88 | DBUS_CPP_SIGNAL_DEF |
147 | 77 | ( | 89 | ( |
148 | 90 | TracksAdded, | ||
149 | 91 | TrackList, | ||
150 | 92 | core::ubuntu::media::TrackList::ContainerURI | ||
151 | 93 | ) | ||
152 | 94 | |||
153 | 95 | DBUS_CPP_SIGNAL_DEF | ||
154 | 96 | ( | ||
155 | 78 | TrackRemoved, | 97 | TrackRemoved, |
156 | 79 | TrackList, | 98 | TrackList, |
157 | 80 | core::ubuntu::media::Track::Id | 99 | core::ubuntu::media::Track::Id |
158 | @@ -134,6 +153,7 @@ | |||
159 | 134 | { | 153 | { |
160 | 135 | configuration.object->template get_signal<Signals::TrackListReplaced>(), | 154 | configuration.object->template get_signal<Signals::TrackListReplaced>(), |
161 | 136 | configuration.object->template get_signal<Signals::TrackAdded>(), | 155 | configuration.object->template get_signal<Signals::TrackAdded>(), |
162 | 156 | configuration.object->template get_signal<Signals::TracksAdded>(), | ||
163 | 137 | configuration.object->template get_signal<Signals::TrackRemoved>(), | 157 | configuration.object->template get_signal<Signals::TrackRemoved>(), |
164 | 138 | configuration.object->template get_signal<Signals::TrackChanged>(), | 158 | configuration.object->template get_signal<Signals::TrackChanged>(), |
165 | 139 | configuration.object->template get_signal<Signals::TrackMetadataChanged>(), | 159 | configuration.object->template get_signal<Signals::TrackMetadataChanged>(), |
166 | @@ -178,6 +198,7 @@ | |||
167 | 178 | { | 198 | { |
168 | 179 | core::dbus::Signal<Signals::TrackListReplaced, Signals::TrackListReplaced::ArgumentType>::Ptr tracklist_replaced; | 199 | core::dbus::Signal<Signals::TrackListReplaced, Signals::TrackListReplaced::ArgumentType>::Ptr tracklist_replaced; |
169 | 180 | core::dbus::Signal<Signals::TrackAdded, Signals::TrackAdded::ArgumentType>::Ptr track_added; | 200 | core::dbus::Signal<Signals::TrackAdded, Signals::TrackAdded::ArgumentType>::Ptr track_added; |
170 | 201 | core::dbus::Signal<Signals::TracksAdded, Signals::TracksAdded::ArgumentType>::Ptr tracks_added; | ||
171 | 181 | core::dbus::Signal<Signals::TrackRemoved, Signals::TrackRemoved::ArgumentType>::Ptr track_removed; | 202 | core::dbus::Signal<Signals::TrackRemoved, Signals::TrackRemoved::ArgumentType>::Ptr track_removed; |
172 | 182 | core::dbus::Signal<Signals::TrackChanged, Signals::TrackChanged::ArgumentType>::Ptr track_changed; | 203 | core::dbus::Signal<Signals::TrackChanged, Signals::TrackChanged::ArgumentType>::Ptr track_changed; |
173 | 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; |
174 | 184 | 205 | ||
175 | === modified file 'src/core/media/player_implementation.cpp' | |||
176 | --- src/core/media/player_implementation.cpp 2015-09-29 11:07:54 +0000 | |||
177 | +++ src/core/media/player_implementation.cpp 2015-11-11 09:47:06 +0000 | |||
178 | @@ -547,6 +547,18 @@ | |||
179 | 547 | d->update_mpris_properties(); | 547 | d->update_mpris_properties(); |
180 | 548 | }); | 548 | }); |
181 | 549 | 549 | ||
182 | 550 | d->track_list->on_tracks_added().connect([this](const media::TrackList::ContainerURI& tracks) | ||
183 | 551 | { | ||
184 | 552 | std::cout << "** Track was added, handling in PlayerImplementation" << std::endl; | ||
185 | 553 | // If the two sizes are the same, that means the TrackList was previously empty and we need | ||
186 | 554 | // to open the first track in the TrackList so that is_audio_source() and is_video_source() | ||
187 | 555 | // will function correctly. | ||
188 | 556 | if (tracks.size() >= 1 and d->track_list->tracks()->size() == tracks.size()) | ||
189 | 557 | d->open_first_track_from_tracklist(tracks.front()); | ||
190 | 558 | |||
191 | 559 | d->update_mpris_properties(); | ||
192 | 560 | }); | ||
193 | 561 | |||
194 | 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&) |
195 | 551 | { | 563 | { |
196 | 552 | d->update_mpris_properties(); | 564 | d->update_mpris_properties(); |
197 | 553 | 565 | ||
198 | === modified file 'src/core/media/track_list.cpp' | |||
199 | --- src/core/media/track_list.cpp 2015-07-20 20:39:42 +0000 | |||
200 | +++ src/core/media/track_list.cpp 2015-11-11 09:47:06 +0000 | |||
201 | @@ -20,6 +20,11 @@ | |||
202 | 20 | 20 | ||
203 | 21 | namespace media = core::ubuntu::media; | 21 | namespace media = core::ubuntu::media; |
204 | 22 | 22 | ||
205 | 23 | media::TrackList::Errors::InsufficientPermissionsToAddTrack::InsufficientPermissionsToAddTrack() | ||
206 | 24 | : std::runtime_error{"Insufficient client permissions for adding track to TrackList"} | ||
207 | 25 | { | ||
208 | 26 | } | ||
209 | 27 | |||
210 | 23 | const media::Track::Id& media::TrackList::after_empty_track() | 28 | const media::Track::Id& media::TrackList::after_empty_track() |
211 | 24 | { | 29 | { |
212 | 25 | static const media::Track::Id id{"/org/mpris/MediaPlayer2/TrackList/NoTrack"}; | 30 | static const media::Track::Id id{"/org/mpris/MediaPlayer2/TrackList/NoTrack"}; |
213 | 26 | 31 | ||
214 | === modified file 'src/core/media/track_list_implementation.cpp' | |||
215 | --- src/core/media/track_list_implementation.cpp 2015-09-28 13:20:01 +0000 | |||
216 | +++ src/core/media/track_list_implementation.cpp 2015-11-11 09:47:06 +0000 | |||
217 | @@ -20,6 +20,9 @@ | |||
218 | 20 | #include <stdio.h> | 20 | #include <stdio.h> |
219 | 21 | #include <stdlib.h> | 21 | #include <stdlib.h> |
220 | 22 | #include <tuple> | 22 | #include <tuple> |
221 | 23 | #include <unistd.h> | ||
222 | 24 | |||
223 | 25 | #include <dbus/dbus.h> | ||
224 | 23 | 26 | ||
225 | 24 | #include "track_list_implementation.h" | 27 | #include "track_list_implementation.h" |
226 | 25 | 28 | ||
227 | @@ -39,6 +42,30 @@ | |||
228 | 39 | // Used for caching the original tracklist order to be used to restore the order | 42 | // Used for caching the original tracklist order to be used to restore the order |
229 | 40 | // to the live TrackList after shuffle is turned off | 43 | // to the live TrackList after shuffle is turned off |
230 | 41 | media::TrackList::Container original_tracklist; | 44 | media::TrackList::Container original_tracklist; |
231 | 45 | |||
232 | 46 | void updateCachedTrackMetadata(const media::Track::Id& id, const media::Track::UriType& uri) | ||
233 | 47 | { | ||
234 | 48 | if (meta_data_cache.count(id) == 0) | ||
235 | 49 | { | ||
236 | 50 | // FIXME: This code seems to conflict badly when called multiple times in a row: causes segfaults | ||
237 | 51 | #if 0 | ||
238 | 52 | try { | ||
239 | 53 | meta_data_cache[id] = std::make_tuple( | ||
240 | 54 | uri, | ||
241 | 55 | extractor->meta_data_for_track_with_uri(uri)); | ||
242 | 56 | } catch (const std::runtime_error &e) { | ||
243 | 57 | std::cerr << "Failed to retrieve metadata for track '" << uri << "' (" << e.what() << ")" << std::endl; | ||
244 | 58 | } | ||
245 | 59 | #else | ||
246 | 60 | meta_data_cache[id] = std::make_tuple( | ||
247 | 61 | uri, | ||
248 | 62 | core::ubuntu::media::Track::MetaData{}); | ||
249 | 63 | #endif | ||
250 | 64 | } else | ||
251 | 65 | { | ||
252 | 66 | std::get<0>(meta_data_cache[id]) = uri; | ||
253 | 67 | } | ||
254 | 68 | } | ||
255 | 42 | }; | 69 | }; |
256 | 43 | 70 | ||
257 | 44 | media::TrackListImplementation::TrackListImplementation( | 71 | media::TrackListImplementation::TrackListImplementation( |
258 | @@ -84,7 +111,8 @@ | |||
259 | 84 | { | 111 | { |
260 | 85 | std::cout << __PRETTY_FUNCTION__ << std::endl; | 112 | std::cout << __PRETTY_FUNCTION__ << std::endl; |
261 | 86 | 113 | ||
263 | 87 | std::stringstream ss; ss << d->object->path().as_string() << "/" << d->track_counter++; | 114 | std::stringstream ss; |
264 | 115 | ss << d->object->path().as_string() << "/" << d->track_counter++; | ||
265 | 88 | Track::Id id{ss.str()}; | 116 | Track::Id id{ss.str()}; |
266 | 89 | 117 | ||
267 | 90 | std::cout << "Adding Track::Id: " << id << std::endl; | 118 | std::cout << "Adding Track::Id: " << id << std::endl; |
268 | @@ -101,26 +129,7 @@ | |||
269 | 101 | 129 | ||
270 | 102 | if (result) | 130 | if (result) |
271 | 103 | { | 131 | { |
292 | 104 | if (d->meta_data_cache.count(id) == 0) | 132 | d->updateCachedTrackMetadata(id, uri); |
273 | 105 | { | ||
274 | 106 | // FIXME: This code seems to conflict badly when called multiple times in a row: causes segfaults | ||
275 | 107 | #if 0 | ||
276 | 108 | try { | ||
277 | 109 | d->meta_data_cache[id] = std::make_tuple( | ||
278 | 110 | uri, | ||
279 | 111 | d->extractor->meta_data_for_track_with_uri(uri)); | ||
280 | 112 | } catch (const std::runtime_error &e) { | ||
281 | 113 | std::cerr << "Failed to retrieve metadata for track '" << uri << "' (" << e.what() << ")" << std::endl; | ||
282 | 114 | } | ||
283 | 115 | #else | ||
284 | 116 | d->meta_data_cache[id] = std::make_tuple( | ||
285 | 117 | uri, | ||
286 | 118 | core::ubuntu::media::Track::MetaData{}); | ||
287 | 119 | #endif | ||
288 | 120 | } else | ||
289 | 121 | { | ||
290 | 122 | std::get<0>(d->meta_data_cache[id]) = uri; | ||
291 | 123 | } | ||
293 | 124 | 133 | ||
294 | 125 | if (make_current) | 134 | if (make_current) |
295 | 126 | { | 135 | { |
296 | @@ -138,8 +147,50 @@ | |||
297 | 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; |
298 | 139 | // Signal to the client that a track was added to the TrackList | 148 | // Signal to the client that a track was added to the TrackList |
299 | 140 | on_track_added()(id); | 149 | on_track_added()(id); |
302 | 141 | std::cout << "Signaled that we just added track id: " << id << std::endl; | 150 | } |
303 | 142 | } | 151 | } |
304 | 152 | |||
305 | 153 | void media::TrackListImplementation::add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position) | ||
306 | 154 | { | ||
307 | 155 | std::cout << __PRETTY_FUNCTION__ << std::endl; | ||
308 | 156 | |||
309 | 157 | ContainerURI tmp; | ||
310 | 158 | for (const auto uri : uris) | ||
311 | 159 | { | ||
312 | 160 | // TODO: Refactor this code to use a smaller common function shared with add_track_with_uri_at() | ||
313 | 161 | std::stringstream ss; | ||
314 | 162 | ss << d->object->path().as_string() << "/" << d->track_counter++; | ||
315 | 163 | Track::Id id{ss.str()}; | ||
316 | 164 | std::cout << "Adding Track::Id: " << id << std::endl; | ||
317 | 165 | std::cout << "\tURI: " << uri << std::endl; | ||
318 | 166 | |||
319 | 167 | tmp.push_back(id); | ||
320 | 168 | |||
321 | 169 | Track::Id insert_position = position; | ||
322 | 170 | |||
323 | 171 | auto it = std::find(tracks().get().begin(), tracks().get().end(), insert_position); | ||
324 | 172 | auto result = tracks().update([this, id, position, it, &insert_position](TrackList::Container& container) | ||
325 | 173 | { | ||
326 | 174 | container.insert(it, id); | ||
327 | 175 | // Make sure the next insert position is after the current insert position | ||
328 | 176 | // Update the Track::Id after which to insert the next one from uris | ||
329 | 177 | insert_position = id; | ||
330 | 178 | |||
331 | 179 | return true; | ||
332 | 180 | }); | ||
333 | 181 | |||
334 | 182 | if (result) | ||
335 | 183 | { | ||
336 | 184 | d->updateCachedTrackMetadata(id, uri); | ||
337 | 185 | |||
338 | 186 | // Signal to the client that the current track has changed for the first track added to the TrackList | ||
339 | 187 | if (tracks().get().size() == 1) | ||
340 | 188 | on_track_changed()(id); | ||
341 | 189 | } | ||
342 | 190 | } | ||
343 | 191 | |||
344 | 192 | std::cout << "Signaling that we just added " << tmp.size() << " tracks to the TrackList" << std::endl; | ||
345 | 193 | on_tracks_added()(tmp); | ||
346 | 143 | } | 194 | } |
347 | 144 | 195 | ||
348 | 145 | void media::TrackListImplementation::remove_track(const media::Track::Id& id) | 196 | void media::TrackListImplementation::remove_track(const media::Track::Id& id) |
349 | 146 | 197 | ||
350 | === modified file 'src/core/media/track_list_implementation.h' | |||
351 | --- src/core/media/track_list_implementation.h 2015-05-22 21:19:28 +0000 | |||
352 | +++ src/core/media/track_list_implementation.h 2015-11-11 09:47:06 +0000 | |||
353 | @@ -43,6 +43,7 @@ | |||
354 | 43 | Track::MetaData query_meta_data_for_track(const Track::Id& id); | 43 | Track::MetaData query_meta_data_for_track(const Track::Id& id); |
355 | 44 | 44 | ||
356 | 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); |
357 | 46 | void add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position); | ||
358 | 46 | void remove_track(const Track::Id& id); | 47 | void remove_track(const Track::Id& id); |
359 | 47 | 48 | ||
360 | 48 | void go_to(const Track::Id& track, bool toggle_player_state); | 49 | void go_to(const Track::Id& track, bool toggle_player_state); |
361 | 49 | 50 | ||
362 | === modified file 'src/core/media/track_list_skeleton.cpp' | |||
363 | --- src/core/media/track_list_skeleton.cpp 2015-09-28 15:31:46 +0000 | |||
364 | +++ src/core/media/track_list_skeleton.cpp 2015-11-11 09:47:06 +0000 | |||
365 | @@ -59,6 +59,7 @@ | |||
366 | 59 | signals | 59 | signals |
367 | 60 | { | 60 | { |
368 | 61 | skeleton.signals.track_added, | 61 | skeleton.signals.track_added, |
369 | 62 | skeleton.signals.tracks_added, | ||
370 | 62 | skeleton.signals.track_removed, | 63 | skeleton.signals.track_removed, |
371 | 63 | skeleton.signals.track_changed, | 64 | skeleton.signals.track_changed, |
372 | 64 | skeleton.signals.tracklist_replaced | 65 | skeleton.signals.tracklist_replaced |
373 | @@ -93,9 +94,12 @@ | |||
374 | 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) |
375 | 94 | { | 95 | { |
376 | 95 | std::cout << "*** " << __PRETTY_FUNCTION__ << std::endl; | 96 | std::cout << "*** " << __PRETTY_FUNCTION__ << std::endl; |
378 | 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 |
379 | 98 | (msg->sender(), [this, msg](const media::apparmor::ubuntu::Context& context) | ||
380 | 97 | { | 99 | { |
382 | 98 | Track::UriType uri; media::Track::Id after; bool make_current; | 100 | Track::UriType uri; |
383 | 101 | media::Track::Id after; | ||
384 | 102 | bool make_current; | ||
385 | 99 | msg->reader() >> uri >> after >> make_current; | 103 | msg->reader() >> uri >> after >> make_current; |
386 | 100 | 104 | ||
387 | 101 | // Make sure the client has adequate apparmor permissions to open the URI | 105 | // Make sure the client has adequate apparmor permissions to open the URI |
388 | @@ -104,10 +108,63 @@ | |||
389 | 104 | auto reply = dbus::Message::make_method_return(msg); | 108 | auto reply = dbus::Message::make_method_return(msg); |
390 | 105 | // Only add the track to the TrackList if it passes the apparmor permissions check | 109 | // Only add the track to the TrackList if it passes the apparmor permissions check |
391 | 106 | if (std::get<0>(result)) | 110 | if (std::get<0>(result)) |
392 | 111 | { | ||
393 | 107 | impl->add_track_with_uri_at(uri, after, make_current); | 112 | impl->add_track_with_uri_at(uri, after, make_current); |
397 | 108 | else | 113 | } |
398 | 109 | std::cerr << "Warning: Not adding track " << uri << | 114 | else |
399 | 110 | " to TrackList because of inadequate client apparmor permissions." << std::endl; | 115 | { |
400 | 116 | const std::string err_str = {"Warning: Not adding track " + uri + | ||
401 | 117 | " to TrackList because of inadequate client apparmor permissions."}; | ||
402 | 118 | std::cerr << err_str << std::endl; | ||
403 | 119 | reply = dbus::Message::make_error( | ||
404 | 120 | msg, | ||
405 | 121 | mpris::TrackList::Error::InsufficientPermissionsToAddTrack::name, | ||
406 | 122 | err_str); | ||
407 | 123 | } | ||
408 | 124 | |||
409 | 125 | bus->send(reply); | ||
410 | 126 | }); | ||
411 | 127 | } | ||
412 | 128 | |||
413 | 129 | void handle_add_tracks_with_uri_at(const core::dbus::Message::Ptr& msg) | ||
414 | 130 | { | ||
415 | 131 | std::cout << "*** " << __PRETTY_FUNCTION__ << std::endl; | ||
416 | 132 | request_context_resolver->resolve_context_for_dbus_name_async | ||
417 | 133 | (msg->sender(), [this, msg](const media::apparmor::ubuntu::Context& context) | ||
418 | 134 | { | ||
419 | 135 | ContainerURI uris; | ||
420 | 136 | media::Track::Id after; | ||
421 | 137 | msg->reader() >> uris >> after; | ||
422 | 138 | |||
423 | 139 | media::apparmor::ubuntu::RequestAuthenticator::Result result; | ||
424 | 140 | std::string err_str; | ||
425 | 141 | for (const auto uri : uris) | ||
426 | 142 | { | ||
427 | 143 | // Make sure the client has adequate apparmor permissions to open the URI | ||
428 | 144 | result = request_authenticator->authenticate_open_uri_request(context, uri); | ||
429 | 145 | if (not std::get<0>(result)) | ||
430 | 146 | { | ||
431 | 147 | err_str = {"Warning: Not adding track " + uri + | ||
432 | 148 | " to TrackList because of inadequate client apparmor permissions."}; | ||
433 | 149 | break; | ||
434 | 150 | } | ||
435 | 151 | } | ||
436 | 152 | |||
437 | 153 | core::dbus::Message::Ptr reply; | ||
438 | 154 | // Only add the track to the TrackList if it passes the apparmor permissions check | ||
439 | 155 | if (std::get<0>(result)) | ||
440 | 156 | { | ||
441 | 157 | reply = dbus::Message::make_method_return(msg); | ||
442 | 158 | impl->add_tracks_with_uri_at(uris, after); | ||
443 | 159 | } | ||
444 | 160 | else | ||
445 | 161 | { | ||
446 | 162 | std::cerr << err_str << std::endl; | ||
447 | 163 | reply = dbus::Message::make_error( | ||
448 | 164 | msg, | ||
449 | 165 | mpris::TrackList::Error::InsufficientPermissionsToAddTrack::name, | ||
450 | 166 | err_str); | ||
451 | 167 | } | ||
452 | 111 | 168 | ||
453 | 112 | bus->send(reply); | 169 | bus->send(reply); |
454 | 113 | }); | 170 | }); |
455 | @@ -159,11 +216,13 @@ | |||
456 | 159 | struct Signals | 216 | struct Signals |
457 | 160 | { | 217 | { |
458 | 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; |
459 | 219 | typedef core::dbus::Signal<mpris::TrackList::Signals::TracksAdded, mpris::TrackList::Signals::TracksAdded::ArgumentType> DBusTracksAddedSignal; | ||
460 | 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; |
461 | 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; |
462 | 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; |
463 | 165 | 223 | ||
464 | 166 | Signals(const std::shared_ptr<DBusTrackAddedSignal>& remote_track_added, | 224 | Signals(const std::shared_ptr<DBusTrackAddedSignal>& remote_track_added, |
465 | 225 | const std::shared_ptr<DBusTracksAddedSignal>& remote_tracks_added, | ||
466 | 167 | const std::shared_ptr<DBusTrackRemovedSignal>& remote_track_removed, | 226 | const std::shared_ptr<DBusTrackRemovedSignal>& remote_track_removed, |
467 | 168 | const std::shared_ptr<DBusTrackChangedSignal>& remote_track_changed, | 227 | const std::shared_ptr<DBusTrackChangedSignal>& remote_track_changed, |
468 | 169 | const std::shared_ptr<DBusTrackListReplacedSignal>& remote_track_list_replaced) | 228 | const std::shared_ptr<DBusTrackListReplacedSignal>& remote_track_list_replaced) |
469 | @@ -174,6 +233,11 @@ | |||
470 | 174 | remote_track_added->emit(id); | 233 | remote_track_added->emit(id); |
471 | 175 | }); | 234 | }); |
472 | 176 | 235 | ||
473 | 236 | on_tracks_added.connect([remote_tracks_added](const media::TrackList::ContainerURI &tracks) | ||
474 | 237 | { | ||
475 | 238 | remote_tracks_added->emit(tracks); | ||
476 | 239 | }); | ||
477 | 240 | |||
478 | 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) |
479 | 178 | { | 242 | { |
480 | 179 | remote_track_removed->emit(id); | 243 | remote_track_removed->emit(id); |
481 | @@ -191,6 +255,7 @@ | |||
482 | 191 | } | 255 | } |
483 | 192 | 256 | ||
484 | 193 | core::Signal<Track::Id> on_track_added; | 257 | core::Signal<Track::Id> on_track_added; |
485 | 258 | core::Signal<TrackList::ContainerURI> on_tracks_added; | ||
486 | 194 | core::Signal<Track::Id> on_track_removed; | 259 | core::Signal<Track::Id> on_track_removed; |
487 | 195 | core::Signal<Track::Id> on_track_changed; | 260 | core::Signal<Track::Id> on_track_changed; |
488 | 196 | core::Signal<TrackList::ContainerTrackIdTuple> on_track_list_replaced; | 261 | core::Signal<TrackList::ContainerTrackIdTuple> on_track_list_replaced; |
489 | @@ -219,6 +284,11 @@ | |||
490 | 219 | std::ref(d), | 284 | std::ref(d), |
491 | 220 | std::placeholders::_1)); | 285 | std::placeholders::_1)); |
492 | 221 | 286 | ||
493 | 287 | d->object->install_method_handler<mpris::TrackList::AddTracks>( | ||
494 | 288 | std::bind(&Private::handle_add_tracks_with_uri_at, | ||
495 | 289 | std::ref(d), | ||
496 | 290 | std::placeholders::_1)); | ||
497 | 291 | |||
498 | 222 | d->object->install_method_handler<mpris::TrackList::RemoveTrack>( | 292 | d->object->install_method_handler<mpris::TrackList::RemoveTrack>( |
499 | 223 | std::bind(&Private::handle_remove_track, | 293 | std::bind(&Private::handle_remove_track, |
500 | 224 | std::ref(d), | 294 | std::ref(d), |
501 | @@ -490,6 +560,11 @@ | |||
502 | 490 | return d->signals.on_track_added; | 560 | return d->signals.on_track_added; |
503 | 491 | } | 561 | } |
504 | 492 | 562 | ||
505 | 563 | const core::Signal<media::TrackList::ContainerURI>& media::TrackListSkeleton::on_tracks_added() const | ||
506 | 564 | { | ||
507 | 565 | return d->signals.on_tracks_added; | ||
508 | 566 | } | ||
509 | 567 | |||
510 | 493 | const core::Signal<media::Track::Id>& media::TrackListSkeleton::on_track_removed() const | 568 | const core::Signal<media::Track::Id>& media::TrackListSkeleton::on_track_removed() const |
511 | 494 | { | 569 | { |
512 | 495 | return d->signals.on_track_removed; | 570 | return d->signals.on_track_removed; |
513 | @@ -520,6 +595,11 @@ | |||
514 | 520 | return d->signals.on_track_added; | 595 | return d->signals.on_track_added; |
515 | 521 | } | 596 | } |
516 | 522 | 597 | ||
517 | 598 | core::Signal<media::TrackList::ContainerURI>& media::TrackListSkeleton::on_tracks_added() | ||
518 | 599 | { | ||
519 | 600 | return d->signals.on_tracks_added; | ||
520 | 601 | } | ||
521 | 602 | |||
522 | 523 | core::Signal<media::Track::Id>& media::TrackListSkeleton::on_track_removed() | 603 | core::Signal<media::Track::Id>& media::TrackListSkeleton::on_track_removed() |
523 | 524 | { | 604 | { |
524 | 525 | return d->signals.on_track_removed; | 605 | return d->signals.on_track_removed; |
525 | 526 | 606 | ||
526 | === modified file 'src/core/media/track_list_skeleton.h' | |||
527 | --- src/core/media/track_list_skeleton.h 2015-09-28 13:20:01 +0000 | |||
528 | +++ src/core/media/track_list_skeleton.h 2015-11-11 09:47:06 +0000 | |||
529 | @@ -54,6 +54,8 @@ | |||
530 | 54 | core::Signal<ContainerTrackIdTuple>& on_track_list_replaced(); | 54 | core::Signal<ContainerTrackIdTuple>& on_track_list_replaced(); |
531 | 55 | const core::Signal<Track::Id>& on_track_added() const; | 55 | const core::Signal<Track::Id>& on_track_added() const; |
532 | 56 | core::Signal<Track::Id>& on_track_added(); | 56 | core::Signal<Track::Id>& on_track_added(); |
533 | 57 | const core::Signal<ContainerURI>& on_tracks_added() const; | ||
534 | 58 | core::Signal<ContainerURI>& on_tracks_added(); | ||
535 | 57 | const core::Signal<Track::Id>& on_track_removed() const; | 59 | const core::Signal<Track::Id>& on_track_removed() const; |
536 | 58 | const core::Signal<Track::Id>& on_track_changed() const; | 60 | const core::Signal<Track::Id>& on_track_changed() const; |
537 | 59 | core::Signal<Track::Id>& on_track_changed(); | 61 | core::Signal<Track::Id>& on_track_changed(); |
538 | 60 | 62 | ||
539 | === modified file 'src/core/media/track_list_stub.cpp' | |||
540 | --- src/core/media/track_list_stub.cpp 2015-07-27 22:15:33 +0000 | |||
541 | +++ src/core/media/track_list_stub.cpp 2015-11-11 09:47:06 +0000 | |||
542 | @@ -52,6 +52,7 @@ | |||
543 | 52 | signals | 52 | signals |
544 | 53 | { | 53 | { |
545 | 54 | object->get_signal<mpris::TrackList::Signals::TrackAdded>(), | 54 | object->get_signal<mpris::TrackList::Signals::TrackAdded>(), |
546 | 55 | object->get_signal<mpris::TrackList::Signals::TracksAdded>(), | ||
547 | 55 | object->get_signal<mpris::TrackList::Signals::TrackRemoved>(), | 56 | object->get_signal<mpris::TrackList::Signals::TrackRemoved>(), |
548 | 56 | object->get_signal<mpris::TrackList::Signals::TrackListReplaced>(), | 57 | object->get_signal<mpris::TrackList::Signals::TrackListReplaced>(), |
549 | 57 | object->get_signal<mpris::TrackList::Signals::TrackChanged>() | 58 | object->get_signal<mpris::TrackList::Signals::TrackChanged>() |
550 | @@ -70,21 +71,25 @@ | |||
551 | 70 | struct Signals | 71 | struct Signals |
552 | 71 | { | 72 | { |
553 | 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; |
554 | 74 | typedef core::dbus::Signal<mpris::TrackList::Signals::TracksAdded, mpris::TrackList::Signals::TracksAdded::ArgumentType> DBusTracksAddedSignal; | ||
555 | 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; |
556 | 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; |
557 | 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; |
558 | 76 | 78 | ||
559 | 77 | Signals(const std::shared_ptr<DBusTrackAddedSignal>& track_added, | 79 | Signals(const std::shared_ptr<DBusTrackAddedSignal>& track_added, |
560 | 80 | const std::shared_ptr<DBusTracksAddedSignal>& tracks_added, | ||
561 | 78 | const std::shared_ptr<DBusTrackRemovedSignal>& track_removed, | 81 | const std::shared_ptr<DBusTrackRemovedSignal>& track_removed, |
562 | 79 | const std::shared_ptr<DBusTrackListReplacedSignal>& track_list_replaced, | 82 | const std::shared_ptr<DBusTrackListReplacedSignal>& track_list_replaced, |
563 | 80 | const std::shared_ptr<DBusTrackChangedSignal>& track_changed) | 83 | const std::shared_ptr<DBusTrackChangedSignal>& track_changed) |
564 | 81 | : on_track_added(), | 84 | : on_track_added(), |
565 | 85 | on_tracks_added(), | ||
566 | 82 | on_track_removed(), | 86 | on_track_removed(), |
567 | 83 | on_track_list_replaced(), | 87 | on_track_list_replaced(), |
568 | 84 | on_track_changed(), | 88 | on_track_changed(), |
569 | 85 | dbus | 89 | dbus |
570 | 86 | { | 90 | { |
571 | 87 | track_added, | 91 | track_added, |
572 | 92 | tracks_added, | ||
573 | 88 | track_removed, | 93 | track_removed, |
574 | 89 | track_list_replaced, | 94 | track_list_replaced, |
575 | 90 | track_changed, | 95 | track_changed, |
576 | @@ -96,6 +101,12 @@ | |||
577 | 96 | on_track_added(id); | 101 | on_track_added(id); |
578 | 97 | }); | 102 | }); |
579 | 98 | 103 | ||
580 | 104 | dbus.on_tracks_added->connect([this](const media::TrackList::ContainerURI& tracks) | ||
581 | 105 | { | ||
582 | 106 | std::cout << "OnTracksAdded signal arrived via the bus." << std::endl; | ||
583 | 107 | on_tracks_added(tracks); | ||
584 | 108 | }); | ||
585 | 109 | |||
586 | 99 | dbus.on_track_removed->connect([this](const Track::Id& id) | 110 | dbus.on_track_removed->connect([this](const Track::Id& id) |
587 | 100 | { | 111 | { |
588 | 101 | std::cout << "OnTrackRemoved signal arrived via the bus." << std::endl; | 112 | std::cout << "OnTrackRemoved signal arrived via the bus." << std::endl; |
589 | @@ -116,6 +127,7 @@ | |||
590 | 116 | } | 127 | } |
591 | 117 | 128 | ||
592 | 118 | core::Signal<Track::Id> on_track_added; | 129 | core::Signal<Track::Id> on_track_added; |
593 | 130 | core::Signal<media::TrackList::ContainerURI> on_tracks_added; | ||
594 | 119 | core::Signal<Track::Id> on_track_removed; | 131 | core::Signal<Track::Id> on_track_removed; |
595 | 120 | core::Signal<media::TrackList::ContainerTrackIdTuple> on_track_list_replaced; | 132 | core::Signal<media::TrackList::ContainerTrackIdTuple> on_track_list_replaced; |
596 | 121 | core::Signal<Track::Id> on_track_changed; | 133 | core::Signal<Track::Id> on_track_changed; |
597 | @@ -125,6 +137,7 @@ | |||
598 | 125 | struct DBus | 137 | struct DBus |
599 | 126 | { | 138 | { |
600 | 127 | std::shared_ptr<DBusTrackAddedSignal> on_track_added; | 139 | std::shared_ptr<DBusTrackAddedSignal> on_track_added; |
601 | 140 | std::shared_ptr<DBusTracksAddedSignal> on_tracks_added; | ||
602 | 128 | std::shared_ptr<DBusTrackRemovedSignal> on_track_removed; | 141 | std::shared_ptr<DBusTrackRemovedSignal> on_track_removed; |
603 | 129 | std::shared_ptr<DBusTrackListReplacedSignal> on_track_list_replaced; | 142 | std::shared_ptr<DBusTrackListReplacedSignal> on_track_list_replaced; |
604 | 130 | std::shared_ptr<DBusTrackChangedSignal> on_track_changed; | 143 | std::shared_ptr<DBusTrackChangedSignal> on_track_changed; |
605 | @@ -184,16 +197,38 @@ | |||
606 | 184 | 197 | ||
607 | 185 | void media::TrackListStub::add_track_with_uri_at( | 198 | void media::TrackListStub::add_track_with_uri_at( |
608 | 186 | const media::Track::UriType& uri, | 199 | const media::Track::UriType& uri, |
610 | 187 | const media::Track::Id& id, | 200 | const media::Track::Id& position, |
611 | 188 | bool make_current) | 201 | bool make_current) |
612 | 189 | { | 202 | { |
613 | 190 | auto op = d->object->invoke_method_synchronously<mpris::TrackList::AddTrack, void>( | 203 | auto op = d->object->invoke_method_synchronously<mpris::TrackList::AddTrack, void>( |
614 | 191 | uri, | 204 | uri, |
616 | 192 | id, | 205 | position, |
617 | 193 | make_current); | 206 | make_current); |
618 | 194 | 207 | ||
619 | 195 | if (op.is_error()) | 208 | if (op.is_error()) |
621 | 196 | throw std::runtime_error("Problem adding track: " + op.error()); | 209 | { |
622 | 210 | if (op.error().name() == | ||
623 | 211 | mpris::TrackList::Error::InsufficientPermissionsToAddTrack::name) | ||
624 | 212 | throw media::TrackList::Errors::InsufficientPermissionsToAddTrack{}; | ||
625 | 213 | else | ||
626 | 214 | throw std::runtime_error{op.error().print()}; | ||
627 | 215 | } | ||
628 | 216 | } | ||
629 | 217 | |||
630 | 218 | void media::TrackListStub::add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position) | ||
631 | 219 | { | ||
632 | 220 | auto op = d->object->invoke_method_synchronously<mpris::TrackList::AddTracks, void>( | ||
633 | 221 | uris, | ||
634 | 222 | position); | ||
635 | 223 | |||
636 | 224 | if (op.is_error()) | ||
637 | 225 | { | ||
638 | 226 | if (op.error().name() == | ||
639 | 227 | mpris::TrackList::Error::InsufficientPermissionsToAddTrack::name) | ||
640 | 228 | throw media::TrackList::Errors::InsufficientPermissionsToAddTrack{}; | ||
641 | 229 | else | ||
642 | 230 | throw std::runtime_error{op.error().print()}; | ||
643 | 231 | } | ||
644 | 197 | } | 232 | } |
645 | 198 | 233 | ||
646 | 199 | void media::TrackListStub::remove_track(const media::Track::Id& track) | 234 | void media::TrackListStub::remove_track(const media::Track::Id& track) |
647 | @@ -255,6 +290,11 @@ | |||
648 | 255 | return d->signals.on_track_added; | 290 | return d->signals.on_track_added; |
649 | 256 | } | 291 | } |
650 | 257 | 292 | ||
651 | 293 | const core::Signal<media::TrackList::ContainerURI>& media::TrackListStub::on_tracks_added() const | ||
652 | 294 | { | ||
653 | 295 | return d->signals.on_tracks_added; | ||
654 | 296 | } | ||
655 | 297 | |||
656 | 258 | const core::Signal<media::Track::Id>& media::TrackListStub::on_track_removed() const | 298 | const core::Signal<media::Track::Id>& media::TrackListStub::on_track_removed() const |
657 | 259 | { | 299 | { |
658 | 260 | return d->signals.on_track_removed; | 300 | return d->signals.on_track_removed; |
659 | 261 | 301 | ||
660 | === modified file 'src/core/media/track_list_stub.h' | |||
661 | --- src/core/media/track_list_stub.h 2015-07-20 20:39:42 +0000 | |||
662 | +++ src/core/media/track_list_stub.h 2015-11-11 09:47:06 +0000 | |||
663 | @@ -48,6 +48,7 @@ | |||
664 | 48 | Track::UriType query_uri_for_track(const Track::Id& id); | 48 | Track::UriType query_uri_for_track(const Track::Id& id); |
665 | 49 | 49 | ||
666 | 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); |
667 | 51 | void add_tracks_with_uri_at(const ContainerURI& uris, const Track::Id& position); | ||
668 | 51 | void remove_track(const Track::Id& id); | 52 | void remove_track(const Track::Id& id); |
669 | 52 | 53 | ||
670 | 53 | void go_to(const Track::Id& track, bool toggle_player_state); | 54 | void go_to(const Track::Id& track, bool toggle_player_state); |
671 | @@ -62,6 +63,7 @@ | |||
672 | 62 | 63 | ||
673 | 63 | const core::Signal<ContainerTrackIdTuple>& on_track_list_replaced() const; | 64 | const core::Signal<ContainerTrackIdTuple>& on_track_list_replaced() const; |
674 | 64 | const core::Signal<Track::Id>& on_track_added() const; | 65 | const core::Signal<Track::Id>& on_track_added() const; |
675 | 66 | const core::Signal<ContainerURI>& on_tracks_added() const; | ||
676 | 65 | const core::Signal<Track::Id>& on_track_removed() const; | 67 | const core::Signal<Track::Id>& on_track_removed() const; |
677 | 66 | const core::Signal<Track::Id>& on_track_changed() const; | 68 | const core::Signal<Track::Id>& on_track_changed() const; |
678 | 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; |