[gnome-launch-box] started the tracker backend for application search
- From: Sven Herzberg <herzi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-launch-box] started the tracker backend for application search
- Date: Thu, 11 Feb 2010 13:34:56 +0000 (UTC)
commit 67f92ac2f846e7a747aa4ab2a0f07eeacef87ac8
Author: Sven Herzberg <herzi gnome-de org>
Date: Sun Feb 7 17:04:57 2010 +0100
started the tracker backend for application search
* Makefile.am,
* lb-module-manager.c,
* lb-module-tracker.c,
* lb-module-tracker.h: added the initial version of the tracker module
src/Makefile.am | 10 +-
src/lb-module-manager.c | 4 +
src/lb-module-tracker.c | 252 +++++++++++++++++++++++++++++++++++++++++++++++
src/lb-module-tracker.h | 55 ++++++++++
4 files changed, 317 insertions(+), 4 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 3c9ed70..71799ad 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -40,10 +40,12 @@ gnome_launch_box_SOURCES = \
lb-module-evolution.h \
lb-module-files.c \
lb-module-files.h \
- lb-module-recent.c \
- lb-module-recent.h \
- lb-object.c \
- lb-object.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 \
lb-utils.c \
lb-utils.h \
diff --git a/src/lb-module-manager.c b/src/lb-module-manager.c
index f0e33d9..5eccd71 100644
--- a/src/lb-module-manager.c
+++ b/src/lb-module-manager.c
@@ -34,6 +34,7 @@
#include "lb-module-manager.h"
#include "lb-module-recent.h"
#include "lb-module-files.h"
+#include "lb-module-tracker.h"
#include "lb-utils.h"
static void lb_module_manager_finalize (GObject *object);
@@ -89,6 +90,9 @@ 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
new file mode 100644
index 0000000..5aa38d9
--- /dev/null
+++ b/src/lb-module-tracker.c
@@ -0,0 +1,252 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2010 Sven Herzberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * lb-module-tracker.c
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <gdk-pixbuf/gdk-pixbuf.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 */
+};
+
+#if 0
+enum {
+ PROP_0,
+ PROP_NAME,
+ PROP_STOCK_ID,
+ PROP_PIXBUF
+};
+#endif
+
+
+static void lb_module_tracker_finalize (GObject *object);
+static void lb_module_tracker_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void lb_module_tracker_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec);
+
+static GList * lb_module_tracker_query (LbModule *module,
+ const gchar *match);
+
+
+G_DEFINE_TYPE (LbModuleTracker, lb_module_tracker, LB_TYPE_MODULE);
+static LbModuleClass *parent_class = NULL;
+
+static void
+lb_module_tracker_class_init (LbModuleTrackerClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ LbModuleClass *module_class = LB_MODULE_CLASS (klass);
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_class->finalize = lb_module_tracker_finalize;
+ object_class->set_property = lb_module_tracker_set_property;
+ object_class->get_property = lb_module_tracker_get_property;
+
+ module_class->query = lb_module_tracker_query;
+
+#if 0
+ g_object_class_install_property (object_class, PROP_NAME,
+ g_param_spec_string ("name",
+ NULL, NULL,
+ "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class, PROP_STOCK_ID,
+ g_param_spec_string ("stock-id",
+ NULL, NULL,
+ "",
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT));
+
+ g_object_class_install_property (object_class, PROP_PIXBUF,
+ g_param_spec_object ("pixbuf",
+ NULL, NULL,
+ GDK_TYPE_PIXBUF,
+ G_PARAM_READWRITE));
+#endif
+
+ g_type_class_add_private (object_class,
+ sizeof (LbModuleTrackerPriv));
+
+}
+
+static void
+lb_module_tracker_init (LbModuleTracker *tracker)
+{
+ LbModuleTrackerPriv *priv;
+
+ priv = GET_PRIV (tracker);
+}
+
+static void
+lb_module_tracker_finalize (GObject *object)
+{
+ LbModuleTrackerPriv *priv;
+
+ priv = GET_PRIV (object);
+
+#if 0
+ if (tracker->name) {
+ g_free (tracker->name);
+ tracker->name = NULL;
+ }
+ if (tracker->stock_id) {
+ g_free (tracker->stock_id);
+ tracker->stock_id = NULL;
+ }
+ if (tracker->pixbuf) {
+ g_object_unref (tracker->pixbuf);
+ tracker->pixbuf = NULL;
+ }
+#endif
+
+ G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+lb_module_tracker_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ LbModuleTrackerPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (property_id) {
+#if 0
+ case PROP_NAME:
+ if (tracker->name)
+ g_free (tracker->name);
+ tracker->name = g_value_dup_string (value);
+ break;
+ case PROP_STOCK_ID:
+ if (tracker->stock_id)
+ g_free (tracker->stock_id);
+ tracker->stock_id = g_value_dup_string (value);
+ break;
+ case PROP_PIXBUF:
+ if (tracker->pixbuf)
+ g_object_unref (tracker->pixbuf);
+ tracker->pixbuf = GDK_PIXBUF (g_value_dup_object (value));
+ break;
+#endif
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+lb_module_tracker_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ LbModuleTrackerPriv *priv;
+
+ priv = GET_PRIV (object);
+
+ switch (property_id) {
+#if 0
+ case PROP_NAME:
+ g_value_set_string (value, tracker->name);
+ break;
+ case PROP_STOCK_ID:
+ g_value_set_string (value, tracker->stock_id);
+ break;
+ case PROP_PIXBUF:
+ g_value_set_object (value, tracker->pixbuf);
+ break;
+#endif
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static GList *
+lb_module_tracker_query (LbModule *module,
+ const gchar *match)
+{
+ LbModuleTrackerPriv *priv;
+ gchar* argv[] = {
+ "tracker-sparql",
+ "-q",
+ NULL,
+ NULL
+ };
+ gchar* sparql = g_strdup_printf ("SELECT ?urn ?title ?tooltip ?link fts:rank(?urn) "
+ "WHERE { ?urn a nfo:Software ;"
+ " nie:title ?title ;"
+ " nie:comment ?tooltip ;"
+ " nfo:softwareCmdLine ?link . ?urn fts:match \"%s*\""
+ " } "
+ "ORDER BY DESC(fts:rank(?urn)) "
+ "OFFSET 0 LIMIT 10", match);
+ gchar* out = NULL;
+ gint exit = -1;
+ 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))
+ {
+ g_print ("%s\n", out);
+ }
+ else
+ {
+ g_printerr ("error querying tracker: %s\n",
+ error->message);
+
+ g_error_free (error);
+ }
+
+ return NULL;
+}
+
+/* vim:set et sw=2 cino=t0,f0,(0,{s,>2s,n-1s,^-1s,e2s: */
diff --git a/src/lb-module-tracker.h b/src/lb-module-tracker.h
new file mode 100644
index 0000000..6805b59
--- /dev/null
+++ b/src/lb-module-tracker.h
@@ -0,0 +1,55 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2010 Sven Herzberg
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * lb-module-tracker.h
+ */
+
+#ifndef __LB_MODULE_TRACKER_H__
+#define __LB_MODULE_TRACKER_H__
+
+
+#include "lb-module.h"
+
+
+#define LB_TYPE_MODULE_TRACKER (lb_module_tracker_get_type ())
+#define LB_MODULE_TRACKER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LB_TYPE_MODULE_TRACKER, LbModuleTracker))
+#define LB_MODULE_TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), LB_TYPE_MODULE_TRACKER, LbModuleTrackerClass))
+#define LB_IS_MODULE_TRACKER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), LB_TYPE_MODULE_TRACKER))
+#define LB_IS_MODULE_TRACKER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), LB_TYPE_MODULE_TRACKER))
+#define LB_MODULE_TRACKER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), LB_TYPE_MODULE_TRACKER, LbModuleTrackerClass))
+
+
+typedef struct _LbModuleTracker LbModuleTracker;
+typedef struct _LbModuleTrackerClass LbModuleTrackerClass;
+
+struct _LbModuleTracker {
+ LbModule parent_instance;
+};
+
+struct _LbModuleTrackerClass {
+ LbModuleClass parent_class;
+};
+
+
+GType lb_module_tracker_get_type (void) G_GNUC_CONST;
+
+
+#endif /* __LB_MODULE_TRACKER_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]