Skip to content

Commit

Permalink
app-cdr/brasero: Port to tracker-3
Browse files Browse the repository at this point in the history
Use patch from Fedora to port to tracker-3 (they also sent it to upstream)

Package-Manager: Portage-3.0.18, Repoman-3.0.3
Signed-off-by: Pacho Ramos <[email protected]>
  • Loading branch information
pacho2 committed May 8, 2021
1 parent 25fb82b commit 6ffec1b
Show file tree
Hide file tree
Showing 2 changed files with 327 additions and 0 deletions.
87 changes: 87 additions & 0 deletions app-cdr/brasero/brasero-3.12.2-r3.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=7
GNOME2_LA_PUNT="yes"
GNOME2_EAUTORECONF="yes"

inherit gnome2

DESCRIPTION="CD/DVD burning application for the GNOME desktop"
HOMEPAGE="https://wiki.gnome.org/Apps/Brasero"

LICENSE="GPL-2+ CC-BY-SA-3.0"
SLOT="0/3.1" # subslot is 3.suffix of libbrasero-burn3
IUSE="+css +introspection +libburn mp3 nautilus packagekit playlist test tracker"
RESTRICT="!test? ( test )"
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~ia64 ~ppc ~ppc64 ~sparc ~x86"

COMMON_DEPEND="
>=dev-libs/glib-2.29.14:2
>=x11-libs/gtk+-3:3[introspection?]
media-libs/gstreamer:1.0
media-libs/gst-plugins-base:1.0
>=dev-libs/libxml2-2.6:2
>=x11-libs/libnotify-0.6.1:=
media-libs/libcanberra[gtk3]
x11-libs/libICE
x11-libs/libSM
introspection? ( >=dev-libs/gobject-introspection-1.30:= )
libburn? (
>=dev-libs/libburn-0.4:=
>=dev-libs/libisofs-0.6.4:= )
nautilus? ( >=gnome-base/nautilus-2.91.90 )
playlist? ( >=dev-libs/totem-pl-parser-2.29.1:= )
tracker? ( app-misc/tracker:3= )
"
RDEPEND="${COMMON_DEPEND}
media-libs/gst-plugins-good:1.0
media-plugins/gst-plugins-meta:1.0[mp3?]
x11-themes/hicolor-icon-theme
css? ( media-libs/libdvdcss:1.2 )
!libburn? (
app-cdr/cdrdao
app-cdr/cdrtools
app-cdr/dvd+rw-tools
)
packagekit? ( app-admin/packagekit-base )
"
DEPEND="${COMMON_DEPEND}
>=dev-util/intltool-0.50
dev-util/itstool
>=dev-util/gtk-doc-am-1.12
sys-devel/gettext
virtual/pkgconfig
test? ( app-text/docbook-xml-dtd:4.3 )
"
# eautoreconf deps
# app-text/yelp-tools
# gnome-base/gnome-common

PDEPEND="gnome-base/gvfs"

PATCHES=(
# https://gitlab.gnome.org/GNOME/brasero/-/merge_requests/10
"${FILESDIR}"/${P}-tracker3.patch
)

src_configure() {
gnome2_src_configure \
--disable-caches \
$(use_enable !libburn cdrtools) \
$(use_enable !libburn cdrkit) \
$(use_enable !libburn cdrdao) \
$(use_enable !libburn growisofs) \
$(use_enable introspection) \
$(use_enable libburn libburnia) \
$(use_enable nautilus) \
$(use_enable playlist) \
$(use_enable tracker search)
}

src_install() {
gnome2_src_install
mv "${ED}"/usr/share/{appdata,metainfo} || die
}
240 changes: 240 additions & 0 deletions app-cdr/brasero/files/brasero-3.12.2-tracker3.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
From ca0d487aac3b9cf21e520a00b94cb3eaf833b9a3 Mon Sep 17 00:00:00 2001
From: Carlos Garnacho <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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 <[email protected]>
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

0 comments on commit 6ffec1b

Please sign in to comment.