[gnome-launch-box] started the tracker backend for application search



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]