Blame SOURCES/tracker3.patch

794e7d
From ca0d487aac3b9cf21e520a00b94cb3eaf833b9a3 Mon Sep 17 00:00:00 2001
794e7d
From: Carlos Garnacho <carlosg@gnome.org>
794e7d
Date: Thu, 24 Dec 2020 12:19:49 +0100
794e7d
Subject: [PATCH 1/5] Obtain TrackerSparqlConnection in a single point
794e7d
794e7d
The is_available vmethod tries to create a connection if it's not
794e7d
there. But the BraseroSearchTracker initialization already tries to
794e7d
obtain the SPARQL connection. Let this method return wether
794e7d
initialiation was successful.
794e7d
---
794e7d
 src/brasero-search-tracker.c | 6 ------
794e7d
 1 file changed, 6 deletions(-)
794e7d
794e7d
diff --git a/src/brasero-search-tracker.c b/src/brasero-search-tracker.c
794e7d
index fe7be2bd..f8c29c0d 100644
794e7d
--- a/src/brasero-search-tracker.c
794e7d
+++ b/src/brasero-search-tracker.c
794e7d
@@ -56,12 +56,6 @@ brasero_search_tracker_is_available (BraseroSearchEngine *engine)
794e7d
 	BraseroSearchTrackerPrivate *priv;
794e7d
 
794e7d
 	priv = BRASERO_SEARCH_TRACKER_PRIVATE (engine);
794e7d
-	GError *error = NULL;
794e7d
-	if (priv->connection)
794e7d
-		return TRUE;
794e7d
-	
794e7d
-	priv->cancellable = g_cancellable_new ();
794e7d
- 	priv->connection = tracker_sparql_connection_get (priv->cancellable, &error);
794e7d
 	return (priv->connection != NULL);
794e7d
 }
794e7d
 
794e7d
-- 
794e7d
GitLab
794e7d
794e7d
794e7d
From c0dace005ec34b345845aacd1f929fd618b199af Mon Sep 17 00:00:00 2001
794e7d
From: Carlos Garnacho <carlosg@gnome.org>
794e7d
Date: Thu, 24 Dec 2020 12:37:13 +0100
794e7d
Subject: [PATCH 2/5] Fix ORDER BY clauses in Tracker search
794e7d
794e7d
The ?urn variable is not defined anywhere else in the query, so
794e7d
ordering is left undefined. Access the url/filename properly here.
794e7d
---
794e7d
 src/brasero-search-tracker.c | 2 +-
794e7d
 1 file changed, 1 insertion(+), 1 deletion(-)
794e7d
794e7d
diff --git a/src/brasero-search-tracker.c b/src/brasero-search-tracker.c
794e7d
index f8c29c0d..94085070 100644
794e7d
--- a/src/brasero-search-tracker.c
794e7d
+++ b/src/brasero-search-tracker.c
794e7d
@@ -307,7 +307,7 @@ brasero_search_tracker_query_start_real (BraseroSearchEngine *search,
794e7d
 	g_string_append (query, ")");
794e7d
 
794e7d
 	g_string_append (query,
794e7d
-			 "} ORDER BY DESC(nie:url(?urn)) DESC(nfo:fileName(?urn))");
794e7d
+			 "} ORDER BY DESC(?url) DESC(nfo:fileName(?file))");
794e7d
 
