Merge lp:~jplacerda/libzeitgeist/776651 into lp:libzeitgeist

Proposed by J.P. Lacerda
Status: Rejected
Rejected by: Mikkel Kamstrup Erlandsen
Proposed branch: lp:~jplacerda/libzeitgeist/776651
Merge into: lp:libzeitgeist
Diff against target: 454 lines (+130/-11)
5 files modified
src/zeitgeist-event.c (+64/-5)
src/zeitgeist-event.h (+6/-0)
src/zeitgeist-subject.c (+37/-3)
src/zeitgeist-subject.h (+6/-1)
tests/test-event.c (+17/-2)
To merge this branch: bzr merge lp:~jplacerda/libzeitgeist/776651
Reviewer Review Type Date Requested Status
Mikkel Kamstrup Erlandsen Pending
Review via email: mp+60658@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Mikkel Kamstrup Erlandsen (kamstrup) wrote :

Awesome work! The code looks good at a glance. I'll do a thorough review later today and run the tests to give it a final +1.

Revision history for this message
Siegfried Gevatter (rainct) wrote :

It's missing support for old variants (without origin/current_uri). Other than that (and some typo in a comment) it looks good to me.

Nice work!

I'm uploading an updated branch with that fix plus removing the changes to the constructors for now, since those break the API (we can introduce them at some later point).

