Merge lp:~mhr3/zeitgeist-datahub/gdbus-update into lp:zeitgeist-datahub/0.7

Proposed by Michal Hruby
Status: Merged
Merged at revision: 20
Proposed branch: lp:~mhr3/zeitgeist-datahub/gdbus-update
Merge into: lp:zeitgeist-datahub/0.7
Diff against target: 331 lines (+216/-31)
5 files modified
configure.ac (+4/-4)
src/Makefile.am (+4/-1)
src/desktop-launch-listener.vala (+185/-0)
src/glib-extra.vapi (+5/-0)
src/zeitgeist-datahub.vala (+18/-26)
To merge this branch: bzr merge lp:~mhr3/zeitgeist-datahub/gdbus-update
Reviewer Review Type Date Requested Status
Mikkel Kamstrup Erlandsen (community) Approve
Zeitgeist Data-Sources Team Pending
Review via email: mp+49032@code.launchpad.net
To post a comment you must log in.
23. By Michal Hruby

Remove unused code

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

Looks good!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'configure.ac'
2--- configure.ac 2011-02-02 23:23:21 +0000
3+++ configure.ac 2011-02-09 09:14:26 +0000
4@@ -31,18 +31,18 @@
5 dnl ==============================================
6 dnl Check for vala
7 dnl ==============================================
8-AM_PROG_VALAC([0.9.8])
9+AM_PROG_VALAC([0.11.2])
10
11 AM_SILENT_RULES([yes])
12
13 dnl ==============================================
14 dnl Check that we meet the dependencies
15 dnl ==============================================
16-MIN_GLIB_VERSION=2.22.0
17+MIN_GLIB_VERSION=2.26.0
18 MIN_GTK_VERSION=2.16.0
19-MIN_ZEITGEIST_VERSION=0.2.3
20+MIN_ZEITGEIST_VERSION=0.3.1
21
22-LIBRARY_MODULES="glib-2.0 >= $MIN_GLIB_VERSION gobject-2.0 dbus-glib-1 zeitgeist-1.0 >= $MIN_ZEITGEIST_VERSION"
23+LIBRARY_MODULES="glib-2.0 >= $MIN_GLIB_VERSION gobject-2.0 gio-2.0 gio-unix-2.0 zeitgeist-1.0 >= $MIN_ZEITGEIST_VERSION"
24
25 PKG_CHECK_MODULES(DATAHUB_MODULES, [$LIBRARY_MODULES])
26 PKG_CHECK_MODULES(GTK, [gtk+-2.0 >= $MIN_GTK_VERSION])
27
28=== modified file 'src/Makefile.am'
29--- src/Makefile.am 2011-01-20 20:33:13 +0000
30+++ src/Makefile.am 2011-02-09 09:14:26 +0000
31@@ -1,7 +1,9 @@
32 VALAFLAGS = \
33- --pkg dbus-glib-1 \
34+ --pkg gio-2.0 \
35+ --pkg gio-unix-2.0 \
36 --pkg gtk+-2.0 \
37 --pkg zeitgeist-1.0 \
38+ glib-extra.vapi \
39 $(NULL)
40
41 datahubdir = $(bindir)
42@@ -12,6 +14,7 @@
43 zeitgeist_datahub_LDADD = $(DATAHUB_MODULES_LIBS) $(GTK_LIBS)
44 zeitgeist_datahub_SOURCES = \
45 data-provider.vala \
46+ desktop-launch-listener.vala \
47 recent-manager-provider.vala \
48 zeitgeist-datahub.vala \
49 $(NULL)
50
51=== added file 'src/desktop-launch-listener.vala'
52--- src/desktop-launch-listener.vala 1970-01-01 00:00:00 +0000
53+++ src/desktop-launch-listener.vala 2011-02-09 09:14:26 +0000
54@@ -0,0 +1,185 @@
55+/*
56+ * Zeitgeist
57+ *
58+ * Copyright (C) 2010 Michal Hruby <michal.mhr@gmail.com>
59+ *
60+ * This program is free software: you can redistribute it and/or modify
61+ * it under the terms of the GNU Lesser General Public License as published by
62+ * the Free Software Foundation, either version 3 of the License, or
63+ * (at your option) any later version.
64+ *
65+ * This program is distributed in the hope that it will be useful,
66+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
67+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
68+ * GNU Lesser General Public License for more details.
69+ *
70+ * You should have received a copy of the GNU Lesser General Public License
71+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
72+ *
73+ * Authored by Michal Hruby <michal.mhr@gmail.com>
74+ *
75+ */
76+
77+using Zeitgeist;
78+
79+public class DesktopLaunchListener : DataProvider
80+{
81+ public DesktopLaunchListener (DataHub datahub)
82+ {
83+ GLib.Object (unique_id: "com.zeitgeist-project,datahub,gio-launch-listener",
84+ name: "Launched desktop files",
85+ description: "Logs events about launched desktop files using GIO",
86+ datahub: datahub);
87+ }
88+
89+ // if vala didn't have bug in construct-only properties, the properties
90+ // would be construct-only
91+ public override string unique_id { get; construct set; }
92+ public override string name { get; construct set; }
93+ public override string description { get; construct set; }
94+
95+ public override DataHub datahub { get; construct set; }
96+ public override bool enabled { get; set; default = true; }
97+ public override bool register { get; construct set; default = true; }
98+
99+ private GLib.DBusConnection bus;
100+ private uint launched_signal_id = 0;
101+
102+ construct
103+ {
104+ try
105+ {
106+ bus = GLib.Bus.get_sync (GLib.BusType.SESSION);
107+ }
108+ catch (IOError err)
109+ {
110+ warning ("%s", err.message);
111+ }
112+ }
113+
114+ public override void start ()
115+ {
116+ if (launched_signal_id != 0) return;
117+
118+ launched_signal_id = bus.signal_subscribe (null,
119+ "org.gtk.gio.DesktopAppInfo",
120+ "Launched",
121+ "/org/gtk/gio/DesktopAppInfo",
122+ null,
123+ 0,
124+ this.signal_received);
125+ }
126+
127+ private void signal_received (GLib.DBusConnection connection,
128+ string sender,
129+ string object_path,
130+ string interface_name,
131+ string signal_name,
132+ Variant parameters)
133+ {
134+ // unpack the variant
135+ Variant desktop_variant;
136+ VariantIter uris;
137+ Variant dict;
138+ int64 pid;
139+
140+ parameters.get ("(@aysxas@a{sv})", out desktop_variant, null,
141+ out pid, out uris, out dict);
142+
143+ string desktop_file = desktop_variant.get_bytestring ();
144+ if (desktop_file == "") return;
145+
146+ // are we going to do anything with these?
147+ string uri;
148+ while (uris.next ("s", out uri))
149+ {
150+ debug ("ran with uri: %s", uri);
151+ }
152+
153+ // here we should be able to get info about the origin of the launch
154+ HashTable<string, Variant> extra_params = (HashTable<string, Variant>) dict;
155+
156+ string? launched_display_name;
157+ string launched_uri = get_uri_for_desktop_file (desktop_file,
158+ out launched_display_name);
159+ if (launched_uri == null)
160+ {
161+ warning ("Unable to open desktop file '%s'", desktop_file);
162+ return;
163+ }
164+
165+ string? launcher_uri = null;
166+ unowned Variant origin_df = extra_params.lookup ("origin-desktop-file");
167+ if (origin_df != null)
168+ {
169+ launcher_uri = get_uri_for_desktop_file (origin_df.get_bytestring ());
170+ }
171+ else
172+ {
173+ unowned Variant origin_prgname = extra_params.lookup ("origin-prgname");
174+ if (origin_prgname != null)
175+ {
176+ unowned string? prgname = origin_prgname.get_bytestring ();
177+ string origin_desktop_id = prgname + ".desktop";
178+ DesktopAppInfo id_check = new DesktopAppInfo (origin_desktop_id);
179+ if (id_check != null) launcher_uri = "application://%s".printf (origin_desktop_id);
180+ }
181+ }
182+
183+ // FIXME: check if the app should be shown, and return? /
184+ // set manifestation to WORLD?_EVENT
185+
186+ var event = new Zeitgeist.Event ();
187+ var subject = new Zeitgeist.Subject ();
188+
189+ event.set_actor (launcher_uri);
190+ event.set_interpretation (Zeitgeist.ZG_ACCESS_EVENT);
191+ event.set_manifestation (Zeitgeist.ZG_USER_ACTIVITY);
192+ event.add_subject (subject);
193+
194+ subject.set_uri (launched_uri);
195+ subject.set_interpretation (Zeitgeist.NFO_SOFTWARE);
196+ subject.set_manifestation (Zeitgeist.NFO_SOFTWARE_ITEM);
197+ subject.set_mimetype ("application/x-desktop");
198+ subject.set_text (launched_display_name);
199+
200+ var arr = new GenericArray<Event> ();
201+ arr.add (event);
202+
203+ items_available (arr);
204+ }
205+
206+ private string? get_uri_for_desktop_file (string desktop_file,
207+ out string? display_name = null)
208+ {
209+ DesktopAppInfo? dai;
210+ if (Path.is_absolute (desktop_file))
211+ {
212+ dai = new DesktopAppInfo.from_filename (desktop_file);
213+ }
214+ else
215+ {
216+ dai = new DesktopAppInfo (desktop_file);
217+ }
218+
219+ if (dai == null)
220+ {
221+ display_name = null;
222+ return null;
223+ }
224+
225+ string desktop_id = dai.get_id () ?? Path.get_basename (dai.get_filename ());
226+ display_name = dai.get_display_name ();
227+ return "application://%s".printf (desktop_id);
228+ }
229+
230+ public override void stop ()
231+ {
232+ if (launched_signal_id != 0)
233+ {
234+ bus.signal_unsubscribe (launched_signal_id);
235+ launched_signal_id = 0;
236+ }
237+ }
238+}
239+
240
241=== added file 'src/glib-extra.vapi'
242--- src/glib-extra.vapi 1970-01-01 00:00:00 +0000
243+++ src/glib-extra.vapi 2011-02-09 09:14:26 +0000
244@@ -0,0 +1,5 @@
245+[CCode (cprefix = "G", lower_case_cprefix = "g_")]
246+namespace GLibExtra {
247+ [CCode (cname = "GLIB_CHECK_VERSION")]
248+ public static bool check_version (uint major, uint minor, uint micro);
249+}
250
251=== modified file 'src/zeitgeist-datahub.vala'
252--- src/zeitgeist-datahub.vala 2011-02-02 15:23:46 +0000
253+++ src/zeitgeist-datahub.vala 2011-02-09 09:14:26 +0000
254@@ -25,7 +25,7 @@
255 [DBus (name = "org.gnome.zeitgeist.datahub")]
256 public interface DataHubService : Object
257 {
258- public abstract string[] get_data_providers () throws DBus.Error;
259+ public abstract string[] get_data_providers () throws IOError;
260 }
261
262 public class DataHub : Object, DataHubService
263@@ -109,6 +109,11 @@
264 */
265 providers.prepend (new RecentManagerGtk (this));
266
267+ if (GLibExtra.check_version (2, 28, 0))
268+ {
269+ providers.prepend (new DesktopLaunchListener (this));
270+ }
271+
272 foreach (unowned DataProvider prov in providers)
273 {
274 bool enabled = true;
275@@ -200,36 +205,23 @@
276 }
277 }
278
279+ const string UNIQUE_NAME = "org.gnome.zeitgeist.datahub";
280+ const string OBJECT_PATH = "/org/gnome/zeitgeist/datahub";
281+
282 protected void run ()
283 {
284- try
285- {
286- var connection = DBus.Bus.get (DBus.BusType.SESSION);
287- dynamic DBus.Object bus =
288- connection.get_object ("org.freedesktop.DBus",
289- "/org/freedesktop/DBus",
290- "org.freedesktop.DBus");
291-
292- uint request_name_result =
293- bus.request_name ("org.gnome.zeitgeist.datahub",
294- (uint) DBus.NameFlag.DO_NOT_QUEUE);
295-
296- if (request_name_result == DBus.RequestNameReply.PRIMARY_OWNER)
297- {
298- connection.register_object ("/org/gnome/zeitgeist/datahub", this);
299- start_data_providers ();
300- main_loop.run ();
301- }
302- else
303+ Bus.own_name (BusType.SESSION, UNIQUE_NAME, BusNameOwnerFlags.NONE,
304+ (conn) => { conn.register_object (OBJECT_PATH, (DataHubService) this); },
305+ () => { start_data_providers (); },
306+ () =>
307 {
308 warning ("Unable to get name \"org.gnome.zeitgeist.datahub\"" +
309 " on the bus!");
310+ this.quit ();
311 }
312- }
313- catch (GLib.Error err)
314- {
315- warning ("%s", err.message);
316- }
317+ );
318+
319+ main_loop.run ();
320 }
321
322 protected void quit ()
323@@ -264,7 +256,7 @@
324 return actors;
325 }
326
327- public string[] get_data_providers () throws DBus.Error
328+ public string[] get_data_providers () throws IOError
329 {
330 string[] arr = {};
331 foreach (var provider in providers)

Subscribers

People subscribed via source and target branches