Merge lp:~mhr3/libunity/more-api-changes into lp:libunity

Proposed by Michal Hruby on 2012-06-27
Status: Merged
Approved by: Paweł Stołowski on 2012-06-28
Approved revision: no longer in the source branch.
Merged at revision: 149
Proposed branch: lp:~mhr3/libunity/more-api-changes
Merge into: lp:libunity
Prerequisite: lp:~mhr3/libunity/update-api-to-spec
Diff against target: 356 lines (+160/-67)
4 files modified
protocol/protocol-previews.vala (+18/-6)
src/unity-previews.vala (+108/-35)
test/vala/test-lens.vala (+20/-21)
test/vala/test-previews.vala (+14/-5)
To merge this branch: bzr merge lp:~mhr3/libunity/more-api-changes
Reviewer Review Type Date Requested Status
Paweł Stołowski 2012-06-27 Approve on 2012-06-27
Review via email: mp+112340@code.launchpad.net

Commit Message

More API changes for Previews

Description of the Change

A few more API changes, hopefully the last time :)

Tests updated to reflect the changes.

To post a comment you must log in.
Paweł Stołowski (stolowski) wrote :

Looks good!

review: Approve
lp:~mhr3/libunity/more-api-changes updated on 2012-06-28
148. By Michal Hruby on 2012-06-27

Update parts of the API to match the spec. Fixes: . Approved by Michal Hruby, Mikkel Kamstrup Erlandsen.

149. By Michal Hruby on 2012-06-28

