From 53869ebc2783c9d08bb32d59c543ab692770c121 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Fri, 15 May 2020 01:11:24 +0200 Subject: [PATCH 1/5] Use GInitable interface for GomMiner class This allows for better error reporting. --- src/gom-application.c | 7 +++++- src/gom-miner.c | 58 +++++++++++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/src/gom-application.c b/src/gom-application.c index fadd388..bfa99ec 100644 --- a/src/gom-application.c +++ b/src/gom-application.c @@ -229,10 +229,15 @@ gom_application_constructed (GObject *object) { GomApplication *self = GOM_APPLICATION (object); const gchar *display_name; + GError *error = NULL; G_OBJECT_CLASS (gom_application_parent_class)->constructed (object); - self->miner = g_object_new (self->miner_type, NULL); + self->miner = g_initable_new (self->miner_type, NULL, &error, NULL); + + if (self->miner == NULL) + g_error ("%s", error->message); + display_name = gom_miner_get_display_name (self->miner); gom_dbus_set_display_name (self->skeleton, display_name); } diff --git a/src/gom-miner.c b/src/gom-miner.c index 7147b33..1dd9bb8 100644 --- a/src/gom-miner.c +++ b/src/gom-miner.c @@ -28,7 +28,11 @@ #include "gom-miner.h" -G_DEFINE_TYPE (GomMiner, gom_miner, G_TYPE_OBJECT) +static void gom_miner_initable_interface_init (GInitableIface *iface); + +G_DEFINE_TYPE_WITH_CODE (GomMiner, gom_miner, G_TYPE_OBJECT, + G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, gom_miner_initable_interface_init)) + struct _GomMinerPrivate { GoaClient *client; @@ -132,20 +136,21 @@ gom_miner_dispose (GObject *object) } static void -gom_miner_init_goa (GomMiner *self) +gom_miner_init_goa (GomMiner *self, + GError **error) { GoaAccount *account; GoaObject *object; const gchar *provider_type; GList *accounts, *l; GomMinerClass *miner_class = GOM_MINER_GET_CLASS (self); + GError *inner_error = NULL; - self->priv->client = goa_client_new_sync (NULL, &self->priv->client_error); + self->priv->client = goa_client_new_sync (NULL, &inner_error); - if (self->priv->client_error != NULL) + if (inner_error) { - g_critical ("Unable to create GoaClient: %s - indexing for %s will not work", - self->priv->client_error->message, miner_class->goa_provider_type); + g_propagate_error (error, inner_error); return; } @@ -170,16 +175,34 @@ gom_miner_init_goa (GomMiner *self) g_list_free_full (accounts, g_object_unref); } -static void -gom_miner_constructed (GObject *obj) +static gboolean +gom_miner_initable_init (GInitable *initable, + GCancellable *cancellable, + GError **error) { - GomMiner *self = GOM_MINER (obj); + GError *inner_error = NULL; + GomMiner *self; - G_OBJECT_CLASS (gom_miner_parent_class)->constructed (obj); + self = GOM_MINER (initable); - gom_miner_init_goa (self); + self->priv->connection = tracker_sparql_connection_get (cancellable, &inner_error); + if (inner_error) + { + g_propagate_prefixed_error (error, inner_error, "Unable to connect to Tracker store: "); + return FALSE; + } + + gom_miner_init_goa (self, &inner_error); + if (inner_error) + { + g_propagate_prefixed_error (error, inner_error, "Unable to connect to GNOME Online Accounts: "); + return FALSE; + } + + return TRUE; } + static void gom_miner_init (GomMiner *self) { @@ -187,14 +210,12 @@ gom_miner_init (GomMiner *self) self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GOM_TYPE_MINER, GomMinerPrivate); self->priv->display_name = g_strdup (""); +} - self->priv->connection = tracker_sparql_connection_get (NULL, &self->priv->connection_error); - if (self->priv->connection_error != NULL) - { - g_critical ("Unable to create TrackerSparqlConnection: %s - indexing for %s will not work", - self->priv->connection_error->message, - klass->goa_provider_type); - } +static void +gom_miner_initable_interface_init (GInitableIface *iface) +{ + iface->init = gom_miner_initable_init; } static void @@ -202,7 +223,6 @@ gom_miner_class_init (GomMinerClass *klass) { GObjectClass *oclass = G_OBJECT_CLASS (klass); - oclass->constructed = gom_miner_constructed; oclass->dispose = gom_miner_dispose; cleanup_pool = g_thread_pool_new (cleanup_job, NULL, 1, FALSE, NULL); -- GitLab From a2b53970e1c1486a61a1522010e345732ed6ca54 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Fri, 15 May 2020 01:19:58 +0200 Subject: [PATCH 2/5] Initial port to Tracker 3 Each miner now stores its data in a private Tracker database, under the $XDG_CACHE_HOME/gnome-online-miners/$busname directory. Each miner now supports the org.freedesktop.Tracker3.Endpoint D-Bus interface which apps can use to query data directly from the miners. --- configure.ac | 4 +- src/gom-application.c | 4 +- src/gom-miner.c | 120 +++++++++++++++++++++++++++++++++++++++++- src/gom-miner.h | 1 + src/gom-tracker.c | 2 +- 5 files changed, 125 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index e91e4af..8ee6315 100644 --- a/configure.ac +++ b/configure.ac @@ -21,7 +21,7 @@ AC_HEADER_STDC GDATA_MIN_VERSION=0.15.2 GFBGRAPH_MIN_VERSION=0.2.2 -GLIB_MIN_VERSION=2.35.1 +GLIB_MIN_VERSION=2.56.0 GOA_MIN_VERSION=3.13.3 GRILO_MIN_VERSION=0.3.0 ZAPOJIT_MIN_VERSION=0.0.2 @@ -36,7 +36,7 @@ PKG_CHECK_MODULES(GIO, [gio-2.0 gio-unix-2.0]) PKG_CHECK_MODULES(GOA, [goa-1.0 >= $GOA_MIN_VERSION]) AC_DEFINE([GOA_API_IS_SUBJECT_TO_CHANGE], [], [We are aware that GOA's API can change]) -PKG_CHECK_MODULES(TRACKER, [tracker-miner-2.0 tracker-sparql-2.0]) +PKG_CHECK_MODULES(TRACKER, [tracker-sparql-3.0]) # Facebook AC_ARG_ENABLE([facebook], [AS_HELP_STRING([--enable-facebook], [Enable Facebook miner])], [], [enable_facebook=yes]) diff --git a/src/gom-application.c b/src/gom-application.c index bfa99ec..86546ed 100644 --- a/src/gom-application.c +++ b/src/gom-application.c @@ -233,7 +233,9 @@ gom_application_constructed (GObject *object) G_OBJECT_CLASS (gom_application_parent_class)->constructed (object); - self->miner = g_initable_new (self->miner_type, NULL, &error, NULL); + self->miner = g_initable_new (self->miner_type, NULL, &error, + "bus-name", g_application_get_application_id (G_APPLICATION (self)), + NULL); if (self->miner == NULL) g_error ("%s", error->message); diff --git a/src/gom-miner.c b/src/gom-miner.c index 1dd9bb8..f349d01 100644 --- a/src/gom-miner.c +++ b/src/gom-miner.c @@ -38,7 +38,9 @@ struct _GomMinerPrivate { GoaClient *client; GError *client_error; + gchar *bus_name; TrackerSparqlConnection *connection; + TrackerEndpointDBus *endpoint; GError *connection_error; gchar *display_name; @@ -62,6 +64,14 @@ typedef struct { gpointer service; } InsertSharedContentData; +typedef enum +{ + PROP_BUS_NAME = 1, + N_PROPERTIES +} GomMinerProperty; + +static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; + static GThreadPool *cleanup_pool; static void cleanup_job (gpointer data, gpointer user_data); @@ -135,6 +145,58 @@ gom_miner_dispose (GObject *object) G_OBJECT_CLASS (gom_miner_parent_class)->dispose (object); } +static void +gom_miner_init_database (GomMiner *self, + GCancellable *cancellable, + GError **error) +{ + TrackerSparqlConnectionFlags flags; + g_autoptr (GFile) store_path = NULL; + g_autoptr (GDBusConnection) bus = NULL; + GError *inner_error = NULL; + + flags = TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_STEMMER | + TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_UNACCENT | + TRACKER_SPARQL_CONNECTION_FLAGS_FTS_ENABLE_STOP_WORDS | + TRACKER_SPARQL_CONNECTION_FLAGS_FTS_IGNORE_NUMBERS; + + store_path = g_file_new_build_filename (g_get_user_cache_dir (), + "gnome-online-miners", + self->priv->bus_name, + NULL); + + self->priv->connection = tracker_sparql_connection_new (flags, + store_path, + tracker_sparql_get_ontology_nepomuk (), + cancellable, + &inner_error); + + if (inner_error) + { + g_propagate_error (error, inner_error); + return; + } + + bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &inner_error); + + if (inner_error) + { + g_propagate_error (error, inner_error); + return; + } + + self->priv->endpoint = tracker_endpoint_dbus_new (self->priv->connection, + bus, + NULL, /* object path */ + cancellable, + &inner_error); + if (inner_error) + { + g_propagate_error (error, inner_error); + return; + } +} + static void gom_miner_init_goa (GomMiner *self, GError **error) @@ -185,10 +247,10 @@ gom_miner_initable_init (GInitable *initable, self = GOM_MINER (initable); - self->priv->connection = tracker_sparql_connection_get (cancellable, &inner_error); + gom_miner_init_database (self, cancellable, &inner_error); if (inner_error) { - g_propagate_prefixed_error (error, inner_error, "Unable to connect to Tracker store: "); + g_propagate_prefixed_error (error, inner_error, "Unable to set up Tracker database: "); return FALSE; } @@ -212,6 +274,47 @@ gom_miner_init (GomMiner *self) self->priv->display_name = g_strdup (""); } +static void +gom_miner_set_property (GObject *object, + guint property_id, + const GValue *value, + GParamSpec *pspec) +{ + GomMiner *self = GOM_MINER (object); + + switch ((GomMinerProperty) property_id) + { + case PROP_BUS_NAME: + g_free (self->priv->bus_name); + self->priv->bus_name = g_value_dup_string (value); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + +static void +gom_miner_get_property (GObject *object, + guint property_id, + GValue *value, + GParamSpec *pspec) +{ + GomMiner *self = GOM_MINER (object); + + switch ((GomMinerProperty) property_id) + { + case PROP_BUS_NAME: + g_value_set_string (value, self->priv->bus_name); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); + break; + } +} + static void gom_miner_initable_interface_init (GInitableIface *iface) { @@ -224,6 +327,19 @@ gom_miner_class_init (GomMinerClass *klass) GObjectClass *oclass = G_OBJECT_CLASS (klass); oclass->dispose = gom_miner_dispose; + oclass->set_property = gom_miner_set_property; + oclass->get_property = gom_miner_get_property; + + obj_properties[PROP_BUS_NAME] = g_param_spec_string ("bus-name", + "Bus Name", + "D-Bus name of the miner", + NULL /* default value */, + G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | + G_PARAM_STATIC_STRINGS); + + g_object_class_install_properties (oclass, + N_PROPERTIES, + obj_properties); cleanup_pool = g_thread_pool_new (cleanup_job, NULL, 1, FALSE, NULL); diff --git a/src/gom-miner.h b/src/gom-miner.h index 8f83139..5dcfc8d 100644 --- a/src/gom-miner.h +++ b/src/gom-miner.h @@ -61,6 +61,7 @@ typedef struct _GomMinerPrivate GomMinerPrivate; typedef struct { GomMiner *miner; TrackerSparqlConnection *connection; + gchar *bus_name; GoaAccount *account; GHashTable *services; diff --git a/src/gom-tracker.c b/src/gom-tracker.c index 68818c4..5666c16 100644 --- a/src/gom-tracker.c +++ b/src/gom-tracker.c @@ -408,7 +408,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection gchar *retval = NULL; gchar *select = NULL; - g_return_val_if_fail (TRACKER_SPARQL_IS_CONNECTION (connection), NULL); + g_return_val_if_fail (TRACKER_IS_SPARQL_CONNECTION (connection), NULL); g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); g_return_val_if_fail (make != NULL || model != NULL, NULL); -- GitLab From 3e77eff8a677c1ecd9aa129094ed857da802d787 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Fri, 15 May 2020 01:37:28 +0200 Subject: [PATCH 3/5] Add DataObject class to our resources We need this to set nie:dataSource property. I don't understand how this worked in the past. --- src/gom-tracker.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gom-tracker.c b/src/gom-tracker.c index 5666c16..63a4c29 100644 --- a/src/gom-tracker.c +++ b/src/gom-tracker.c @@ -208,7 +208,7 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection insert = g_string_new (NULL); g_string_append_printf (insert, - "INSERT OR REPLACE %s { <%s> a nie:InformationElement ; %s %s }", + "INSERT OR REPLACE %s { <%s> a nie:InformationElement, nie:DataObject ; %s %s }", graph_str, resource, property_name, quoted); g_free (quoted); -- GitLab From e742a60cf9dea1391d1ff409ce5696d21f423bed Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Fri, 15 May 2020 02:13:11 +0200 Subject: [PATCH 4/5] Organize data into content-based graphs Previously GOM used a graph per account and per resource but this cannot be done in Tracker 3. In Tracker 3, each graph is stored as a separate SQLite database and currently a maximum of ten graphs can be included in a single query due to SQLite's limitations. The new layout is modelled after how tracker-miner-fs uses graphs: we use a graph per content type (Contacts, Documents, Pictures), plus an extra graph to store accounts and folders/collections. --- src/gom-facebook-miner.c | 12 ++--- src/gom-flickr-miner.c | 24 +++++----- src/gom-gdata-miner.c | 31 ++++++------ src/gom-media-server-miner.c | 10 ++-- src/gom-miner.c | 40 ++++++++++++---- src/gom-miner.h | 1 - src/gom-owncloud-miner.c | 22 +++++---- src/gom-tracker.c | 93 +++++++++++++++++------------------- src/gom-tracker.h | 14 +++++- src/gom-zpj-miner.c | 22 ++++----- 10 files changed, 150 insertions(+), 119 deletions(-) diff --git a/src/gom-facebook-miner.c b/src/gom-facebook-miner.c index ff42ca5..fc89096 100644 --- a/src/gom-facebook-miner.c +++ b/src/gom-facebook-miner.c @@ -70,7 +70,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job, (connection, cancellable, error, &resource_exists, - datasource_urn, identifier, + TRACKER_PICTURES_GRAPH, identifier, "nfo:RemoteDataObject", class, NULL); if (*error != NULL) @@ -239,7 +239,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:url", album_link); if (*error != NULL) @@ -248,7 +248,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:description", album_description); if (*error != NULL) @@ -257,7 +257,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:title", album_name); if (*error != NULL) @@ -274,7 +274,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nco:creator", contact_resource); g_free (contact_resource); @@ -284,7 +284,7 @@ account_miner_job_process_album (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:contentCreated", album_created_time); if (*error != NULL) diff --git a/src/gom-flickr-miner.c b/src/gom-flickr-miner.c index 9ac338e..dc7349e 100644 --- a/src/gom-flickr-miner.c +++ b/src/gom-flickr-miner.c @@ -143,14 +143,14 @@ account_miner_job_process_entry (GomAccountMinerJob *job, (connection, cancellable, error, &resource_exists, - datasource_urn, identifier, + TRACKER_PICTURES_GRAPH, identifier, "nfo:RemoteDataObject", class, NULL); if (*error != NULL) goto out; gom_tracker_update_datasource (connection, datasource_urn, - resource_exists, identifier, resource, + resource_exists, TRACKER_PICTURES_GRAPH, resource, cancellable, error); if (*error != NULL) @@ -166,7 +166,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, parent_resource_urn = gom_tracker_sparql_connection_ensure_resource (connection, cancellable, error, NULL, - datasource_urn, parent_identifier, + TRACKER_PICTURES_GRAPH, parent_identifier, "nfo:RemoteDataObject", "nfo:DataContainer", NULL); g_free (parent_identifier); @@ -176,7 +176,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:isPartOf", parent_resource_urn); g_free (parent_resource_urn); @@ -187,7 +187,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:title", grl_media_get_title (entry->media)); if (*error != NULL) @@ -202,7 +202,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, created_time = modification_date = grl_media_get_creation_date (entry->media); new_mtime = g_date_time_to_unix (modification_date); mtime_changed = gom_tracker_update_mtime (connection, new_mtime, - resource_exists, identifier, resource, + resource_exists, TRACKER_PICTURES_GRAPH, resource, cancellable, error); if (*error != NULL) @@ -221,7 +221,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:contentCreated", date); g_free (date); } @@ -233,7 +233,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:url", url); if (*error != NULL) @@ -242,7 +242,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:description", grl_media_get_description (entry->media)); if (*error != NULL) @@ -254,7 +254,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:mimeType", mime); g_free (mime); @@ -265,7 +265,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, contact_resource = gom_tracker_utils_ensure_contact_resource (connection, cancellable, error, - datasource_urn, grl_media_get_author (entry->media)); + TRACKER_PICTURES_GRAPH, grl_media_get_author (entry->media)); if (*error != NULL) goto out; @@ -273,7 +273,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nco:creator", contact_resource); g_free (contact_resource); diff --git a/src/gom-gdata-miner.c b/src/gom-gdata-miner.c index 7872431..d0deb80 100644 --- a/src/gom-gdata-miner.c +++ b/src/gom-gdata-miner.c @@ -120,7 +120,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection, (connection, cancellable, error, &resource_exists, - datasource_urn, identifier, + TRACKER_DOCUMENTS_GRAPH, identifier, "nfo:RemoteDataObject", class, NULL); if (*error != NULL) @@ -187,7 +187,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection, parent_resource_urn = gom_tracker_sparql_connection_ensure_resource (connection, cancellable, error, NULL, - datasource_urn, parent_resource_id, + GOM_GRAPH, parent_resource_id, "nfo:RemoteDataObject", "nfo:DataContainer", NULL); g_free (parent_resource_id); @@ -219,7 +219,7 @@ account_miner_job_process_entry (TrackerSparqlConnection *connection, gom_tracker_sparql_connection_toggle_favorite (connection, cancellable, error, - resource, starred); + TRACKER_PICTURES_GRAPH, resource, starred); if (*error != NULL) goto out; @@ -400,14 +400,14 @@ account_miner_job_process_photo (TrackerSparqlConnection *connection, (connection, cancellable, error, &resource_exists, - datasource_urn, identifier, + TRACKER_PICTURES_GRAPH, identifier, "nfo:RemoteDataObject", "nmm:Photo", NULL); if (*error != NULL) goto out; gom_tracker_update_datasource (connection, datasource_urn, - resource_exists, identifier, resource, + resource_exists, TRACKER_PICTURES_GRAPH, resource, cancellable, error); if (*error != NULL) goto out; @@ -566,6 +566,7 @@ account_miner_job_process_photo (TrackerSparqlConnection *connection, equipment_resource = gom_tracker_utils_ensure_equipment_resource (connection, cancellable, error, + TRACKER_PICTURES_GRAPH, make, model); @@ -665,7 +666,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, (connection, cancellable, error, &resource_exists, - datasource_urn, identifier, + TRACKER_PICTURES_GRAPH, identifier, "nfo:RemoteDataObject", "nfo:DataContainer", NULL); @@ -674,7 +675,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, gom_tracker_update_datasource (connection, datasource_urn, - resource_exists, identifier, resource, + resource_exists, TRACKER_PICTURES_GRAPH, resource, cancellable, error); if (*error != NULL) @@ -685,7 +686,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, */ new_mtime = gdata_entry_get_updated (GDATA_ENTRY (album)); mtime_changed = gom_tracker_update_mtime (connection, new_mtime, - resource_exists, identifier, resource, + resource_exists, TRACKER_PICTURES_GRAPH, resource, cancellable, error); if (*error != NULL) @@ -703,7 +704,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:url", alternate_uri); if (*error != NULL) @@ -713,7 +714,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:description", summary); if (*error != NULL) @@ -723,7 +724,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:title", title); if (*error != NULL) @@ -743,7 +744,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nco:creator", contact_resource); g_free (contact_resource); @@ -755,7 +756,7 @@ account_miner_job_process_album (TrackerSparqlConnection *connection, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:contentCreated", date); g_free (date); @@ -865,7 +866,7 @@ insert_shared_content_photos (TrackerSparqlConnection *connection, if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, &local_error, - datasource_urn, + TRACKER_PICTURES_GRAPH, source_urn, "nie:relatedTo", photo_resource_urn)) @@ -878,7 +879,7 @@ insert_shared_content_photos (TrackerSparqlConnection *connection, if (!gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, &local_error, - datasource_urn, + TRACKER_PICTURES_GRAPH, photo_resource_urn, "nie:links", source_urn)) diff --git a/src/gom-media-server-miner.c b/src/gom-media-server-miner.c index 490869e..32e08c6 100644 --- a/src/gom-media-server-miner.c +++ b/src/gom-media-server-miner.c @@ -65,14 +65,14 @@ account_miner_job_process_photo (GomAccountMinerJob *job, (connection, cancellable, error, &resource_exists, - datasource_urn, identifier, + TRACKER_PICTURES_GRAPH, identifier, "nfo:RemoteDataObject", class, NULL); if (*error != NULL) goto out; gom_tracker_update_datasource (connection, datasource_urn, - resource_exists, identifier, resource, + resource_exists, TRACKER_PICTURES_GRAPH, resource, cancellable, error); if (*error != NULL) goto out; @@ -81,7 +81,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:url", photo->url); if (*error != NULL) @@ -90,7 +90,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:mimeType", photo->mimetype); if (*error != NULL) @@ -99,7 +99,7 @@ account_miner_job_process_photo (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:title", photo->name); if (*error != NULL) diff --git a/src/gom-miner.c b/src/gom-miner.c index f349d01..32892fa 100644 --- a/src/gom-miner.c +++ b/src/gom-miner.c @@ -376,7 +376,7 @@ gom_miner_ensure_datasource (GomMiner *self, " <%s> a nie:DataSource ; nao:identifier \"%s\" . " " <%s> a nie:InformationElement ; nie:rootElementOf <%s> ; nie:version \"%d\"" "}", - datasource_urn, + GOM_GRAPH, datasource_urn, klass->miner_identifier, root_element_urn, datasource_urn, klass->version); @@ -401,8 +401,8 @@ gom_account_miner_job_query_existing (GomAccountMinerJob *job, select = g_string_new (NULL); g_string_append_printf (select, - "SELECT ?urn nao:identifier(?urn) WHERE { ?urn nie:dataSource <%s> }", - job->datasource_urn); + "SELECT ?urn ?id WHERE { GRAPH <%s> { ?urn nie:dataSource <%s> ; nao:identifier ?id . } }", + GOM_GRAPH, job->datasource_urn); cursor = tracker_sparql_connection_query (job->connection, select->str, @@ -415,9 +415,21 @@ gom_account_miner_job_query_existing (GomAccountMinerJob *job, while (tracker_sparql_cursor_next (cursor, cancellable, error)) { - g_hash_table_insert (job->previous_resources, - g_strdup (tracker_sparql_cursor_get_string (cursor, 1, NULL)), - g_strdup (tracker_sparql_cursor_get_string (cursor, 0, NULL))); + const gchar *urn, *identifier; + + urn = tracker_sparql_cursor_get_string (cursor, 0, NULL); + identifier = tracker_sparql_cursor_get_string (cursor, 1, NULL); + + if (identifier != NULL) + { + g_hash_table_insert (job->previous_resources, + g_strdup (identifier), + g_strdup (urn)); + } + else + { + g_warning ("Missing identifier for urn %s", urn); + } } g_object_unref (cursor); @@ -489,16 +501,19 @@ gom_account_miner_job (GTask *task, if (error != NULL) goto out; + g_debug ("account miner: Querying existing accounts stored in database"); gom_account_miner_job_query_existing (job, &error); if (error != NULL) goto out; + g_debug ("account miner: Querying remote server"); gom_account_miner_job_query (job, &error); if (error != NULL) goto out; + g_debug ("account miner: Removing stale accounts"); gom_account_miner_job_cleanup_previous (job, &error); if (error != NULL) @@ -752,10 +767,15 @@ cleanup_job (gpointer data, /* find all our datasources in the tracker DB */ select = g_string_new (NULL); - g_string_append_printf (select, "SELECT ?datasource nie:version(?root) WHERE { " - "?datasource a nie:DataSource . " - "?datasource nao:identifier \"%s\" . " - "OPTIONAL { ?root nie:rootElementOf ?datasource } }", + g_string_append_printf (select, + "SELECT ?datasource nie:version(?root) WHERE { " + " GRAPH <%s> { " + " ?datasource a nie:DataSource . " + " ?datasource nao:identifier \"%s\" . " + " OPTIONAL { ?root nie:rootElementOf ?datasource } " + " }" + "}", + GOM_GRAPH, klass->miner_identifier); cursor = tracker_sparql_connection_query (self->priv->connection, diff --git a/src/gom-miner.h b/src/gom-miner.h index 5dcfc8d..8f83139 100644 --- a/src/gom-miner.h +++ b/src/gom-miner.h @@ -61,7 +61,6 @@ typedef struct _GomMinerPrivate GomMinerPrivate; typedef struct { GomMiner *miner; TrackerSparqlConnection *connection; - gchar *bus_name; GoaAccount *account; GHashTable *services; diff --git a/src/gom-owncloud-miner.c b/src/gom-owncloud-miner.c index 34d303b..623f2e1 100644 --- a/src/gom-owncloud-miner.c +++ b/src/gom-owncloud-miner.c @@ -100,14 +100,14 @@ account_miner_job_process_file (GomAccountMinerJob *job, (connection, cancellable, error, &resource_exists, - datasource_urn, identifier, + TRACKER_DOCUMENTS_GRAPH, identifier, "nfo:RemoteDataObject", class, NULL); if (*error != NULL) goto out; gom_tracker_update_datasource (connection, datasource_urn, - resource_exists, identifier, resource, + resource_exists, TRACKER_DOCUMENTS_GRAPH, resource, cancellable, error); if (*error != NULL) @@ -117,7 +117,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, modification_time = g_date_time_new_from_timeval_local (&tv); new_mtime = g_date_time_to_unix (modification_time); mtime_changed = gom_tracker_update_mtime (connection, new_mtime, - resource_exists, identifier, resource, + resource_exists, TRACKER_DOCUMENTS_GRAPH, resource, cancellable, error); if (*error != NULL) @@ -133,7 +133,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_DOCUMENTS_GRAPH, resource, "nie:url", uri); if (*error != NULL) @@ -156,7 +156,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, parent_resource_urn = gom_tracker_sparql_connection_ensure_resource (connection, cancellable, error, NULL, - datasource_urn, parent_identifier, + GOM_GRAPH, parent_identifier, "nfo:RemoteDataObject", "nfo:DataContainer", NULL); g_checksum_reset (checksum); g_free (parent_identifier); @@ -168,7 +168,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_DOCUMENTS_GRAPH, resource, "nie:isPartOf", parent_resource_urn); g_free (parent_resource_urn); @@ -182,7 +182,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_DOCUMENTS_GRAPH, resource, "nie:mimeType", mime); if (*error != NULL) @@ -194,7 +194,7 @@ account_miner_job_process_file (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_DOCUMENTS_GRAPH, resource, "nfo:fileName", display_name); if (*error != NULL) @@ -416,6 +416,11 @@ query_owncloud (GomAccountMinerJob *job, mount = g_volume_get_mount (volume); if (mount == NULL) { + g_autofree gchar *volume_name; + + volume_name = g_volume_get_name (volume); + g_debug ("Mounting Online Account volume %s", volume_name); + data.error = error; context = g_main_context_new (); @@ -436,6 +441,7 @@ query_owncloud (GomAccountMinerJob *job, } root = g_mount_get_root (mount); + g_debug ("Got volume from gnome-online-accounts: root is %s", g_file_peek_path (root)); account_miner_job_traverse_dir (job, connection, previous_resources, datasource_urn, root, TRUE, cancellable, error); g_object_unref (root); diff --git a/src/gom-tracker.c b/src/gom-tracker.c index 63a4c29..0d1766c 100644 --- a/src/gom-tracker.c +++ b/src/gom-tracker.c @@ -26,16 +26,11 @@ #include "gom-tracker.h" #include "gom-utils.h" -static gchar * -_tracker_utils_format_into_graph (const gchar *graph) -{ - return (graph != NULL) ? g_strdup_printf ("INTO <%s> ", graph) : g_strdup (""); -} - static gboolean gom_tracker_sparql_connection_get_string_attribute (TrackerSparqlConnection *connection, GCancellable *cancellable, GError **error, + const gchar *graph, const gchar *resource, const gchar *attribute, gchar **value) @@ -45,8 +40,8 @@ gom_tracker_sparql_connection_get_string_attribute (TrackerSparqlConnection *con const gchar *string_value = NULL; gboolean res; - g_string_append_printf (select, "SELECT ?val { <%s> %s ?val }", - resource, attribute); + g_string_append_printf (select, "SELECT ?val { GRAPH <%s> { <%s> %s ?val } }", + graph, resource, attribute); cursor = tracker_sparql_connection_query (connection, select->str, cancellable, error); @@ -86,7 +81,8 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti const gchar *class, ...) { - GString *select, *insert, *inner; + GString *select, *inner; + gchar *insert; va_list args; const gchar *arg; TrackerSparqlCursor *cursor; @@ -98,6 +94,8 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti gchar *key = NULL, *val = NULL; gboolean exists = FALSE; + g_return_val_if_fail (graph != NULL, NULL); + /* build the inner query with all the classes */ va_start (args, class); inner = g_string_new (NULL); @@ -112,7 +110,7 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti /* query if such a resource is already in the DB */ select = g_string_new (NULL); g_string_append_printf (select, - "SELECT ?urn WHERE { ?urn %s }", inner->str); + "SELECT ?urn WHERE { GRAPH <%s> { ?urn %s } }", graph, inner->str); cursor = tracker_sparql_connection_query (connection, select->str, @@ -138,19 +136,12 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti } /* not found, create the resource */ - insert = g_string_new (NULL); - graph_str = _tracker_utils_format_into_graph (graph); - - g_string_append_printf (insert, "INSERT %s { _:res %s }", - graph_str, inner->str); - g_free (graph_str); - g_string_free (inner, TRUE); - + insert = g_strdup_printf ("INSERT INTO <%s> { _:res %s }", + graph, inner->str); insert_res = - tracker_sparql_connection_update_blank (connection, insert->str, + tracker_sparql_connection_update_blank (connection, insert, G_PRIORITY_DEFAULT, NULL, error); - - g_string_free (insert, TRUE); + g_free (insert); if (*error != NULL) goto out; @@ -194,10 +185,10 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection const gchar *property_value) { GString *insert; - gchar *graph_str, *quoted; + gchar *quoted; gboolean retval = TRUE; - graph_str = _tracker_utils_format_into_graph (graph); + g_return_val_if_fail (graph != NULL, FALSE); /* the "null" value must not be quoted */ if (property_value == NULL) @@ -208,8 +199,8 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection insert = g_string_new (NULL); g_string_append_printf (insert, - "INSERT OR REPLACE %s { <%s> a nie:InformationElement, nie:DataObject ; %s %s }", - graph_str, resource, property_name, quoted); + "INSERT OR REPLACE INTO <%s> { <%s> a nie:InformationElement, nie:DataObject ; %s %s }", + graph, resource, property_name, quoted); g_free (quoted); g_debug ("Insert or replace triple: query %s", insert->str); @@ -223,8 +214,6 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection if (*error != NULL) retval = FALSE; - g_free (graph_str); - return retval; } @@ -271,6 +260,7 @@ gboolean gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connection, GCancellable *cancellable, GError **error, + const gchar *graph, const gchar *resource, gboolean favorite) { @@ -279,15 +269,15 @@ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connecti gboolean retval = TRUE; if (favorite) - op_str = "INSERT OR REPLACE"; + op_str = "INSERT OR REPLACE INTO"; else - op_str = "DELETE"; + op_str = "DELETE FROM"; update = g_string_new (NULL); g_string_append_printf (update, - "%s { <%s> nao:hasTag nao:predefined-tag-favorite }", - op_str, resource); + "%s <%s> { <%s> nao:hasTag nao:predefined-tag-favorite }", + op_str, graph, resource); g_debug ("Toggle favorite: query %s", update->str); @@ -321,9 +311,13 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection, mail_uri = g_strconcat ("mailto:", email, NULL); select = g_string_new (NULL); g_string_append_printf (select, - "SELECT ?urn WHERE { ?urn a nco:Contact . " - "?urn nco:hasEmailAddress ?mail . " - "FILTER (fn:contains(?mail, \"%s\" )) }", mail_uri); + "SELECT ?urn WHERE { " + " GRAPH <%s> { " + " ?urn a nco:Contact . " + " ?urn nco:hasEmailAddress ?mail . " + " FILTER (fn:contains(?mail, \"%s\" )) " + " }" + "}", TRACKER_CONTACTS_GRAPH, mail_uri); cursor = tracker_sparql_connection_query (connection, select->str, @@ -351,8 +345,9 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection, insert = g_string_new (NULL); g_string_append_printf (insert, - "INSERT { <%s> a nco:EmailAddress ; nco:emailAddress \"%s\" . " + "INSERT INTO <%s> { <%s> a nco:EmailAddress ; nco:emailAddress \"%s\" . " "_:res a nco:Contact ; nco:hasEmailAddress <%s> ; nco:fullname \"%s\" . }", + TRACKER_CONTACTS_GRAPH, mail_uri, email, mail_uri, fullname); @@ -397,6 +392,7 @@ gchar * gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection, GCancellable *cancellable, GError **error, + const gchar *graph, const gchar *make, const gchar *model) { @@ -416,7 +412,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection equip_uri = tracker_sparql_escape_uri_printf ("urn:equipment:%s:%s:", make != NULL ? make : "", model != NULL ? model : ""); - select = g_strdup_printf ("SELECT <%s> WHERE { }", equip_uri); + select = g_strdup_printf ("ASK { GRAPH <%s> { <%s> a nfo:Equipment } }", graph, equip_uri); local_error = NULL; cursor = tracker_sparql_connection_query (connection, select, cancellable, &local_error); @@ -436,20 +432,19 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection if (res) { - const gchar *cursor_uri; - - cursor_uri = tracker_sparql_cursor_get_string (cursor, 0, NULL); - if (g_strcmp0 (cursor_uri, equip_uri) == 0) + if (tracker_sparql_cursor_get_boolean (cursor, 0)) { - /* return the found resource */ - retval = g_strdup (cursor_uri); + /* The resource exists */ + retval = equip_uri; + equip_uri = NULL; g_debug ("Found resource in the store: %s", retval); goto out; } } /* not found, create the resource */ - insert = g_strdup_printf ("INSERT { <%s> a nfo:Equipment ; nfo:manufacturer \"%s\" ; nfo:model \"%s\" }", + insert = g_strdup_printf ("INSERT INTO <%s> { <%s> a nfo:Equipment ; nfo:manufacturer \"%s\" ; nfo:model \"%s\" }", + graph, equip_uri, make, model); @@ -480,7 +475,7 @@ void gom_tracker_update_datasource (TrackerSparqlConnection *connection, const gchar *datasource_urn, gboolean resource_exists, - const gchar *identifier, + const gchar *graph, const gchar *resource, GCancellable *cancellable, GError **error) @@ -498,7 +493,7 @@ gom_tracker_update_datasource (TrackerSparqlConnection *connection, res = gom_tracker_sparql_connection_get_string_attribute (connection, cancellable, error, - resource, "nie:dataSource", &old_value); + graph, resource, "nie:dataSource", &old_value); g_clear_error (error); if (res) @@ -514,7 +509,7 @@ gom_tracker_update_datasource (TrackerSparqlConnection *connection, if (set_datasource) gom_tracker_sparql_connection_set_triple (connection, cancellable, error, - identifier, resource, + graph, resource, "nie:dataSource", datasource_urn); } @@ -522,7 +517,7 @@ gboolean gom_tracker_update_mtime (TrackerSparqlConnection *connection, gint64 new_mtime, gboolean resource_exists, - const gchar *identifier, + const gchar *graph, const gchar *resource, GCancellable *cancellable, GError **error) @@ -536,7 +531,7 @@ gom_tracker_update_mtime (TrackerSparqlConnection *connection, { res = gom_tracker_sparql_connection_get_string_attribute (connection, cancellable, error, - resource, "nie:contentLastModified", &old_value); + graph, resource, "nie:contentLastModified", &old_value); g_clear_error (error); if (res) @@ -552,7 +547,7 @@ gom_tracker_update_mtime (TrackerSparqlConnection *connection, date = gom_iso8601_from_timestamp (new_mtime); gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - identifier, resource, + graph, resource, "nie:contentLastModified", date); g_free (date); diff --git a/src/gom-tracker.h b/src/gom-tracker.h index 94a39e8..a5ae6fd 100644 --- a/src/gom-tracker.h +++ b/src/gom-tracker.h @@ -29,6 +29,14 @@ G_BEGIN_DECLS +/* The graph where we store account meta information */ +#define GOM_GRAPH "tracker.api.gnome.org/ontology/v3/gnome-online-miners" + +/* Graphs where we store content information */ +#define TRACKER_CONTACTS_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Contacts" +#define TRACKER_DOCUMENTS_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Documents" +#define TRACKER_PICTURES_GRAPH "http://tracker.api.gnome.org/ontology/v3/tracker#Pictures" + gchar *gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connection, GCancellable *cancellable, GError **error, @@ -57,6 +65,7 @@ gboolean gom_tracker_sparql_connection_set_triple (TrackerSparqlConnection *conn gboolean gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connection, GCancellable *cancellable, GError **error, + const gchar *graph, const gchar *resource, gboolean favorite); @@ -69,20 +78,21 @@ gchar* gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *conne gchar *gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection, GCancellable *cancellable, GError **error, + const gchar *graph, const gchar *make, const gchar *model); void gom_tracker_update_datasource (TrackerSparqlConnection *connection, const gchar *datasource_urn, gboolean resource_exists, - const gchar *identifier, + const gchar *graph, const gchar *resource, GCancellable *cancellable, GError **error); gboolean gom_tracker_update_mtime (TrackerSparqlConnection *connection, gint64 new_mtime, gboolean resource_exists, - const gchar *identifier, + const gchar *graph, const gchar *resource, GCancellable *cancellable, GError **error); diff --git a/src/gom-zpj-miner.c b/src/gom-zpj-miner.c index 6dff947..1372de5 100644 --- a/src/gom-zpj-miner.c +++ b/src/gom-zpj-miner.c @@ -70,14 +70,14 @@ account_miner_job_process_entry (GomAccountMinerJob *job, (connection, cancellable, error, &resource_exists, - datasource_urn, identifier, + TRACKER_PICTURES_GRAPH, identifier, "nfo:RemoteDataObject", class, NULL); if (*error != NULL) goto out; gom_tracker_update_datasource (connection, datasource_urn, - resource_exists, identifier, resource, + resource_exists, TRACKER_PICTURES_GRAPH, resource, cancellable, error); if (*error != NULL) @@ -86,7 +86,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, updated_time = zpj_skydrive_entry_get_updated_time (entry); new_mtime = g_date_time_to_unix (updated_time); mtime_changed = gom_tracker_update_mtime (connection, new_mtime, - resource_exists, identifier, resource, + resource_exists, TRACKER_PICTURES_GRAPH, resource, cancellable, error); if (*error != NULL) @@ -102,7 +102,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:url", identifier); if (*error != NULL) @@ -119,7 +119,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, parent_resource_urn = gom_tracker_sparql_connection_ensure_resource (connection, cancellable, error, NULL, - datasource_urn, parent_identifier, + TRACKER_PICTURES_GRAPH, parent_identifier, "nfo:RemoteDataObject", "nfo:DataContainer", NULL); g_free (parent_identifier); @@ -129,7 +129,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:isPartOf", parent_resource_urn); g_free (parent_resource_urn); @@ -142,7 +142,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:mimeType", mime); g_free (mime); @@ -154,7 +154,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:description", zpj_skydrive_entry_get_description (entry)); if (*error != NULL) @@ -163,7 +163,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nfo:fileName", name); if (*error != NULL) @@ -180,7 +180,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nco:creator", contact_resource); g_free (contact_resource); @@ -192,7 +192,7 @@ account_miner_job_process_entry (GomAccountMinerJob *job, gom_tracker_sparql_connection_insert_or_replace_triple (connection, cancellable, error, - datasource_urn, resource, + TRACKER_PICTURES_GRAPH, resource, "nie:contentCreated", date); g_free (date); -- GitLab From 34259944dd9e6e167663c97080142f6e8b7f00f2 Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Mon, 27 Jul 2020 23:48:49 +0200 Subject: [PATCH 5/5] Update for API changes in Tracker 2.99 --- src/gom-miner.c | 3 --- src/gom-tracker.c | 22 ++++++---------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/src/gom-miner.c b/src/gom-miner.c index 32892fa..d9ccf67 100644 --- a/src/gom-miner.c +++ b/src/gom-miner.c @@ -382,7 +382,6 @@ gom_miner_ensure_datasource (GomMiner *self, tracker_sparql_connection_update (self->priv->connection, datasource_insert->str, - G_PRIORITY_DEFAULT, cancellable, error); @@ -469,7 +468,6 @@ gom_account_miner_job_cleanup_previous (GomAccountMinerJob *job, tracker_sparql_connection_update (job->connection, delete->str, - G_PRIORITY_DEFAULT, cancellable, error); @@ -709,7 +707,6 @@ cleanup_job_do_cleanup (CleanupJob *job, GCancellable *cancellable) tracker_sparql_connection_update (self->priv->connection, update->str, - G_PRIORITY_DEFAULT, cancellable, &error); g_string_free (update, TRUE); diff --git a/src/gom-tracker.c b/src/gom-tracker.c index 0d1766c..5f49f73 100644 --- a/src/gom-tracker.c +++ b/src/gom-tracker.c @@ -138,9 +138,7 @@ gom_tracker_sparql_connection_ensure_resource (TrackerSparqlConnection *connecti /* not found, create the resource */ insert = g_strdup_printf ("INSERT INTO <%s> { _:res %s }", graph, inner->str); - insert_res = - tracker_sparql_connection_update_blank (connection, insert, - G_PRIORITY_DEFAULT, NULL, error); + insert_res = tracker_sparql_connection_update_blank (connection, insert, NULL, error); g_free (insert); if (*error != NULL) @@ -205,9 +203,7 @@ gom_tracker_sparql_connection_insert_or_replace_triple (TrackerSparqlConnection g_debug ("Insert or replace triple: query %s", insert->str); - tracker_sparql_connection_update (connection, insert->str, - G_PRIORITY_DEFAULT, cancellable, - error); + tracker_sparql_connection_update (connection, insert->str, cancellable, error); g_string_free (insert, TRUE); @@ -235,9 +231,7 @@ gom_tracker_sparql_connection_set_triple (TrackerSparqlConnection *connection, "DELETE { <%s> %s ?val } WHERE { <%s> %s ?val }", resource, property_name, resource, property_name); - tracker_sparql_connection_update (connection, delete->str, - G_PRIORITY_DEFAULT, cancellable, - error); + tracker_sparql_connection_update (connection, delete->str, cancellable, error); g_string_free (delete, TRUE); if (*error != NULL) @@ -281,9 +275,7 @@ gom_tracker_sparql_connection_toggle_favorite (TrackerSparqlConnection *connecti g_debug ("Toggle favorite: query %s", update->str); - tracker_sparql_connection_update (connection, update->str, - G_PRIORITY_DEFAULT, cancellable, - error); + tracker_sparql_connection_update (connection, update->str, cancellable, error); g_string_free (update, TRUE); @@ -351,9 +343,7 @@ gom_tracker_utils_ensure_contact_resource (TrackerSparqlConnection *connection, mail_uri, email, mail_uri, fullname); - insert_res = - tracker_sparql_connection_update_blank (connection, insert->str, - G_PRIORITY_DEFAULT, cancellable, error); + insert_res = tracker_sparql_connection_update_blank (connection, insert->str, cancellable, error); g_string_free (insert, TRUE); @@ -450,7 +440,7 @@ gom_tracker_utils_ensure_equipment_resource (TrackerSparqlConnection *connection model); local_error = NULL; - tracker_sparql_connection_update (connection, insert, G_PRIORITY_DEFAULT, cancellable, &local_error); + tracker_sparql_connection_update (connection, insert, cancellable, &local_error); if (local_error != NULL) { g_propagate_error (error, local_error); -- GitLab