Revision history for this message
Mikkel Kamstrup Erlandsen (kamstrup) wrote :

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/zeitgeist-event.c'
2--- src/zeitgeist-event.c 2011-03-25 12:14:46 +0000
3+++ src/zeitgeist-event.c 2011-05-11 16:08:25 +0000
4@@ -82,6 +82,7 @@
5 ZEITGEIST_EVENT_INTERPRETATION,
6 ZEITGEIST_EVENT_MANIFESTATION,
7 ZEITGEIST_EVENT_ACTOR,
8+ ZEITGEIST_EVENT_ORIGIN,
9 } ZeitgeistEventDataOffset;
10
11 typedef struct
12@@ -91,6 +92,7 @@
13 gchar *interpretation;
14 gchar *manifestation;
15 gchar *actor;
16+ gchar *origin;
17 GPtrArray *subjects;
18 GByteArray *payload;
19 } ZeitgeistEventPrivate;
20@@ -431,6 +433,51 @@
21 }
22
23 /**
24+ * zeitgeist_event_get_origin:
25+ * @event: The event to get the origin from
26+ *
27+ * Get the origin of an event.
28+ * This differs from a subject's origin, as it described where the event comes
29+ * from, not where it resides.
30+ *
31+ * Returns: The origin of @event.
32+ */
33+const gchar*
34+zeitgeist_event_get_origin (ZeitgeistEvent *event)
35+{
36+ g_return_val_if_fail (ZEITGEIST_IS_EVENT (event), NULL);
37+
38+ ZeitgeistEventPrivate* priv = ZEITGEIST_EVENT_GET_PRIVATE (event);
39+
40+ return priv->origin;
41+}
42+
43+/**
44+ * zeitgeist_event_set_origin:
45+ * @event: The event to set the origin of
46+ * @origin: The origin to set
47+ *
48+ * Set the origin of an event.
49+ */
50+void
51+zeitgeist_event_set_origin (ZeitgeistEvent *event,
52+ const gchar *origin)
53+{
54+ g_return_if_fail (ZEITGEIST_IS_EVENT (event));
55+
56+ ZeitgeistEventPrivate* priv = ZEITGEIST_EVENT_GET_PRIVATE (event);
57+
58+ gchar* copy = g_strdup (origin);
59+
60+ if (priv->origin)
61+ {
62+ g_free (priv->origin);
63+ }
64+
65+ priv->origin = copy;
66+}
67+
68+/**
69 * zeitgeist_event_get_payload:
70 * @event: The event to get the payload for
71 *
72@@ -439,7 +486,6 @@
73 * Returns: The event payload or %NULL if unset. Do not free. If you want to
74 * keep the subject around you need to g_byte_array_ref() it.
75 */
76-
77 GByteArray*
78 zeitgeist_event_get_payload (ZeitgeistEvent *event)
79 {
80@@ -491,6 +537,7 @@
81 priv->interpretation = NULL;
82 priv->manifestation = NULL;
83 priv->actor = NULL;
84+ priv->origin = NULL;
85 priv->subjects = g_ptr_array_new_with_free_func (
86 (GDestroyNotify)g_object_unref);
87 priv->payload = NULL;
88@@ -506,14 +553,15 @@
89
90 if (priv->subjects)
91 {
92- /* Subjects are unreffed by the free-func of the GPtrArray */
93+ /* Subjects are unreffed by the free-func of the GPtrArray */
94 g_ptr_array_unref (priv->subjects);
95 priv->subjects = NULL;
96 }
97
98 zeitgeist_event_set_interpretation (event, NULL);
99 zeitgeist_event_set_manifestation (event, NULL);
100- zeitgeist_event_set_actor (event, NULL);
101+ zeitgeist_event_set_actor (event, NULL);
102+ zeitgeist_event_set_origin (event, NULL);
103 zeitgeist_event_set_payload (event, NULL);
104
105 G_OBJECT_CLASS (zeitgeist_event_parent_class)->finalize (object);
106@@ -574,14 +622,15 @@
107 zeitgeist_event_new_full (const gchar *interpretation,
108 const gchar *manifestation,
109 const gchar *actor,
110+ const gchar *origin,
111 ...)
112 {
113 va_list args;
114 ZeitgeistEvent *self;
115
116- va_start (args, actor);
117+ va_start (args, origin);
118 self = zeitgeist_event_new_full_valist (interpretation, manifestation,
119- actor, args);
120+ actor, origin, args);
121 va_end (args);
122
123 return self;
124@@ -605,6 +654,7 @@
125 zeitgeist_event_new_full_valist (const gchar *interpretation,
126 const gchar *manifestation,
127 const gchar *actor,
128+ const gchar *origin,
129 va_list args)
130 {
131 ZeitgeistEvent *self;
132@@ -614,6 +664,7 @@
133 zeitgeist_event_set_interpretation (self, interpretation);
134 zeitgeist_event_set_manifestation (self, manifestation);
135 zeitgeist_event_set_actor (self, actor);
136+ zeitgeist_event_set_origin (self, origin);
137
138 subject = va_arg (args, ZeitgeistSubject*);
139 while (subject != NULL)
140@@ -686,6 +737,9 @@
141 g_variant_iter_loop (event_data, "s", &str);
142 zeitgeist_event_set_actor (result, str[0] == '\0' ? NULL : str);
143
144+ g_variant_iter_loop (event_data, "s", &str);
145+ zeitgeist_event_set_origin (result, str[0] == '\0' ? NULL : str);
146+
147 /* Build the list of subjects */
148 while (g_variant_iter_loop (subjects, "as", &subject_data))
149 {
150@@ -720,6 +774,9 @@
151 g_variant_iter_loop (subject_data, "s", &str);
152 zeitgeist_subject_set_storage (subject, str[0] == '\0' ? NULL : str);
153
154+ g_variant_iter_loop (subject_data, "s", &str);
155+ zeitgeist_subject_set_current_uri (subject, str[0] == '\0' ? NULL : str);
156+
157 zeitgeist_event_add_subject (result, subject);
158 }
159
160@@ -787,6 +844,7 @@
161 g_variant_builder_add (&b, "s", (bif = zeitgeist_event_get_interpretation(event), bif ? bif : ""));
162 g_variant_builder_add (&b, "s", (bif = zeitgeist_event_get_manifestation(event), bif ? bif : ""));
163 g_variant_builder_add (&b, "s", (bif = zeitgeist_event_get_actor (event), bif ? bif : ""));
164+ g_variant_builder_add (&b, "s", (bif = zeitgeist_event_get_origin (event), bif ? bif : ""));
165 g_variant_builder_close (&b);
166
167 /* Build subjects */
168@@ -803,6 +861,7 @@
169 g_variant_builder_add (&b, "s", (bif = zeitgeist_subject_get_mimetype(su), bif ? bif : ""));
170 g_variant_builder_add (&b, "s", (bif = zeitgeist_subject_get_text(su), bif ? bif : ""));
171 g_variant_builder_add (&b, "s", (bif = zeitgeist_subject_get_storage(su), bif ? bif : ""));
172+ g_variant_builder_add (&b, "s", (bif = zeitgeist_subject_get_current_uri(su), bif ? bif : ""));
173 g_variant_builder_close (&b);
174 }
175 g_variant_builder_close (&b);
176
177=== modified file 'src/zeitgeist-event.h'
178--- src/zeitgeist-event.h 2011-03-07 14:19:39 +0000
179+++ src/zeitgeist-event.h 2011-05-11 16:08:25 +0000
180@@ -70,11 +70,13 @@
181 ZeitgeistEvent* zeitgeist_event_new_full (const gchar *interpretation,
182 const gchar *manifestation,
183 const gchar *actor,
184+ const gchar *origin,
185 ...) G_GNUC_NULL_TERMINATED;
186
187 ZeitgeistEvent* zeitgeist_event_new_full_valist (const gchar *interpretation,
188 const gchar *manifestation,
189 const gchar *actor,
190+ const gchar *origin,
191 va_list args);
192
193 ZeitgeistEvent* zeitgeist_event_new_from_variant (GVariant *event);
194@@ -104,6 +106,10 @@
195 void zeitgeist_event_set_actor (ZeitgeistEvent *event,
196 const gchar *actor);
197
198+const gchar* zeitgeist_event_get_origin (ZeitgeistEvent *event);
199+void zeitgeist_event_set_origin (ZeitgeistEvent *event,
200+ const gchar *origin);
201+
202 void zeitgeist_event_set_actor_from_app_info (ZeitgeistEvent *event,
203 GAppInfo *appinfo);
204
205
206=== modified file 'src/zeitgeist-subject.c'
207--- src/zeitgeist-subject.c 2011-03-07 14:19:39 +0000
208+++ src/zeitgeist-subject.c 2011-05-11 16:08:25 +0000
209@@ -43,6 +43,8 @@
210 ZEITGEIST_SUBJECT_MIMETYPE,
211 ZEITGEIST_SUBJECT_ORIGIN,
212 ZEITGEIST_SUBJECT_TEXT,
213+ ZEITGEIST_SUBJECT_STORAGE,
214+ ZEITGEIST_SUBJECT_CURRENT_URI,
215 } ZeitgeistSubjectDataOffset;
216
217 typedef struct
218@@ -54,6 +56,7 @@
219 gchar *origin;
220 gchar *text;
221 gchar *storage;
222+ gchar *current_uri;
223 } ZeitgeistSubjectPrivate;
224
225 const gchar*
226@@ -245,6 +248,33 @@
227 priv->storage = copy;
228 }
229
230+const gchar*
231+zeitgeist_subject_get_current_uri (ZeitgeistSubject *subject)
232+{
233+ g_return_val_if_fail (ZEITGEIST_IS_SUBJECT (subject), NULL);
234+
235+ ZeitgeistSubjectPrivate *priv = ZEITGEIST_SUBJECT_GET_PRIVATE (subject);
236+ return priv->current_uri;
237+}
238+
239+void
240+zeitgeist_subject_set_current_uri (ZeitgeistSubject *subject,
241+ const gchar *current_uri)
242+{
243+ g_return_if_fail (ZEITGEIST_IS_SUBJECT (subject));
244+
245+ ZeitgeistSubjectPrivate *priv = ZEITGEIST_SUBJECT_GET_PRIVATE (subject);
246+
247+ gchar* copy = g_strdup (current_uri);
248+
249+ if (priv->current_uri)
250+ {
251+ g_free (priv->current_uri);
252+ }
253+
254+ priv->current_uri = copy;
255+}
256+
257 static void
258 zeitgeist_subject_init (ZeitgeistSubject *object)
259 {
260@@ -258,6 +288,7 @@
261 priv->origin = NULL;
262 priv->text = NULL;
263 priv->storage = NULL;
264+ priv->current_uri = NULL;
265 }
266
267 static void
268@@ -275,6 +306,7 @@
269 zeitgeist_subject_set_origin (subject, NULL);
270 zeitgeist_subject_set_text (subject, NULL);
271 zeitgeist_subject_set_storage (subject, NULL);
272+ zeitgeist_subject_set_current_uri (subject, NULL);
273
274 G_OBJECT_CLASS (zeitgeist_subject_parent_class)->finalize (object);
275 }
276@@ -319,7 +351,7 @@
277 * @text: A small textual representation of the subject suitable for display
278 * @storage: String identifier for the storage medium the subject is on.
279 * Se zeitgeist_subject_set_storage() for details
280- *
281+ * @current_uri: The current URI or URL of the subject
282 * Create a new subject structure with predefined data
283 *
284 * Returns: A newly create #ZeitgeistSubject instance. The returned subject will
285@@ -335,7 +367,8 @@
286 const gchar *mimetype,
287 const gchar *origin,
288 const gchar *text,
289- const gchar *storage)
290+ const gchar *storage,
291+ const gchar *current_uri)
292 {
293 ZeitgeistSubject *self;
294
295@@ -347,6 +380,7 @@
296 zeitgeist_subject_set_origin (self, origin);
297 zeitgeist_subject_set_text (self, text);
298 zeitgeist_subject_set_storage (self, storage);
299-
300+ zeitgeist_subject_set_current_uri (self, current_uri);
301+
302 return self;
303 }
304
305=== modified file 'src/zeitgeist-subject.h'
306--- src/zeitgeist-subject.h 2011-03-07 14:19:39 +0000
307+++ src/zeitgeist-subject.h 2011-05-11 16:08:25 +0000
308@@ -71,7 +71,8 @@
309 const gchar *mimetype,
310 const gchar *origin,
311 const gchar *text,
312- const gchar *storage);
313+ const gchar *storage,
314+ const gchar *current_uri);
315
316 const gchar* zeitgeist_subject_get_uri (ZeitgeistSubject *subject);
317 void zeitgeist_subject_set_uri (ZeitgeistSubject *subject,
318@@ -101,6 +102,10 @@
319 void zeitgeist_subject_set_storage (ZeitgeistSubject *subject,
320 const gchar *storage);
321
322+const gchar* zeitgeist_subject_get_current_uri (ZeitgeistSubject *subject);
323+void zeitgeist_subject_set_current_uri (ZeitgeistSubject *subject,
324+ const gchar *current_uri);
325+
326 G_END_DECLS
327
328 #endif /* _ZEITGEIST_SUBJECT_H_ */
329
330=== modified file 'tests/test-event.c'
331--- tests/test-event.c 2011-02-14 08:27:28 +0000
332+++ tests/test-event.c 2011-05-11 16:08:25 +0000
333@@ -62,6 +62,7 @@
334 g_assert_cmpstr (NULL, ==, zeitgeist_event_get_interpretation (ev));
335 g_assert_cmpstr (NULL, ==, zeitgeist_event_get_manifestation (ev));
336 g_assert_cmpstr (NULL, ==, zeitgeist_event_get_actor (ev));
337+ g_assert_cmpstr (NULL, ==, zeitgeist_event_get_origin (ev));
338 g_assert_cmpint (0, ==, zeitgeist_event_num_subjects (ev));
339 g_assert (zeitgeist_event_get_payload (ev) == NULL);
340
341@@ -79,13 +80,15 @@
342 ZEITGEIST_ZG_ACCESS_EVENT,
343 ZEITGEIST_ZG_USER_ACTIVITY,
344 "application://firefox.desktop",
345+ "origin",
346 zeitgeist_subject_new_full ("http://example.com",
347 ZEITGEIST_NFO_WEBSITE,
348 ZEITGEIST_NFO_REMOTE_DATA_OBJECT,
349 "text/html",
350 "http://example.com",
351 "example.com",
352- "net"),
353+ "net",
354+ "http://current-example.com"),
355 zeitgeist_subject_new (),
356 NULL);
357
358@@ -94,6 +97,7 @@
359 g_assert_cmpstr (ZEITGEIST_ZG_ACCESS_EVENT,==, zeitgeist_event_get_interpretation (ev));
360 g_assert_cmpstr (ZEITGEIST_ZG_USER_ACTIVITY, ==, zeitgeist_event_get_manifestation (ev));
361 g_assert_cmpstr ("application://firefox.desktop", ==, zeitgeist_event_get_actor (ev));
362+ g_assert_cmpstr ("origin", ==, zeitgeist_event_get_origin (ev));
363 g_assert_cmpint (2, ==, zeitgeist_event_num_subjects (ev));
364 g_assert (zeitgeist_event_get_payload (ev) == NULL);
365
366@@ -105,6 +109,7 @@
367 g_assert_cmpstr ("http://example.com", ==, zeitgeist_subject_get_origin (su));
368 g_assert_cmpstr ("example.com", ==, zeitgeist_subject_get_text (su));
369 g_assert_cmpstr ("net", ==, zeitgeist_subject_get_storage (su));
370+ g_assert_cmpstr ("http://current-example.com", ==, zeitgeist_subject_get_current_uri (su));
371
372 su = zeitgeist_event_get_subject (ev, 1);
373 g_assert (zeitgeist_subject_get_uri(su) == NULL);
374@@ -114,6 +119,7 @@
375 g_assert (zeitgeist_subject_get_origin (su) == NULL);
376 g_assert (zeitgeist_subject_get_text (su) == NULL);
377 g_assert (zeitgeist_subject_get_storage (su) == NULL);
378+ g_assert (zeitgeist_subject_get_current_uri (su) == NULL);
379
380 g_object_unref (ev);
381 }
382@@ -151,6 +157,7 @@
383 g_variant_builder_add (&b, "s", ZEITGEIST_ZG_ACCESS_EVENT);
384 g_variant_builder_add (&b, "s", ZEITGEIST_ZG_USER_ACTIVITY);
385 g_variant_builder_add (&b, "s", "application://foo.desktop");
386+ g_variant_builder_add (&b, "s", "origin");
387 g_variant_builder_close (&b);
388
389 /* Build subjects */
390@@ -164,6 +171,7 @@
391 g_variant_builder_add (&b, "s", "text/plain");
392 g_variant_builder_add (&b, "s", "foo.txt");
393 g_variant_builder_add (&b, "s", "36e5604e-7e1b-4ebd-bb6a-184c6ea99627");
394+ g_variant_builder_add (&b, "s", "file:///tmp/current.txt");
395 g_variant_builder_close (&b);
396 }
397 g_variant_builder_close (&b);
398@@ -183,6 +191,7 @@
399 g_assert_cmpstr (ZEITGEIST_ZG_ACCESS_EVENT,==, zeitgeist_event_get_interpretation (ev));
400 g_assert_cmpstr (ZEITGEIST_ZG_USER_ACTIVITY, ==, zeitgeist_event_get_manifestation (ev));
401 g_assert_cmpstr ("application://foo.desktop", ==, zeitgeist_event_get_actor (ev));
402+ g_assert_cmpstr ("origin", ==, zeitgeist_event_get_origin (ev));
403 g_assert_cmpint (1, ==, zeitgeist_event_num_subjects (ev));
404
405 su = zeitgeist_event_get_subject (ev, 0);
406@@ -193,6 +202,7 @@
407 g_assert_cmpstr ("file:///tmp", ==, zeitgeist_subject_get_origin (su));
408 g_assert_cmpstr ("foo.txt", ==, zeitgeist_subject_get_text (su));
409 g_assert_cmpstr ("36e5604e-7e1b-4ebd-bb6a-184c6ea99627", ==, zeitgeist_subject_get_storage (su));
410+ g_assert_cmpstr ("file:///tmp/current.txt", ==, zeitgeist_subject_get_current_uri (su));
411
412 payload = zeitgeist_event_get_payload (ev);
413 g_assert (payload != NULL);
414@@ -218,6 +228,7 @@
415 g_assert (zeitgeist_event_get_interpretation (marshalled) == NULL);
416 g_assert (zeitgeist_event_get_manifestation (marshalled) == NULL);
417 g_assert (zeitgeist_event_get_actor (marshalled) == NULL);
418+ g_assert (zeitgeist_event_get_origin (marshalled) == NULL);
419 g_assert_cmpint (0, ==, zeitgeist_event_num_subjects (marshalled));
420 g_assert (zeitgeist_event_get_payload (marshalled) == NULL);
421
422@@ -237,13 +248,15 @@
423 ZEITGEIST_ZG_ACCESS_EVENT,
424 ZEITGEIST_ZG_USER_ACTIVITY,
425 "application://firefox.desktop",
426+ "origin",
427 zeitgeist_subject_new_full ("http://example.com",
428 ZEITGEIST_NFO_WEBSITE,
429 ZEITGEIST_NFO_REMOTE_DATA_OBJECT,
430 "text/html",
431 "http://example.com",
432 "example.com",
433- "net"),
434+ "net",
435+ "http://current-example.com"),
436 NULL);
437 payload = g_byte_array_new ();
438 byte = 255;
439@@ -257,6 +270,7 @@
440 g_assert_cmpstr (ZEITGEIST_ZG_ACCESS_EVENT,==, zeitgeist_event_get_interpretation (marshalled));
441 g_assert_cmpstr (ZEITGEIST_ZG_USER_ACTIVITY, ==, zeitgeist_event_get_manifestation (marshalled));
442 g_assert_cmpstr ("application://firefox.desktop", ==, zeitgeist_event_get_actor (marshalled));
443+ g_assert_cmpstr ("origin", ==, zeitgeist_event_get_origin (marshalled));
444 g_assert_cmpint (1, ==, zeitgeist_event_num_subjects (marshalled));
445
446 payload = zeitgeist_event_get_payload (marshalled);
447@@ -272,6 +286,7 @@
448 g_assert_cmpstr ("http://example.com", ==, zeitgeist_subject_get_origin (su));
449 g_assert_cmpstr ("example.com", ==, zeitgeist_subject_get_text (su));
450 g_assert_cmpstr ("net", ==, zeitgeist_subject_get_storage (su));
451+ g_assert_cmpstr ("http://current-example.com", ==, zeitgeist_subject_get_current_uri (su));
452
453 g_object_unref (orig);
454 g_object_unref (marshalled);

Subscribers

People subscribed via source and target branches