More API changes for Previews. Fixes: . Approved by Pawel Stolowski.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'protocol/protocol-previews.vala'
2--- protocol/protocol-previews.vala 2012-06-25 12:23:25 +0000
3+++ protocol/protocol-previews.vala 2012-06-27 12:19:20 +0000
4@@ -444,6 +444,18 @@
5 properties["track-data-address"] = track_data_address;
6 }
7
8+ public void play_uri (string uri)
9+ {
10+ add_update ("action", "play");
11+ add_update ("uri", uri);
12+ }
13+
14+ public void pause_uri (string uri)
15+ {
16+ add_update ("action", "pause");
17+ add_update ("uri", uri);
18+ }
19+
20 static construct
21 {
22 Dee.Serializable.register_parser (typeof (MusicPreview),
23@@ -544,19 +556,19 @@
24 Object ();
25 }
26
27- public override void begin_updates()
28+ public override void begin_updates ()
29 {
30 base.begin_updates();
31 if (_selected_item_sig_id == 0)
32 {
33- _selected_item_sig_id = notify["selected-item"].connect ((obj, spec) =>
34- {
35- add_update("series-active-index", selected_item);
36- });
37+ _selected_item_sig_id = notify["selected-item"].connect (() =>
38+ {
39+ add_update("series-active-index", selected_item);
40+ });
41 }
42 }
43
44- public override HashTable<string, Variant>? end_updates_as_hashtable()
45+ public override HashTable<string, Variant>? end_updates_as_hashtable ()
46 {
47 if (_selected_item_sig_id > 0)
48 {
49
50=== modified file 'src/unity-previews.vala'
51--- src/unity-previews.vala 2012-06-27 12:19:20 +0000
52+++ src/unity-previews.vala 2012-06-27 12:19:20 +0000
53@@ -351,6 +351,28 @@
54 }
55 }
56
57+ internal override HashTable<string, Variant> update_property (HashTable<string, Variant> values)
58+ {
59+ Variant? action_v = values["action"];
60+ Variant? uri_v = values["uri"];
61+ if (action_v != null && uri_v != null)
62+ {
63+ switch (action_v.get_string ())
64+ {
65+ case "play":
66+ play (uri_v.get_string ());
67+ break;
68+ case "pause":
69+ pause (uri_v.get_string ());
70+ break;
71+ default:
72+ warning ("Unknown MusicPreview action: %s", action_v.get_string ());
73+ break;
74+ }
75+ }
76+ return base.update_property (values);
77+ }
78+
79 public signal void play (string uri);
80 public signal void pause (string uri);
81
82@@ -413,50 +435,91 @@
83 }
84
85
86-public class SeriesPreview : Preview
87-{
88- public int selected_item
89- {
90- get { return _raw.selected_item; }
91- private set { _raw.selected_item = value; }
92- }
93-
94- public SeriesPreview ()
95- {
96- Object ();
97- }
98-
99- public void add_item (string title, string uri, Icon? icon)
100- {
101- _raw.add_series_item (title, uri, icon);
102+public class SeriesItem : Object
103+{
104+ public string uri { get; construct; }
105+ public string title { get; construct; }
106+ public Icon? icon_hint { get; construct; }
107+
108+ public SeriesItem (string uri, string title, Icon? icon_hint)
109+ {
110+ Object (uri: uri, title: title, icon_hint: icon_hint);
111+ }
112+}
113+
114+public class SeriesPreview : Preview, Dee.Serializable
115+{
116+ private string _current_item_uri;
117+ public string current_item_uri
118+ {
119+ get { return _current_item_uri; }
120+ construct { _current_item_uri = value; }
121+ }
122+
123+ // FIXME: why do we even keep this?
124+ private int _selected_item = -1;
125+
126+ public SeriesPreview (SeriesItem[] items, string selected_item_uri)
127+ {
128+ // careful current_item_uri will be set before items are
129+ Object (current_item_uri: selected_item_uri);
130+ foreach (unowned SeriesItem item in items)
131+ {
132+ add_item (item);
133+ }
134+ }
135+
136+ private void add_item (SeriesItem item)
137+ {
138+ _raw.add_series_item (item.title, item.uri, item.icon_hint);
139+ }
140+
141+ /* Emits request_item_preview and updates internal state */
142+ private void update_child_preview (string uri, int item_index = -1)
143+ {
144+ var preview = request_item_preview (uri);
145+ if (preview != null)
146+ {
147+ if (item_index < 0)
148+ {
149+ // try to auto-update _selected_item
150+ int i = 0;
151+ foreach (unowned Protocol.SeriesItemRaw item in _raw.get_items ())
152+ {
153+ if (item.uri == uri)
154+ {
155+ _selected_item = i;
156+ break;
157+ }
158+ i++;
159+ }
160+ if (_selected_item < 0) warning ("Unable to find URI in series items");
161+ }
162+ else _selected_item = item_index;
163+
164+ _child_preview = preview;
165+ _raw.child_preview = preview.get_raw ();
166+ _current_item_uri = uri;
167+ }
168 }
169
170 private Preview _child_preview;
171
172- public void set_active_preview (int item_index, Preview? active_preview)
173- requires (item_index < _raw.get_items ().length)
174- {
175- selected_item = item_index;
176- _child_preview = active_preview;
177- _raw.child_preview = active_preview.get_raw ();
178- }
179-
180- public signal Preview? selected_item_changed (int new_index);
181+ public signal Preview? request_item_preview (string uri);
182
183 internal override HashTable<string, Variant> update_property (HashTable<string, Variant> values)
184 {
185- int selected = selected_item;
186 var response = base.update_property (values);
187+ int new_selected_item = _raw.selected_item;
188 Preview? preview = null;
189- if (selected != selected_item)
190- {
191- preview = selected_item_changed (selected_item);
192- }
193- else
194- {
195- preview = _child_preview;
196- }
197- response["preview"] = preview.serialize();
198+ if (new_selected_item != _selected_item &&
199+ new_selected_item < _raw.get_items ().length)
200+ {
201+ unowned Protocol.SeriesItemRaw item = _raw.get_items ()[new_selected_item];
202+ update_child_preview (item.uri, new_selected_item);
203+ }
204+ preview = _child_preview;
205+ response["preview"] = preview.serialize ();
206 return response;
207 }
208
209@@ -465,6 +528,16 @@
210 return _child_preview;
211 }
212
213+ private Variant serialize ()
214+ {
215+ // ensures that we emit selected_item_changed shortly after construction
216+ if (_selected_item < 0 && _raw.get_items ().length > 0)
217+ {
218+ update_child_preview (current_item_uri);
219+ }
220+ return _raw.serialize ();
221+ }
222+
223 private unowned Protocol.SeriesPreview _raw;
224 internal override Object create_raw ()
225 {
226
227=== modified file 'test/vala/test-lens.vala'
228--- test/vala/test-lens.vala 2012-06-25 11:58:23 +0000
229+++ test/vala/test-lens.vala 2012-06-27 12:19:20 +0000
230@@ -812,8 +812,8 @@
231
232 bool got_activate_uri_signal = false;
233 bool got_preview_uri_signal = false;
234- bool got_selected_item_changed_signal = false;
235- int selected_item_signal_index = -1;
236+ string? request_item_signal_uri = null;
237+ int request_item_signal_count = 0;
238 Unity.PreviewAction? action = null;
239
240 signals += new SignalWrapper (local_scope,
241@@ -823,18 +823,19 @@
242 return null;
243 }));
244
245- var series_preview = new Unity.SeriesPreview ();
246- var generic_preview = new Unity.GenericPreview ("child preview", "this is a child preview", null);
247+ var item1 = new Unity.SeriesItem ("file:///series_item_1.jpg", "Item #1", null);
248+ var item2 = new Unity.SeriesItem ("file:///series_item_2.jpg", "Item #2", null);
249+ var series_preview = new Unity.SeriesPreview ({item1, item2}, "file:///series_item_1.jpg");
250
251- signals += new SignalWrapper (series_preview, series_preview.selected_item_changed.connect ((index) =>
252- {
253- got_selected_item_changed_signal = true;
254- selected_item_signal_index = index;
255- return generic_preview;
256- }));
257- series_preview.add_item ("file:///media/series_item_1.jpg", "Item #1", null);
258- series_preview.add_item ("file:///media/series_item_2.jpg", "Item #2", null);
259- series_preview.set_active_preview (0, generic_preview);
260+ signals += new SignalWrapper (series_preview,
261+ series_preview.request_item_preview.connect ((uri) =>
262+ {
263+ request_item_signal_count++;
264+ request_item_signal_uri = uri;
265+ return new Unity.GenericPreview ("child preview",
266+ "this is a child preview",
267+ null);
268+ }));
269
270 signals += new SignalWrapper (local_scope,
271 local_scope.preview_uri.connect ((uri) =>
272@@ -860,7 +861,6 @@
273 assert (sp_reconstructed.selected_item == 0);
274 assert (got_preview_uri_signal);
275 assert (!got_activate_uri_signal);
276- assert (!got_selected_item_changed_signal);
277
278 sp_reconstructed.begin_updates();
279 sp_reconstructed.selected_item = 1; // this should result in series-active-index property update
280@@ -886,18 +886,17 @@
281 run_with_timeout (ml, 5000);
282
283 assert (gp_reconstructed != null);
284- assert (selected_item_signal_index == 1);
285- assert (got_selected_item_changed_signal);
286+ assert (request_item_signal_uri == item2.uri);
287+ assert (request_item_signal_count > 1);
288
289 ml = new MainLoop ();
290- got_selected_item_changed_signal = false;
291-
292+ request_item_signal_count = 0;
293+
294 sp_reconstructed.begin_updates();
295 sp_reconstructed.selected_item = 1;
296 Variant updates_var = sp_reconstructed.end_updates();
297 updates = (HashTable<string, Variant>)updates_var;
298
299- //
300 // sending update for unchanged selected_item property return preview as well, but no signal is emitted
301 call_lens_update_preview_property (mangled_uri, updates, (reply) =>
302 {
303@@ -909,8 +908,8 @@
304 run_with_timeout (ml, 5000);
305
306 assert (gp_reconstructed != null);
307- assert (selected_item_signal_index == 1);
308- assert (!got_selected_item_changed_signal);
309+ assert (request_item_signal_uri == item2.uri);
310+ assert (request_item_signal_count == 0);
311 }
312
313 }
314
315=== modified file 'test/vala/test-previews.vala'
316--- test/vala/test-previews.vala 2012-06-27 12:19:20 +0000
317+++ test/vala/test-previews.vala 2012-06-27 12:19:20 +0000
318@@ -187,7 +187,7 @@
319
320 static void test_preview_series ()
321 {
322- var preview = new SeriesPreview ();
323+ var preview = new SeriesPreview ({}, "");
324
325 // check if serialization works properly
326 var data = preview.serialize ();
327@@ -203,16 +203,25 @@
328 var artwork = new FileIcon (File.new_for_path ("/usr/share/icons/beatles.jpg"));
329 string title = "A title";
330 string desc = "Description";
331+ bool got_generate_preview_signal = false;
332
333- var preview = new SeriesPreview ();
334- preview.add_item ("file:///media/series_item_1.jpg", "Item #1", artwork);
335- preview.add_item ("file:///media/series_item_2.jpg", "Item #2", null);
336- preview.set_active_preview (0, new GenericPreview (title, desc, null));
337+ SeriesItem item1 = new SeriesItem ("file:///media/series_item_1.jpg",
338+ "Item #1", artwork);
339+ SeriesItem item2 = new SeriesItem ("file:///media/series_item_2.jpg",
340+ "Item #2", null);
341+ var preview = new SeriesPreview ({item1, item2},
342+ "file:///media/series_item_2.jpg");
343+ preview.request_item_preview.connect (() =>
344+ {
345+ got_generate_preview_signal = true;
346+ return new GenericPreview (title, desc, null);
347+ });
348
349 // check if serialization works properly
350 var data = preview.serialize ();
351 var reconstructed = Protocol.Preview.parse (data) as Protocol.SeriesPreview;
352
353+ assert (got_generate_preview_signal);
354 assert (preview.thumbnail.equal (reconstructed.thumbnail));
355 assert (reconstructed.get_items().length == 2);
356 assert (reconstructed.child_preview.title == title);

Subscribers

People subscribed via source and target branches