[tracker-miners/wip/carlosg/drop-sparql-builder: 5/5] tracker-miner-rss: Port to TrackerResource
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners/wip/carlosg/drop-sparql-builder: 5/5] tracker-miner-rss: Port to TrackerResource
- Date: Sun, 11 Nov 2018 13:43:02 +0000 (UTC)
commit bc97819a51e6d9c579bd19479f7fcdaede7a9543
Author: Carlos Garnacho <carlosg gnome org>
Date: Sat Nov 10 14:21:29 2018 +0100
tracker-miner-rss: Port to TrackerResource
Drops all usage of deprecated TrackerSparqlBuilder in tracker-miner-rss.
src/miners/rss/tracker-miner-rss.c | 362 +++++++++++--------------------------
1 file changed, 101 insertions(+), 261 deletions(-)
---
diff --git a/src/miners/rss/tracker-miner-rss.c b/src/miners/rss/tracker-miner-rss.c
index cba5a1e73..0058da8ca 100644
--- a/src/miners/rss/tracker-miner-rss.c
+++ b/src/miners/rss/tracker-miner-rss.c
@@ -555,48 +555,29 @@ feed_channel_change_updated_time_cb (GObject *source,
static gboolean
feed_channel_changed_timeout_cb (gpointer user_data)
{
- TrackerSparqlBuilder *sparql;
+ TrackerResource *resource;
FeedChannelUpdateData *fcud;
- gchar *uri;
- time_t now;
+ gchar *uri, *time_str;
fcud = user_data;
fcud->timeout_id = 0;
- now = time (NULL);
uri = g_object_get_data (G_OBJECT (fcud->channel), "subject");
g_message ("Updating mfo:updatedTime for channel '%s'", grss_feed_channel_get_title (fcud->channel));
- /* I hope there will be soon a SPARQL command to just update a
- * value instead to delete and re-insert it
- */
-
- sparql = tracker_sparql_builder_new_update ();
- tracker_sparql_builder_delete_open (sparql, NULL);
- tracker_sparql_builder_subject_iri (sparql, uri);
- tracker_sparql_builder_predicate (sparql, "mfo:updatedTime");
- tracker_sparql_builder_object_variable (sparql, "unknown");
- tracker_sparql_builder_delete_close (sparql);
- tracker_sparql_builder_where_open (sparql);
- tracker_sparql_builder_subject_iri (sparql, uri);
- tracker_sparql_builder_predicate (sparql, "mfo:updatedTime");
- tracker_sparql_builder_object_variable (sparql, "unknown");
- tracker_sparql_builder_where_close (sparql);
-
- tracker_sparql_builder_insert_open (sparql, NULL);
- tracker_sparql_builder_subject_iri (sparql, uri);
- tracker_sparql_builder_predicate (sparql, "mfo:updatedTime");
- tracker_sparql_builder_object_date (sparql, &now);
- tracker_sparql_builder_insert_close (sparql);
+ resource = tracker_resource_new (uri);
+ time_str = tracker_date_to_string (time (NULL));
+ tracker_resource_set_string (resource, "mfo:updatedTime", time_str);
+ g_free (time_str);
tracker_sparql_connection_update_async (tracker_miner_get_connection (TRACKER_MINER (fcud->miner)),
- tracker_sparql_builder_get_result (sparql),
+ tracker_resource_print_sparql_update (resource, NULL,
TRACKER_OWN_GRAPH_URN),
G_PRIORITY_DEFAULT,
fcud->cancellable,
feed_channel_change_updated_time_cb,
fcud);
- g_object_unref (sparql);
+ g_object_unref (resource);
return FALSE;
}
@@ -660,97 +641,81 @@ feed_fetching_cb (GrssFeedsPool *pool,
}
static gchar *
-sparql_add_website (TrackerSparqlBuilder *sparql,
- const gchar *uri)
+sparql_add_website (TrackerResource *resource,
+ const gchar *uri)
{
+ TrackerResource *website;
gchar *website_urn;
website_urn = tracker_sparql_escape_uri_printf ("urn:website:%s", uri);
- tracker_sparql_builder_insert_silent_open (sparql, NULL);
- tracker_sparql_builder_subject_iri (sparql, website_urn);
- tracker_sparql_builder_predicate (sparql, "a");
- tracker_sparql_builder_object (sparql, "nie:DataObject");
- tracker_sparql_builder_object (sparql, "nfo:Website");
+ website = tracker_resource_new (website_urn);
+ tracker_resource_add_uri (website, "rdf:type", "nie:DataObject");
+ tracker_resource_add_uri (website, "rdf:type", "nfo:Website");
+ tracker_resource_set_string (website, "nie:url", uri);
- tracker_sparql_builder_predicate (sparql, "nie:url");
- tracker_sparql_builder_object_unvalidated (sparql, uri);
-
- tracker_sparql_builder_insert_close (sparql);
+ tracker_resource_set_take_relation (resource, "nco:websiteUrl", website);
return website_urn;
}
-static void
-sparql_add_contact (TrackerSparqlBuilder *sparql,
- const gchar *alias,
- GrssPerson *contact,
- const gchar *website_urn,
- gboolean is_iri)
+static TrackerResource *
+sparql_add_contact (TrackerResource *resource,
+ const gchar *property,
+ GrssPerson *contact)
{
const gchar *name = grss_person_get_name (contact);
const gchar *email = grss_person_get_email (contact);
+ const gchar *person_url = grss_person_get_uri (contact);
+ TrackerResource *contact_resource;
- tracker_sparql_builder_subject (sparql, alias);
- tracker_sparql_builder_predicate (sparql, "a");
- tracker_sparql_builder_object (sparql, "nco:Contact");
-
- tracker_sparql_builder_predicate (sparql, "nco:fullname");
- tracker_sparql_builder_object_unvalidated (sparql, name);
+ contact_resource = tracker_resource_new (NULL);
+ tracker_resource_add_uri (contact_resource, "rdf:type", "nco:Contact");
+ tracker_resource_set_string (contact_resource, "nco:fullname", name);
if (email != NULL) {
- tracker_sparql_builder_predicate (sparql, "nco:hasEmailAddress");
-
- tracker_sparql_builder_object_blank_open (sparql);
+ TrackerResource *email_resource;
- tracker_sparql_builder_predicate (sparql, "a");
- tracker_sparql_builder_object (sparql, "nco:EmailAddress");
-
- tracker_sparql_builder_predicate (sparql, "nco:emailAddress");
- tracker_sparql_builder_object_unvalidated (sparql, email);
- tracker_sparql_builder_object_blank_close (sparql);
+ email_resource = tracker_resource_new (NULL);
+ tracker_resource_add_uri (email_resource, "rdf:type", "nco:EmailAddress");
+ tracker_resource_set_string (email_resource, "nco:emailAddress", email);
+ tracker_resource_add_take_relation (contact_resource, "nco:hasEmailAddress", email_resource);
}
- if (website_urn) {
- tracker_sparql_builder_predicate (sparql, "nco:websiteUrl");
+ if (person_url != NULL)
+ sparql_add_website (contact_resource, person_url);
- if (is_iri) {
- tracker_sparql_builder_object_iri (sparql, website_urn);
- } else {
- tracker_sparql_builder_object (sparql, website_urn);
- }
- }
+ tracker_resource_add_take_relation (resource, property, contact_resource);
+
+ return contact_resource;
}
static void
-sparql_add_enclosure (TrackerSparqlBuilder *sparql,
- const gchar *subject,
- GrssFeedEnclosure *enclosure)
+sparql_add_enclosure (TrackerResource *resource,
+ GrssFeedEnclosure *enclosure)
{
- gchar *url;
+ TrackerResource *child;
+ const gchar *url;
gint length;
- gchar * format;
+ const gchar * format;
+
+ child = tracker_resource_new (NULL);
url = grss_feed_enclosure_get_url (enclosure);
length = grss_feed_enclosure_get_length (enclosure);
format = grss_feed_enclosure_get_format (enclosure);
- tracker_sparql_builder_subject (sparql, subject);
- tracker_sparql_builder_predicate (sparql, "a");
- tracker_sparql_builder_object (sparql, "mfo:Enclosure");
- tracker_sparql_builder_object (sparql, "nfo:RemoteDataObject");
+ tracker_resource_add_uri (child, "rdf:type", "mfo:Enclosure");
+ tracker_resource_add_uri (child, "rdf:type", "nfo:RemoteDataObject");
- tracker_sparql_builder_predicate (sparql, "mfo:remoteLink");
- tracker_sparql_builder_object_unvalidated (sparql, url);
+ tracker_resource_set_uri (child, "mfo:remoteLink", url);
- tracker_sparql_builder_predicate (sparql, "nfo:fileSize");
- tracker_sparql_builder_object_int64 (sparql, length);
+ tracker_resource_set_int64 (child, "nfo:fileSize", length);
- if (format != NULL) {
- tracker_sparql_builder_predicate (sparql, "nie:mimeType");
- tracker_sparql_builder_object_unvalidated (sparql, format);
- }
+ if (format != NULL)
+ tracker_resource_set_string (child, "nie:mimeType", format);
+ tracker_resource_add_take_relation (resource, "mfo:enclosureList", child);
}
static gchar *
@@ -778,187 +743,85 @@ feed_message_create_delete_properties_query (const gchar *item_urn)
"}", item_urn, item_urn);
}
-static TrackerSparqlBuilder *
-feed_message_create_insert_builder (TrackerMinerRSS *miner,
- GrssFeedItem *item,
- const gchar *item_urn)
+static TrackerResource *
+feed_message_create_resource (TrackerMinerRSS *miner,
+ GrssFeedItem *item,
+ const gchar *item_urn)
{
time_t t;
- gchar *uri;
+ gchar *uri, *time_str;
const gchar *url;
GrssPerson *author;
gdouble latitude;
gdouble longitude;
const gchar *tmp_string;
- TrackerSparqlBuilder *sparql;
+ TrackerResource *resource;
GrssFeedChannel *channel;
- gboolean has_geolocation;
const GList *contributors;
const GList *enclosures;
const GList *list, *l;
- GList *contrib_aliases = NULL;
- GList *enclosure_aliases = NULL;
- GHashTable *websites;
GHashTable *enclosure_urls;
- gboolean is_iri = FALSE;
- gint i = 0;
-
- if (!item_urn) {
- item_urn = "_:message";
- } else {
- is_iri = TRUE;
- }
url = get_message_url (item);
g_message ("Inserting feed item for '%s'", url);
- websites = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) g_free);
- g_hash_table_insert (websites, g_strdup (url), g_strdup (item_urn));
+ resource = tracker_resource_new (item_urn);
+
+ tracker_resource_add_uri (resource, "rdf:type", "mfo:FeedMessage");
+ tracker_resource_add_uri (resource, "rdf:type", "nfo:RemoteDataObject");
- sparql = tracker_sparql_builder_new_update ();
+ if (url != NULL)
+ tracker_resource_set_string (resource, "nie:url", url);
+
+ resource = tracker_resource_new (NULL);
author = grss_feed_item_get_author (item);
contributors = grss_feed_item_get_contributors (item);
channel = grss_feed_item_get_parent (item);
enclosures = grss_feed_item_get_enclosures (item);
- for (l = contributors; l; l = l->next) {
- const gchar *person_url;
-
- person_url = grss_person_get_uri (l->data);
-
- if (!person_url)
- continue;
-
- if (g_hash_table_lookup (websites, person_url))
- continue;
-
- g_hash_table_insert (websites, g_strdup (person_url),
- sparql_add_website (sparql, person_url));
- }
-
- if (author && grss_person_get_uri (author)) {
- const gchar *person_url;
-
- person_url = grss_person_get_uri (author);
-
- if (!g_hash_table_lookup (websites, person_url)) {
- g_hash_table_insert (websites, g_strdup (person_url),
- sparql_add_website (sparql, person_url));
- }
- }
-
- has_geolocation = grss_feed_item_get_geo_point (item, &latitude, &longitude);
- tracker_sparql_builder_insert_open (sparql, NULL);
+ if (grss_feed_item_get_geo_point (item, &latitude, &longitude)) {
+ TrackerResource *geolocation;
- if (has_geolocation) {
g_message (" Geolocation, using longitude:%f, latitude:%f",
longitude, latitude);
- tracker_sparql_builder_subject (sparql, "_:location");
- tracker_sparql_builder_predicate (sparql, "a");
- tracker_sparql_builder_object (sparql, "slo:GeoLocation");
+ geolocation = tracker_resource_new (NULL);
+ tracker_resource_add_uri (geolocation, "rdf:type", "slo:GeoLocation");
+ tracker_resource_set_double (geolocation, "slo:latitude", latitude);
+ tracker_resource_set_double (geolocation, "slo:longitude", longitude);
- tracker_sparql_builder_predicate (sparql, "slo:latitude");
- tracker_sparql_builder_object_double (sparql, latitude);
- tracker_sparql_builder_predicate (sparql, "slo:longitude");
- tracker_sparql_builder_object_double (sparql, longitude);
+ tracker_resource_set_take_relation (resource, "slo:location", geolocation);
}
if (author != NULL) {
g_message (" Author:'%s'", grss_person_get_name (author));
-
- if (grss_person_get_uri (author))
- tmp_string = g_hash_table_lookup (websites, grss_person_get_uri (author));
- else
- tmp_string = NULL;
-
- sparql_add_contact (sparql, "_:author", author, tmp_string,
- (tmp_string && tmp_string[0] != '_'));
+ sparql_add_contact (resource, "nco:creator", author);
}
- i = 0;
for (l = contributors; l; l = l->next) {
- gchar *subject;
-
g_debug (" Contributor:'%s'", grss_person_get_name (l->data));
-
- subject = g_strdup_printf ("_:contrib%d", i++);
- contrib_aliases = g_list_prepend (contrib_aliases, subject);
-
- if (grss_person_get_uri (l->data))
- tmp_string = g_hash_table_lookup (websites, grss_person_get_uri (l->data));
- else
- tmp_string = NULL;
-
- sparql_add_contact (sparql, subject, l->data, tmp_string,
- (tmp_string && tmp_string[0] != '_'));
-
- /* subject is not freed right now as it will be freed at the end of the
- * method in a foreach loop over the contrib_aliases list */
+ sparql_add_contact (resource, "nco:contributor", l->data);
}
- enclosure_urls = g_hash_table_new_full (g_str_hash, g_str_equal,
- (GDestroyNotify) g_free,
- (GDestroyNotify) g_free);
- i = 0;
+ enclosure_urls = g_hash_table_new (g_str_hash, g_str_equal);
for (l = enclosures; l; l = l->next) {
- gchar *subject;
- gchar *url;
+ const gchar *url;
url = grss_feed_enclosure_get_url (l->data);
if (!g_hash_table_contains (enclosure_urls, url)) {
g_debug (" Enclosure:'%s'", url);
- subject = g_strdup_printf ("_:enclosure%d", i++);
- enclosure_aliases = g_list_prepend (enclosure_aliases, subject);
- g_hash_table_insert (enclosure_urls, g_strdup (url), NULL);
-
- sparql_add_enclosure (sparql, subject, l->data);
+ g_hash_table_add (enclosure_urls, (gpointer) url);
+ sparql_add_enclosure (resource, l->data);
}
-
- /* subject is not freed right now as it will be freed at the end of the
- * method in a foreach loop over the enclosure_aliases list */
- }
-
- if (is_iri) {
- tracker_sparql_builder_subject_iri (sparql, item_urn);
- } else {
- tracker_sparql_builder_subject (sparql, item_urn);
- }
- tracker_sparql_builder_predicate (sparql, "a");
- tracker_sparql_builder_object (sparql, "mfo:FeedMessage");
- tracker_sparql_builder_predicate (sparql, "a");
- tracker_sparql_builder_object (sparql, "nfo:RemoteDataObject");
-
- if (has_geolocation == TRUE) {
- tracker_sparql_builder_predicate (sparql, "slo:location");
- tracker_sparql_builder_object (sparql, "_:location");
}
+ g_hash_table_destroy (enclosure_urls);
tmp_string = grss_feed_item_get_title (item);
if (tmp_string != NULL) {
g_message (" Title:'%s'", tmp_string);
-
- tracker_sparql_builder_predicate (sparql, "nie:title");
- tracker_sparql_builder_object_unvalidated (sparql, tmp_string);
- }
-
- if (author != NULL) {
- tracker_sparql_builder_predicate (sparql, "nco:creator");
- tracker_sparql_builder_object (sparql, "_:author");
- }
-
- for (l = contrib_aliases; l; l = l->next) {
- tracker_sparql_builder_predicate (sparql, "nco:contributor");
- tracker_sparql_builder_object (sparql, l->data);
- }
-
- for (l = enclosure_aliases; l; l = l->next) {
- tracker_sparql_builder_predicate (sparql, "mfo:enclosureList");
- tracker_sparql_builder_object (sparql, l->data);
+ tracker_resource_set_string (resource, "nie:title", tmp_string);
}
tmp_string = grss_feed_item_get_description (item);
@@ -966,61 +829,38 @@ feed_message_create_insert_builder (TrackerMinerRSS *miner,
gchar *plain_text;
plain_text = parse_html_text (tmp_string);
- tracker_sparql_builder_predicate (sparql, "nie:plainTextContent");
- tracker_sparql_builder_object_unvalidated (sparql, plain_text);
+ tracker_resource_set_string (resource, "nie:plainTextContent", plain_text);
g_free (plain_text);
- tracker_sparql_builder_predicate (sparql, "nmo:htmlMessageContent");
- tracker_sparql_builder_object_unvalidated (sparql, tmp_string);
+ tracker_resource_set_string (resource, "nmo:htmlMessageContent", tmp_string);
}
- if (url != NULL) {
- tracker_sparql_builder_predicate (sparql, "nie:url");
- tracker_sparql_builder_object_unvalidated (sparql, url);
- }
-
- /* TODO nmo:receivedDate and mfo:downloadedTime are the same?
- * Ask for the MFO maintainer */
-
- t = time (NULL);
-
- tracker_sparql_builder_predicate (sparql, "nmo:receivedDate");
- tracker_sparql_builder_object_date (sparql, &t);
-
- tracker_sparql_builder_predicate (sparql, "mfo:downloadedTime");
- tracker_sparql_builder_object_date (sparql, &t);
+ time_str = tracker_date_to_string (time (NULL));
+ tracker_resource_set_string (resource, "nmo:receivedDate", time_str);
+ tracker_resource_set_string (resource, "mfo:downloadedTime", time_str);
+ g_free (time_str);
t = grss_feed_item_get_publish_time (item);
- tracker_sparql_builder_predicate (sparql, "nie:contentCreated");
- tracker_sparql_builder_object_date (sparql, &t);
+ time_str = tracker_date_to_string (t);
+ tracker_resource_set_string (resource, "nie:contentCreated", time_str);
+ g_free (time_str);
- tracker_sparql_builder_predicate (sparql, "nmo:isRead");
- tracker_sparql_builder_object_boolean (sparql, FALSE);
+ tracker_resource_set_boolean (resource, "nmo:isRead", FALSE);
uri = g_object_get_data (G_OBJECT (channel), "subject");
- tracker_sparql_builder_predicate (sparql, "nmo:communicationChannel");
- tracker_sparql_builder_object_iri (sparql, uri);
+ tracker_resource_add_uri (resource, "nmo:communicationChannel", uri);
tmp_string = grss_feed_item_get_copyright (item);
if (tmp_string) {
- tracker_sparql_builder_predicate (sparql, "nie:copyright");
- tracker_sparql_builder_object_unvalidated (sparql, tmp_string);
+ tracker_resource_set_string (resource, "nie:copyright", tmp_string);
}
list = grss_feed_item_get_categories (item);
for (l = list; l; l = l->next) {
- tracker_sparql_builder_predicate (sparql, "nie:keyword");
- tracker_sparql_builder_object_unvalidated (sparql, l->data);
+ tracker_resource_add_string (resource, "nie:keyword", l->data);
}
- tracker_sparql_builder_insert_close (sparql);
-
- g_list_free_full (contrib_aliases, g_free);
- g_list_free_full (enclosure_aliases, g_free);
- g_hash_table_destroy (websites);
- g_hash_table_destroy (enclosure_urls);
-
- return sparql;
+ return resource;
}
static void
@@ -1064,7 +904,7 @@ check_feed_items_cb (GObject *source_object,
gpointer user_data)
{
TrackerSparqlConnection *connection;
- TrackerSparqlBuilder *sparql;
+ TrackerResource *resource;
FeedItemListInsertData *data;
TrackerSparqlCursor *cursor;
GrssFeedItem *item;
@@ -1100,11 +940,11 @@ check_feed_items_cb (GObject *source_object,
g_ptr_array_add (array, feed_message_create_delete_properties_query (urn));
- sparql = feed_message_create_insert_builder (data->miner,
- item, urn);
- str = tracker_sparql_builder_get_result (sparql);
+ resource = feed_message_create_resource (data->miner,
+ item, urn);
+ str = tracker_resource_print_sparql_update (resource, NULL, TRACKER_OWN_GRAPH_URN);
g_ptr_array_add (array, g_strdup (str));
- g_object_unref (sparql);
+ g_object_unref (resource);
}
g_hash_table_remove (data->items, url);
@@ -1126,11 +966,11 @@ check_feed_items_cb (GObject *source_object,
/* Insert all remaining items as new */
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &item)) {
- sparql = feed_message_create_insert_builder (data->miner,
- item, NULL);
- str = tracker_sparql_builder_get_result (sparql);
+ resource = feed_message_create_resource (data->miner,
+ item, NULL);
+ str = tracker_resource_print_sparql_update (resource, NULL, TRACKER_OWN_GRAPH_URN);
g_ptr_array_add (array, g_strdup (str));
- g_object_unref (sparql);
+ g_object_unref (resource);
}
if (array->len == 0) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]