r23798 - in /desktop/experimental/nautilus/debian: changelog patches/04_tracker_0.8.patch
biebl at users.alioth.debian.org
biebl at users.alioth.debian.org
Tue Apr 13 23:42:19 UTC 2010
Author: biebl
Date: Tue Apr 13 23:42:18 2010
New Revision: 23798
URL: http://svn.debian.org/wsvn/pkg-gnome/?sc=1&rev=23798
Log:
Add support for tracker 0.8 and fix filtering by location.
Patch pulled from upstream Git.
Modified:
desktop/experimental/nautilus/debian/changelog
desktop/experimental/nautilus/debian/patches/04_tracker_0.8.patch
Modified: desktop/experimental/nautilus/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/experimental/nautilus/debian/changelog?rev=23798&op=diff
==============================================================================
--- desktop/experimental/nautilus/debian/changelog [utf-8] (original)
+++ desktop/experimental/nautilus/debian/changelog [utf-8] Tue Apr 13 23:42:18 2010
@@ -11,7 +11,8 @@
* debian/patches/01_manpage.patch
- Remove, merged upstream.
* debian/patches/04_tracker_0.8.patch
- - Add support for tracker 0.8.
+ - Add support for tracker 0.8 and fix filtering by location.
+ Patch pulled from upstream Git.
* debian/patches/90_relibtoolize.patch
- Update build system accordingly.
* Refresh patches to apply cleanly.
Modified: desktop/experimental/nautilus/debian/patches/04_tracker_0.8.patch
URL: http://svn.debian.org/wsvn/pkg-gnome/desktop/experimental/nautilus/debian/patches/04_tracker_0.8.patch?rev=23798&op=diff
==============================================================================
--- desktop/experimental/nautilus/debian/patches/04_tracker_0.8.patch [utf-8] (original)
+++ desktop/experimental/nautilus/debian/patches/04_tracker_0.8.patch [utf-8] Tue Apr 13 23:42:18 2010
@@ -1,68 +1,407 @@
-Index: nautilus-2.28.4/configure.in
-===================================================================
---- nautilus-2.28.4.orig/configure.in 2010-04-09 02:22:14.237099766 +0200
-+++ nautilus-2.28.4/configure.in 2010-04-09 02:22:15.281100899 +0200
-@@ -207,10 +207,10 @@
- [build without tracker support]))
- msg_tracker=no
- if test "x$enable_tracker" != "xno"; then
-- PKG_CHECK_MODULES(TRACKER, tracker-client-0.7, [
-+ PKG_CHECK_MODULES(TRACKER, tracker-client-0.8, [
- AM_CONDITIONAL(HAVE_TRACKER, true)
- AC_DEFINE(HAVE_TRACKER, 1, [Define to enable tracker support])
-- AC_DEFINE(HAVE_TRACKER_0_7, 1, [Define to enable tracker support])
-+ AC_DEFINE(HAVE_TRACKER_0_8, 1, [Define to enable tracker support])
- ]
- msg_tracker=yes,
- [
-Index: nautilus-2.28.4/libnautilus-private/nautilus-search-engine-tracker.c
-===================================================================
---- nautilus-2.28.4.orig/libnautilus-private/nautilus-search-engine-tracker.c 2009-12-09 12:03:51.000000000 +0100
-+++ nautilus-2.28.4/libnautilus-private/nautilus-search-engine-tracker.c 2010-04-09 02:22:32.925098561 +0200
-@@ -26,8 +26,8 @@
- #include <eel/eel-gtk-macros.h>
- #include <eel/eel-glib-extensions.h>
-
--#ifdef HAVE_TRACKER_0_7
--#include <libtracker-client/tracker.h>
-+#ifdef HAVE_TRACKER_0_8
-+#include <libtracker-client/tracker-client.h>
- #else
- #include <tracker.h>
- #endif
-@@ -96,7 +96,7 @@
-
- char *uri;
-
--#ifdef HAVE_TRACKER_0_7
-+#ifdef HAVE_TRACKER_0_8
- uri = g_strdup ((char *)*results_p);
- #else
- uri = g_filename_to_uri ((char *)*results_p, NULL, NULL);
-@@ -139,7 +139,7 @@
+From 4626c9eff200306ecbea282bcd2c5a24e7e7a993 Mon Sep 17 00:00:00 2001
+From: Tomas Bzatek <tbzatek at redhat.com>
+Date: Tue, 6 Apr 2010 18:37:37 +0200
+Subject: [PATCH] Support for tracker 0.8 stable release
+
+Tracker: Fix filtering by location, code cleanup
+
+This also involves code cleanup to maintain consistency with
+gtksearchenginetracker.c
+
+Related: bug 612725
+---
+ .../nautilus-search-engine-tracker.c | 235 ++++++++++----------
+ 1 files changed, 112 insertions(+), 123 deletions(-)
+
+diff --git a/libnautilus-private/nautilus-search-engine-tracker.c b/libnautilus-private/nautilus-search-engine-tracker.c
+index 6c56a71..775de56 100644
+--- a/libnautilus-private/nautilus-search-engine-tracker.c
++++ b/libnautilus-private/nautilus-search-engine-tracker.c
+@@ -31,12 +31,17 @@
+
+ typedef struct _TrackerClient TrackerClient;
+
++typedef enum {
++ TRACKER_0_6 = 1 << 0,
++ TRACKER_0_7 = 1 << 1,
++ TRACKER_0_8 = 1 << 2
++} TrackerVersion;
++
+
+ /* tracker 0.6 API */
+ typedef void (*TrackerArrayReply) (char **result, GError *error, gpointer user_data);
+
+-static TrackerClient * (*tracker_connect) (gboolean enable_warnings) = NULL;
+-static TrackerClient * (*tracker_connect_07) (gboolean enable_warnings,
++static TrackerClient * (*tracker_connect) (gboolean enable_warnings,
+ gint timeout) = NULL;
+ static void (*tracker_disconnect) (TrackerClient *client) = NULL;
+ static void (*tracker_cancel_last_call) (TrackerClient *client) = NULL;
+@@ -76,109 +81,90 @@ typedef void (*TrackerReplyGPtrArray) (GPtrArray *result,
+
+ static TrackerClient * (*tracker_client_new) (TrackerClientFlags flags,
+ gint timeout) = NULL;
+-
+-static gboolean (*tracker_cancel_call) (TrackerClient *client,
+- guint call_id) = NULL;
+-
+-/* -- we reuse tracker_cancel_last_call() from above, declaration is equal
+- *
+- * static gboolean (*tracker_cancel_last_call) (TrackerClient *client) = NULL;
+- */
+-
+ static gchar * (*tracker_sparql_escape) (const gchar *str) = NULL;
+-
+ static guint (*tracker_resources_sparql_query_async) (TrackerClient *client,
+ const gchar *query,
+ TrackerReplyGPtrArray callback,
+ gpointer user_data) = NULL;
+
+
+-#define MAP(a, b) { #a, (gpointer *)&a, b }
+-
+-typedef struct {
++static struct TrackerDlMapping {
+ const char *fn_name;
+ gpointer *fn_ptr_ref;
+- gboolean mandatory;
+-} TrackerDlMapping;
+-
+-static TrackerDlMapping tracker_dl_mapping[] = {
+- MAP (tracker_connect, TRUE),
+- MAP (tracker_disconnect, TRUE),
+- MAP (tracker_cancel_last_call, TRUE),
+- MAP (tracker_search_metadata_by_text_async, TRUE),
+- MAP (tracker_search_metadata_by_text_and_mime_async, TRUE),
+- MAP (tracker_search_metadata_by_text_and_location_async, TRUE),
+- MAP (tracker_search_metadata_by_text_and_mime_and_location_async, TRUE),
+- MAP (tracker_get_version, FALSE)
++ TrackerVersion versions;
++} tracker_dl_mapping[] = {
++#define MAP(a,v) { #a, (gpointer *)&a, v }
++ MAP (tracker_connect, TRACKER_0_6 | TRACKER_0_7),
++ MAP (tracker_disconnect, TRACKER_0_6 | TRACKER_0_7),
++ MAP (tracker_get_version, TRACKER_0_6),
++ MAP (tracker_cancel_last_call, TRACKER_0_6 | TRACKER_0_7 | TRACKER_0_8),
++ MAP (tracker_search_metadata_by_text_async, TRACKER_0_6 | TRACKER_0_7),
++ MAP (tracker_search_metadata_by_text_and_location_async, TRACKER_0_6 | TRACKER_0_7),
++ MAP (tracker_client_new, TRACKER_0_8),
++ MAP (tracker_sparql_escape, TRACKER_0_8),
++ MAP (tracker_resources_sparql_query_async, TRACKER_0_8)
++#undef MAP
+ };
+
+-static TrackerDlMapping tracker_dl_mapping_08[] = {
+- MAP (tracker_client_new, TRUE),
+- MAP (tracker_cancel_call, TRUE),
+- MAP (tracker_cancel_last_call, TRUE),
+- MAP (tracker_sparql_escape, TRUE),
+- MAP (tracker_resources_sparql_query_async, TRUE)
+-};
+-#undef MAP
+
++static TrackerVersion
++open_libtracker (void)
++{
++ static gboolean done = FALSE;
++ static TrackerVersion version = 0;
++ gpointer x;
+
+-static gboolean tracker_07;
+-static gboolean tracker_08;
++ if (!done) {
++ int i;
++ GModule *tracker;
++ GModuleFlags flags;
+
++ done = TRUE;
++ flags = G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL;
+
+-static gboolean
+-load_symbols (GModule *tracker, TrackerDlMapping mapping[], gint num_elements)
+-{
+- int i;
++ tracker = g_module_open ("libtracker-client-0.8.so.0", flags);
++ version = TRACKER_0_8;
+
+- for (i = 0; i < num_elements; i++) {
+- if (! g_module_symbol (tracker, mapping[i].fn_name,
+- mapping[i].fn_ptr_ref) &&
+- mapping[i].mandatory) {
+- g_warning ("Missing symbol '%s' in libtracker\n",
+- mapping[i].fn_name);
+- g_module_close (tracker);
++ if (!tracker) {
++ tracker = g_module_open ("libtracker-client-0.7.so.0", flags);
+
+- for (i = 0; i < num_elements; i++)
+- mapping[i].fn_ptr_ref = NULL;
++ if (tracker && !g_module_symbol (tracker, "tracker_resources_sparql_query_async", &x)) {
++ version = TRACKER_0_7;
++ }
++ }
+
+- return FALSE;
++ if (!tracker) {
++ tracker = g_module_open ("libtrackerclient.so.0", flags);
++ version = TRACKER_0_6;
+ }
+- }
+
+- return TRUE;
+-}
++ if (!tracker) {
++ tracker = g_module_open ("libtracker.so.0", flags);
++ version = TRACKER_0_6;
++ }
+
+-static void
+-open_libtracker (void)
+-{
+- static gboolean done = FALSE;
++ if (!tracker)
++ return 0;
+
+- if (! done) {
+- GModule *tracker;
++ for (i = 0; i < G_N_ELEMENTS (tracker_dl_mapping); i++) {
++ if ((tracker_dl_mapping[i].versions & version) == 0)
++ continue;
+
+- done = TRUE;
+- tracker_07 = TRUE;
+- tracker_08 = TRUE;
+-
+- tracker = g_module_open ("libtracker-client-0.7.so.0", G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+- if (! tracker) {
+- tracker = g_module_open ("libtrackerclient.so.0", G_MODULE_BIND_LAZY | G_MODULE_BIND_LOCAL);
+- tracker_07 = FALSE;
+- tracker_08 = FALSE;
+- }
+- if (! tracker)
+- return;
+-
+- if (tracker_08)
+- tracker_08 = load_symbols (tracker, tracker_dl_mapping_08, G_N_ELEMENTS (tracker_dl_mapping_08));
+- if (! tracker_08) {
+- if (! load_symbols (tracker, tracker_dl_mapping, G_N_ELEMENTS (tracker_dl_mapping)))
+- return;
+- if (tracker_07)
+- tracker_connect_07 = (gpointer)tracker_connect;
++ if (!g_module_symbol (tracker, tracker_dl_mapping[i].fn_name,
++ tracker_dl_mapping[i].fn_ptr_ref)) {
++ g_warning ("Missing symbol '%s' in libtracker\n",
++ tracker_dl_mapping[i].fn_name);
++ g_module_close (tracker);
++
++ for (i = 0; i < G_N_ELEMENTS (tracker_dl_mapping); i++)
++ tracker_dl_mapping[i].fn_ptr_ref = NULL;
++
++ return 0;
++ }
+ }
+ }
++
++ return version;
+ }
+
+
+@@ -186,6 +172,7 @@ struct NautilusSearchEngineTrackerDetails {
+ NautilusQuery *query;
+ TrackerClient *client;
+ gboolean query_pending;
++ TrackerVersion version;
+ };
+
+
+@@ -210,7 +197,7 @@ finalize (GObject *object)
+ tracker->details->query = NULL;
+ }
+
+- if (tracker_08) {
++ if (tracker->details->version == TRACKER_0_8) {
+ g_object_unref (tracker->details->client);
+ } else {
+ tracker_disconnect (tracker->details->client);
+@@ -264,7 +251,7 @@ search_callback (gpointer results, GError *error, gpointer user_data)
+ return;
+ }
+
+- if (tracker_08) {
++ if (tracker->details->version == TRACKER_0_8) {
+ /* new tracker 0.8 API */
+ OUT_result = (GPtrArray*) results;
+
+@@ -281,7 +268,11 @@ search_callback (gpointer results, GError *error, gpointer user_data)
+ } else {
+ /* old tracker 0.6 API */
+ for (results_p = results; *results_p; results_p++) {
+- uri = tracker_07 ? g_strdup ((char *)*results_p) : g_filename_to_uri ((char *)*results_p, NULL, NULL);
++ if (tracker->details->version == TRACKER_0_6)
++ uri = g_filename_to_uri (*results_p, NULL, NULL);
++ else
++ uri = g_strdup (*results_p);
++
+ if (uri) {
+ hit_uris = g_list_prepend (hit_uris, (char *)uri);
+ }
+@@ -291,7 +282,8 @@ search_callback (gpointer results, GError *error, gpointer user_data)
+
+ nautilus_search_engine_hits_added (NAUTILUS_SEARCH_ENGINE (tracker), hit_uris);
+ nautilus_search_engine_finished (NAUTILUS_SEARCH_ENGINE (tracker));
+- eel_g_list_free_deep (hit_uris);
++ g_list_foreach (hit_uris, (GFunc) g_free, NULL);
++ g_list_free (hit_uris);
+ }
+
+
+@@ -323,57 +315,59 @@ nautilus_search_engine_tracker_start (NautilusSearchEngine *engine)
location_uri = nautilus_query_get_location (tracker->details->query);
if (location_uri) {
--#ifdef HAVE_TRACKER_0_7
-+#ifdef HAVE_TRACKER_0_8
- location = g_strdup (location_uri);
- #else
- location = g_filename_from_uri (location_uri, NULL, NULL);
-@@ -271,7 +271,7 @@
+- location = (tracker_07 && !tracker_08) ? g_strdup (location_uri) : g_filename_from_uri (location_uri, NULL, NULL);
++ location = (tracker->details->version == TRACKER_0_6) ?
++ g_filename_from_uri (location_uri, NULL, NULL) :
++ g_strdup (location_uri);
+ g_free (location_uri);
+ } else {
+ location = NULL;
+ }
+
+- mime_count = g_list_length (mimetypes);
++ mime_count = g_list_length (mimetypes);
+
+ i = 0;
+ sparql = NULL;
+
+- if (tracker_08) {
++ if (tracker->details->version == TRACKER_0_8) {
+ /* new tracker 0.8 API */
+- if (mime_count > 0) {
+- sparql = g_string_new ("SELECT nie:url(?file) WHERE { ?file a nfo:FileDataObject ; nie:mimeType ?mime ; fts:match ");
+- sparql_append_string_literal (sparql, search_text);
++ sparql = g_string_new ("SELECT ?url WHERE { ?file a nfo:FileDataObject ; nie:url ?url; ");
++ if (mime_count > 0)
++ g_string_append (sparql, "nie:mimeType ?mime ; ");
++ g_string_append (sparql, "fts:match ");
++ sparql_append_string_literal (sparql, search_text);
+
++ if (location || mime_count > 0) {
+ g_string_append (sparql, " . FILTER (");
++
+ if (location) {
+- g_string_append (sparql, "fn:starts-with(?file,");
++ g_string_append (sparql, "fn:starts-with(?url, ");
+ sparql_append_string_literal (sparql, location);
+ g_string_append (sparql, ")");
+- g_string_append (sparql, " && (");
+ }
+
+-
+- for (l = mimetypes; l != NULL; l = l->next) {
+- if (l != mimetypes) {
+- g_string_append (sparql, " || ");
++ if (mime_count > 0) {
++ if (location)
++ g_string_append (sparql, " && ");
++ g_string_append (sparql, "(");
++ for (l = mimetypes; l != NULL; l = l->next) {
++ if (l != mimetypes)
++ g_string_append (sparql, " || ");
++ g_string_append (sparql, "?mime = ");
++ sparql_append_string_literal (sparql, l->data);
+ }
+-
+- g_string_append (sparql, "?mime = ");
+- sparql_append_string_literal (sparql, l->data);
+- }
+-
+- if (location)
+ g_string_append (sparql, ")");
+- g_string_append (sparql, ") }");
+- } else {
+- sparql = g_string_new ("SELECT nie:url(?file) WHERE { ?file a nfo:FileDataObject ; fts:match ");
+- sparql_append_string_literal (sparql, search_text);
+- if (location) {
+- g_string_append (sparql, " . FILTER (fn:starts-with(?file,");
+- sparql_append_string_literal (sparql, location);
+- g_string_append (sparql, "))");
+ }
+- g_string_append (sparql, " }");
++
++ g_string_append (sparql, ")");
+ }
++ g_string_append (sparql, " }");
+
+- tracker_resources_sparql_query_async (tracker->details->client, sparql->str, (TrackerReplyGPtrArray) search_callback, tracker);
++ tracker_resources_sparql_query_async (tracker->details->client,
++ sparql->str,
++ (TrackerReplyGPtrArray) search_callback,
++ tracker);
+ g_string_free (sparql, TRUE);
++
+ } else {
+ /* old tracker 0.6 API */
+ if (mime_count > 0) {
+@@ -401,7 +395,6 @@ nautilus_search_engine_tracker_start (NautilusSearchEngine *engine)
+
+ g_strfreev (mimes);
+
+-
+ } else {
+ if (location) {
+ tracker_search_metadata_by_text_and_location_async (tracker->details->client,
+@@ -415,7 +408,6 @@ nautilus_search_engine_tracker_start (NautilusSearchEngine *engine)
+ (TrackerArrayReply) search_callback,
+ tracker);
+ }
+-
+ }
+ }
+
+@@ -493,27 +485,24 @@ nautilus_search_engine_tracker_new (void)
+ {
NautilusSearchEngineTracker *engine;
TrackerClient *tracker_client;
-
--#ifdef HAVE_TRACKER_0_7
-+#ifdef HAVE_TRACKER_0_8
- tracker_client = tracker_connect (FALSE, -1);
- #else
- tracker_client = tracker_connect (FALSE);
-@@ -281,7 +281,7 @@
++ TrackerVersion version;
+
+- open_libtracker ();
++ version = open_libtracker ();
+
+- if (tracker_08) {
++ if (version == TRACKER_0_8) {
+ tracker_client = tracker_client_new (TRACKER_CLIENT_ENABLE_WARNINGS, G_MAXINT);
+ } else {
+ if (! tracker_connect)
+ return NULL;
+
+- if (tracker_07) {
+- tracker_client = tracker_connect_07 (FALSE, -1);
+- } else {
+- tracker_client = tracker_connect (FALSE);
+- }
++ tracker_client = tracker_connect (FALSE, -1);
+ }
+
+ if (!tracker_client) {
return NULL;
}
--#ifndef HAVE_TRACKER_0_7
-+#ifndef HAVE_TRACKER_0_8
- GError *err = NULL;
-
- tracker_get_version (tracker_client, &err);
+- if (! tracker_07 && ! tracker_08) {
++ if (version == TRACKER_0_6) {
+ GError *err = NULL;
+
+ tracker_get_version (tracker_client, &err);
+@@ -528,8 +517,8 @@ nautilus_search_engine_tracker_new (void)
+ engine = g_object_new (NAUTILUS_TYPE_SEARCH_ENGINE_TRACKER, NULL);
+
+ engine->details->client = tracker_client;
+-
+ engine->details->query_pending = FALSE;
++ engine->details->version = version;
+
+ return NAUTILUS_SEARCH_ENGINE (engine);
+ }
+--
+1.7.0.4
+
More information about the pkg-gnome-commits
mailing list