794e7d
 	tracker_sparql_connection_query_async (priv->connection,
794e7d
 					       query->str,
794e7d
-- 
794e7d
GitLab
794e7d
794e7d
794e7d
From f7181445bf9c88b7fab1bb5237d602b491694a9e Mon Sep 17 00:00:00 2001
794e7d
From: Carlos Garnacho <carlosg@gnome.org>
794e7d
Date: Thu, 24 Dec 2020 13:04:03 +0100
794e7d
Subject: [PATCH 3/5] Only use fts:rank with FTS searches
794e7d
794e7d
This fixes two things:
794e7d
- The use of fts:match depends on priv->keywords being set, but
794e7d
  fts:rank() has undefined behavior if fts:match is not present.
794e7d
  Its value is returned in the cursor, but fortunately unused,
794e7d
  so it can go away.
794e7d
794e7d
- Fixes "garbage" being added at the end of the query, concretely
794e7d
  ") } ORDER BY ... " is appended at the supposed end of the query
794e7d
  string. Older SPARQL parser implementations would allow garbage
794e7d
  at the end of its parsing state, I suspect "LIMIT 0 OFFSET 10000"
794e7d
  was just a mean to push it to that state that it'd allow the
794e7d
  remaining string, so that is gone too.
794e7d
---
794e7d
 src/brasero-search-tracker.c | 21 +++++++++------------
794e7d
 1 file changed, 9 insertions(+), 12 deletions(-)
794e7d
794e7d
diff --git a/src/brasero-search-tracker.c b/src/brasero-search-tracker.c
794e7d
index 94085070..ae1d388a 100644
794e7d
--- a/src/brasero-search-tracker.c
794e7d
+++ b/src/brasero-search-tracker.c
794e7d
@@ -234,7 +234,7 @@ brasero_search_tracker_query_start_real (BraseroSearchEngine *search,
794e7d
 
794e7d
 	priv = BRASERO_SEARCH_TRACKER_PRIVATE (search);
794e7d
 
794e7d
-	query = g_string_new ("SELECT ?file ?url ?mime fts:rank(?file) "	/* Which variables should be returned */
794e7d
+	query = g_string_new ("SELECT ?file ?url ?mime "			/* Which variables should be returned */
794e7d
 			      "WHERE {"						/* Start defining the search and its scope */
794e7d
 			      "  ?file a nfo:FileDataObject . "			/* File must be a file (not a stream, ...) */
794e7d
 	                      "  ?file nie:url ?url . "				/* Get the url of the file */
794e7d
@@ -293,21 +293,18 @@ brasero_search_tracker_query_start_real (BraseroSearchEngine *search,
794e7d
 				 " ) ");
794e7d
 	}
794e7d
 
794e7d
-	if (priv->keywords)
794e7d
+	if (priv->keywords) {
794e7d
 		g_string_append_printf (query,
794e7d
 					"  ?file fts:match \"%s\" ",		/* File must match possible keywords */
794e7d
 					priv->keywords);
794e7d
 
794e7d
-	g_string_append (query,
794e7d
-			 " } "
794e7d
-			 "ORDER BY ASC(fts:rank(?file)) "
794e7d
-			 "OFFSET 0 "
794e7d
-			 "LIMIT 10000");
794e7d
-
794e7d
-	g_string_append (query, ")");
794e7d
-
794e7d
-	g_string_append (query,
794e7d
-			 "} ORDER BY DESC(?url) DESC(nfo:fileName(?file))");
794e7d
+		g_string_append (query,
794e7d
+				 " } "
794e7d
+				 "ORDER BY ASC(fts:rank(?file))");
794e7d
+	} else {
794e7d
+		g_string_append (query,
794e7d
+				 "} ORDER BY DESC(?url) DESC(nfo:fileName(?file))");
794e7d
+	}
794e7d
 
794e7d
 	tracker_sparql_connection_query_async (priv->connection,
794e7d
 					       query->str,
794e7d
-- 
794e7d
GitLab
794e7d
794e7d
794e7d
From ede7758e2fae487d57be641a120c4c02bfd249f1 Mon Sep 17 00:00:00 2001
794e7d
From: Carlos Garnacho <carlosg@gnome.org>
794e7d
Date: Thu, 24 Dec 2020 13:15:21 +0100
794e7d
Subject: [PATCH 4/5] Observe nfo:FileDataObject/nie:InformationElement split
794e7d
794e7d
These resources are interpreted differently in Tracker 3.0 compared
794e7d
to older versions, the newer version makes those 2 different resources
794e7d
(one representing the "file", other the "content) that relate to each
794e7d
other. In older tracker versions, these 2 aspects were conflated in
794e7d
a single resource.
794e7d
794e7d
The query is implicitly crossing that barrier, so make it explicit.
794e7d
With this change, the query may run with either version.
794e7d
---
794e7d
 src/brasero-search-tracker.c | 5 +++--
794e7d
 1 file changed, 3 insertions(+), 2 deletions(-)
794e7d
794e7d
diff --git a/src/brasero-search-tracker.c b/src/brasero-search-tracker.c
794e7d
index ae1d388a..9aa06289 100644
794e7d
--- a/src/brasero-search-tracker.c
794e7d
+++ b/src/brasero-search-tracker.c
794e7d
@@ -238,7 +238,8 @@ brasero_search_tracker_query_start_real (BraseroSearchEngine *search,
794e7d
 			      "WHERE {"						/* Start defining the search and its scope */
794e7d
 			      "  ?file a nfo:FileDataObject . "			/* File must be a file (not a stream, ...) */
794e7d
 	                      "  ?file nie:url ?url . "				/* Get the url of the file */
794e7d
-	                      "  ?file nie:mimeType ?mime . ");			/* Get its mime */
794e7d
+	                      "  ?file nie:mimeType ?mime . "			/* Get its mime */
794e7d
+			      "  ?content nie:isStoredAs ?file . ");		/* Get the resource representing the content */
794e7d
 
794e7d
 	if (priv->mimes) {
794e7d
 		int i;
794e7d
@@ -259,7 +260,7 @@ brasero_search_tracker_query_start_real (BraseroSearchEngine *search,
794e7d
 		gboolean param_added = FALSE;
794e7d
 
794e7d
 		g_string_append (query,
794e7d
-				 "  ?file a ?type . "
794e7d
+				 "  ?content a ?type . "
794e7d
 				 "  FILTER ( ");
794e7d
 
794e7d
 		if (priv->scope & BRASERO_SEARCH_SCOPE_MUSIC) {
794e7d
-- 
794e7d
GitLab
794e7d
794e7d
794e7d
From 05589be7da3a0dfb00617df049d129abba703c36 Mon Sep 17 00:00:00 2001
794e7d
From: Carlos Garnacho <carlosg@gnome.org>
794e7d
Date: Thu, 24 Dec 2020 13:22:43 +0100
794e7d
Subject: [PATCH 5/5] Support Tracker 3.0
794e7d
794e7d
Add the compile-time checks, and add the minimal code catering for
794e7d
the API changes. In 3.0 connections are no longer singletons.
794e7d
---
794e7d
 configure.ac                 | 6 +++++-
794e7d
 src/brasero-search-tracker.c | 8 ++++++++
794e7d
 2 files changed, 13 insertions(+), 1 deletion(-)
794e7d
794e7d
diff --git a/configure.ac b/configure.ac
794e7d
index d0c7a870..96afc551 100644
794e7d
--- a/configure.ac
794e7d
+++ b/configure.ac
794e7d
@@ -388,7 +388,7 @@ AC_ARG_ENABLE(search,
794e7d
 if test x"$enable_search" != "xno"; then
794e7d
         # Try to figure out the tracker API version to use
794e7d
         tracker_api="0.10"
794e7d
-        m4_foreach([VERSION], [[0.10], [0.12], [0.14], [0.16], [0.18], [1.0], [2.0]],
794e7d
+        m4_foreach([VERSION], [[0.10], [0.12], [0.14], [0.16], [0.18], [1.0], [2.0], [3.0]],
794e7d
                               [PKG_CHECK_EXISTS([tracker-sparql-VERSION >= $TRACKER_REQUIRED],
794e7d
                                                 [tracker_api="VERSION"])
794e7d
                               ])
794e7d
@@ -408,6 +408,10 @@ if test x"$enable_search" = "xyes"; then
794e7d
 	AC_SUBST(BRASERO_SEARCH_LIBS)
794e7d
 	build_tracker="yes"
794e7d
 	build_search="yes"
794e7d
+
794e7d
+	if test x"$tracker_api" = x"3.0"; then
794e7d
+		AC_DEFINE(HAVE_TRACKER3, 1, [define if tracker3 is available])
794e7d
+	fi
794e7d
 else
794e7d
 	build_search="no"
794e7d
 fi
794e7d
diff --git a/src/brasero-search-tracker.c b/src/brasero-search-tracker.c
794e7d
index 9aa06289..40c5f1ac 100644
794e7d
--- a/src/brasero-search-tracker.c
794e7d
+++ b/src/brasero-search-tracker.c
794e7d
@@ -17,6 +17,8 @@
794e7d
  * with this program.  If not, see <http://www.gnu.org/licenses/>.
794e7d
  */
794e7d
 
794e7d
+#include "config.h"
794e7d
+
794e7d
 #include <stdlib.h>
794e7d
 
794e7d
 #include <libtracker-sparql/tracker-sparql.h>
794e7d
@@ -444,7 +446,13 @@ brasero_search_tracker_init (BraseroSearchTracker *object)
794e7d
 
794e7d
 	priv = BRASERO_SEARCH_TRACKER_PRIVATE (object);
794e7d
 	priv->cancellable = g_cancellable_new ();
794e7d
+
794e7d
+#ifdef HAVE_TRACKER3
794e7d
+	priv->connection = tracker_sparql_connection_bus_new ("org.freedesktop.Tracker3.Miner.Files",
794e7d
+							      NULL, NULL, &error);
794e7d
+#else
794e7d
 	priv->connection = tracker_sparql_connection_get (priv->cancellable, &error);
794e7d
+#endif
794e7d
 
794e7d
 	if (error) {
794e7d
 		g_warning ("Could not establish a connection to Tracker: %s", error->message);
794e7d
-- 
794e7d
GitLab
794e7d