[gnome-launch-box] properly replace the application module with tracker
- From: Sven Herzberg <herzi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-launch-box] properly replace the application module with tracker
- Date: Thu, 11 Feb 2010 13:35:01 +0000 (UTC)
commit 93a4c3aa3aaacfd7113684f3c1f0da523276d0d2
Author: Sven Herzberg <herzi gnome-de org>
Date: Sun Feb 7 23:57:43 2010 +0100
properly replace the application module with tracker
* configure.ac: be able to disable tracker; use tracker only if it's
there
* src/Makefile.am,
* src/lb-module-manager.c: conditionally include the new tracker module
instead of the application module
* src/lb-module-tracker.c: become a drop-in replacement for the
application module
configure.ac | 12 ++++++++
src/Makefile.am | 22 +++++++++-----
src/lb-module-manager.c | 17 ++++++++---
src/lb-module-tracker.c | 71 ++++++++++++++++++++++++++++++++--------------
4 files changed, 87 insertions(+), 35 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 896314a..b6a6e28 100644
--- a/configure.ac
+++ b/configure.ac
@@ -43,6 +43,17 @@ AM_GLIB_GNU_GETTEXT
dnl -----------------------------------------------------------
+AC_MSG_CHECKING([whether to use tracker for application search])
+AC_ARG_ENABLE([tracker], AS_HELP_STRING([--disable-tracker],[disable tracker (default: enable if available]))
+if test -z "$enable_tracker" || test "$enable_tracker" != "no"; then
+ PKG_CHECK_EXISTS(tracker-client-0.7,
+ [tracker_client="tracker-client-0.7 gio-unix-2.0"
+ AC_MSG_RESULT([yes (0.7 found)])
+ AC_DEFINE_UNQUOTED([HAVE_TRACKER],[1],[specify whether we can use tracker])],
+ [AC_MSG_RESULT([no])])
+fi
+AM_CONDITIONAL([HAVE_TRACKER],[test -n "$tracker_client"])
+
PKG_CHECK_MODULES(LB,[
glib-2.0 >= 2.14
gtk+-2.0 >= 2.10
@@ -52,6 +63,7 @@ PKG_CHECK_MODULES(LB,[
gnome-desktop-2.0 >= 2.10
libebook-1.2 >= 1.8
gconf-2.0
+ $tracker_client
])
AC_MSG_CHECKING([whether the GNOME control-center uses custom keybindings])
diff --git a/src/Makefile.am b/src/Makefile.am
index 71799ad..e3017cd 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -26,24 +26,20 @@ gnome_launch_box_SOURCES = \
lb-item-dummy.h \
lb-item-file.c \
lb-item-file.h \
- lb-module.c \
- lb-module.h \
- lb-module-bookmarks.c \
- lb-module-bookmarks.h \
+ lb-module.c \
+ lb-module.h \
+ lb-module-bookmarks.c \
+ lb-module-bookmarks.h \
lb-module-manager.c \
lb-module-manager.h \
lb-module-dummy.c \
lb-module-dummy.h \
- lb-module-applications.c \
- lb-module-applications.h \
lb-module-evolution.c \
lb-module-evolution.h \
lb-module-files.c \
lb-module-files.h \
lb-module-recent.c \
lb-module-recent.h \
- lb-module-tracker.c \
- lb-module-tracker.h \
lb-object.c \
lb-object.h \
lb-private.h \
@@ -60,6 +56,16 @@ gnome_launch_box_SOURCES = \
tomboykeybinder.c \
tomboykeybinder.h
+if HAVE_TRACKER
+gnome_launch_box_SOURCES+=\
+ lb-module-tracker.c \
+ lb-module-tracker.h
+else
+gnome_launch_box_SOURCES+=\
+ lb-module-applications.c \
+ lb-module-applications.h
+endif
+
gnome_launch_box_LDADD = @LB_LIBS@
lb-marshal.h: lb-marshal.list
diff --git a/src/lb-module-manager.c b/src/lb-module-manager.c
index 5eccd71..30e7fd2 100644
--- a/src/lb-module-manager.c
+++ b/src/lb-module-manager.c
@@ -28,15 +28,19 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
-#include "lb-module-applications.h"
#include "lb-module-bookmarks.h"
#include "lb-module-evolution.h"
#include "lb-module-manager.h"
#include "lb-module-recent.h"
#include "lb-module-files.h"
-#include "lb-module-tracker.h"
#include "lb-utils.h"
+#ifdef HAVE_TRACKER
+#include "lb-module-tracker.h"
+#else
+#include "lb-module-applications.h"
+#endif
+
static void lb_module_manager_finalize (GObject *object);
static void lb_module_manager_set_property (GObject *object,
guint property_id,
@@ -75,9 +79,15 @@ lb_module_manager_class_init (LbModuleManagerClass *klass)
static void
lb_module_manager_init (LbModuleManager *manager)
{
+#ifdef HAVE_TRACKER
+ manager->modules = g_list_append (manager->modules,
+ g_object_new (LB_TYPE_MODULE_TRACKER,
+ NULL));
+#else
manager->modules = g_list_append (manager->modules,
g_object_new (LB_TYPE_MODULE_APPLICATIONS,
NULL));
+#endif
manager->modules = g_list_append (manager->modules,
g_object_new (LB_TYPE_MODULE_RECENT,
NULL));
@@ -90,9 +100,6 @@ lb_module_manager_init (LbModuleManager *manager)
manager->modules = g_list_append (manager->modules,
g_object_new (LB_TYPE_MODULE_FILES,
NULL));
- manager->modules = g_list_append (manager->modules,
- g_object_new (LB_TYPE_MODULE_TRACKER,
- NULL));
}
static void
diff --git a/src/lb-module-tracker.c b/src/lb-module-tracker.c
index 5aa38d9..920579b 100644
--- a/src/lb-module-tracker.c
+++ b/src/lb-module-tracker.c
@@ -25,16 +25,20 @@
#include "config.h"
#include <string.h>
-
+#include <gio/gdesktopappinfo.h>
+#include <libtracker-client/tracker.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
+#include "lb-item-application.h"
#include "lb-module-tracker.h"
#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), LB_TYPE_MODULE_TRACKER, LbModuleTrackerPriv))
typedef struct _LbModuleTrackerPriv LbModuleTrackerPriv;
-struct _LbModuleTrackerPriv {
- gint placeholder; /* Remove this, can't have empty struct */
+
+struct _LbModuleTrackerPriv
+{
+ TrackerClient* client;
};
#if 0
@@ -108,9 +112,11 @@ lb_module_tracker_class_init (LbModuleTrackerClass *klass)
static void
lb_module_tracker_init (LbModuleTracker *tracker)
{
- LbModuleTrackerPriv *priv;
+ LbModuleTrackerPriv *priv;
+
+ priv = GET_PRIV (tracker);
- priv = GET_PRIV (tracker);
+ priv->client = tracker_client_new (0, -1);
}
static void
@@ -211,6 +217,11 @@ lb_module_tracker_query (LbModule *module,
NULL,
NULL
};
+ enum
+ {
+ URN, TITLE, COMMENT, COMMANDLINE
+ };
+ GList* list = NULL;
gchar* sparql = g_strdup_printf ("SELECT ?urn ?title ?tooltip ?link fts:rank(?urn) "
"WHERE { ?urn a nfo:Software ;"
" nie:title ?title ;"
@@ -219,34 +230,50 @@ lb_module_tracker_query (LbModule *module,
" } "
"ORDER BY DESC(fts:rank(?urn)) "
"OFFSET 0 LIMIT 10", match);
- gchar* out = NULL;
- gint exit = -1;
+ GPtrArray* result;
GError* error = NULL;
priv = GET_PRIV (module);
argv[G_N_ELEMENTS (argv) - 2] = sparql;
- if (g_spawn_sync (g_get_home_dir (),
- argv,
- NULL,
- G_SPAWN_SEARCH_PATH,
- NULL, NULL,
- &out, NULL,
- &exit,
- &error))
+ result = tracker_resources_sparql_query (priv->client, sparql, &error);
+
+ if (error)
{
- g_print ("%s\n", out);
+ g_warning ("error querying tracker for \"%s\": %s",
+ match, error->message);
+ g_error_free (error);
}
- else
+ if (result)
{
- g_printerr ("error querying tracker: %s\n",
- error->message);
-
- g_error_free (error);
+ size_t index;
+
+ for (index = 0; index < result->len; index++)
+ {
+ gchar const** column = g_ptr_array_index (result, index);
+ column[URN] += strlen ("file://");
+ GDesktopAppInfo* info = g_desktop_app_info_new_from_filename (column[URN]);
+ GIcon* icon = g_app_info_get_icon (G_APP_INFO (info));
+ gchar const* name = NULL;
+ if (G_IS_THEMED_ICON (icon))
+ {
+ gchar const * const * names = g_themed_icon_get_names (G_THEMED_ICON (icon));
+ if (names)
+ {
+ name = *names;
+ }
+ }
+ LbItemApplication* item = g_object_new (LB_TYPE_ITEM_APPLICATION, "name", column[TITLE], "icon-name", name, NULL);
+ lb_item_application_set_desktop_file (item, column[URN]);
+ list = g_list_prepend (list, item);
+ }
+ list = g_list_reverse (list);
+
+ g_ptr_array_free (result, TRUE);
}
- return NULL;
+ return list;
}
/* vim:set et sw=2 cino=t0,f0,(0,{s,>2s,n-1s,^-1s,e2s: */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]