brasero/tracker3.patch
DistroBaker 38c7546851 Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/brasero.git#273442c79a20c36f029fb29e98de5399f561ca17
2021-03-19 14:47:16 +00:00

241 lines
8.5 KiB
Diff

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