static void decorator_cache_next_items (TrackerDecorator *decorator) { TrackerDecoratorPrivate *priv = decorator->priv; if (priv->querying || g_hash_table_size (priv->tasks) > 0 || !g_queue_is_empty (&priv->item_cache)) return; priv->querying = TRUE; if (priv->n_remaining_items == 0) { decorator_query_remaining_items (decorator); } else { TrackerSparqlConnection *sparql_conn; gchar *query; sparql_conn = tracker_miner_get_connection (TRACKER_MINER (decorator)); query = create_remaining_items_query (decorator); tracker_sparql_connection_query_async (sparql_conn, query, NULL, decorator_cache_items_cb, decorator); g_free (query); } }
static void decorator_query_remaining_items (TrackerDecorator *decorator) { gchar *query, *clauses[] = { "COUNT(?urn)", NULL }; TrackerSparqlConnection *sparql_conn; query = create_query_string (decorator, clauses, FALSE); if (query) { sparql_conn = tracker_miner_get_connection (TRACKER_MINER (decorator)); tracker_sparql_connection_query_async (sparql_conn, query, NULL, decorator_query_remaining_items_cb, decorator); g_free (query); } else { decorator_notify_empty (decorator); } }
static gboolean decorator_commit_info (TrackerDecorator *decorator) { TrackerSparqlConnection *sparql_conn; TrackerDecoratorPrivate *priv; GPtrArray *array; gint i; priv = decorator->priv; if (!priv->sparql_buffer || priv->sparql_buffer->len == 0) return FALSE; if (priv->commit_buffer) return FALSE; /* Move sparql buffer to commit buffer */ priv->commit_buffer = priv->sparql_buffer; priv->sparql_buffer = NULL; array = g_ptr_array_new (); for (i = 0; i < priv->commit_buffer->len; i++) { SparqlUpdate *update; update = &g_array_index (priv->commit_buffer, SparqlUpdate, i); g_ptr_array_add (array, update->sparql); } sparql_conn = tracker_miner_get_connection (TRACKER_MINER (decorator)); tracker_sparql_connection_update_array_async (sparql_conn, (gchar **) array->pdata, array->len, G_PRIORITY_DEFAULT, NULL, decorator_commit_cb, decorator); decorator_update_state (decorator, NULL, TRUE); g_ptr_array_unref (array); return TRUE; }
/* If a reset is requested, we will remove from the store all items previously * inserted by the tracker-miner-applications, this is: * (a) all elements which are nfo:softwareIcon of a given nfo:Software * (b) all nfo:Software in our graph (includes both applications and maemo applets) * (c) all elements which are nfo:softwareCategoryIcon of a given nfo:SoftwareCategory * (d) all nfo:SoftwareCategory in our graph */ static void miner_applications_reset (TrackerMiner *miner) { GError *error = NULL; TrackerSparqlBuilder *sparql; sparql = tracker_sparql_builder_new_update (); /* (a) all elements which are nfo:softwareIcon of a given nfo:Software */ tracker_sparql_builder_delete_open (sparql, TRACKER_OWN_GRAPH_URN); tracker_sparql_builder_subject_variable (sparql, "icon"); tracker_sparql_builder_predicate (sparql, "a"); tracker_sparql_builder_object (sparql, "rdfs:Resource"); tracker_sparql_builder_delete_close (sparql); tracker_sparql_builder_where_open (sparql); tracker_sparql_builder_subject_variable (sparql, "software"); tracker_sparql_builder_predicate (sparql, "a"); tracker_sparql_builder_object (sparql, "nfo:Software"); tracker_sparql_builder_subject_variable (sparql, "icon"); tracker_sparql_builder_predicate (sparql, "nfo:softwareIcon"); tracker_sparql_builder_object_variable (sparql, "software"); tracker_sparql_builder_where_close (sparql); /* (b) all nfo:Software in our graph (includes both applications and maemo applets) */ tracker_sparql_builder_delete_open (sparql, TRACKER_OWN_GRAPH_URN); tracker_sparql_builder_subject_variable (sparql, "software"); tracker_sparql_builder_predicate (sparql, "a"); tracker_sparql_builder_object (sparql, "rdfs:Resource"); tracker_sparql_builder_delete_close (sparql); tracker_sparql_builder_where_open (sparql); tracker_sparql_builder_subject_variable (sparql, "software"); tracker_sparql_builder_predicate (sparql, "a"); tracker_sparql_builder_object (sparql, "nfo:Software"); tracker_sparql_builder_where_close (sparql); /* (c) all elements which are nfo:softwareCategoryIcon of a given nfo:SoftwareCategory */ tracker_sparql_builder_delete_open (sparql, TRACKER_OWN_GRAPH_URN); tracker_sparql_builder_subject_variable (sparql, "icon"); tracker_sparql_builder_predicate (sparql, "a"); tracker_sparql_builder_object (sparql, "rdfs:Resource"); tracker_sparql_builder_delete_close (sparql); tracker_sparql_builder_where_open (sparql); tracker_sparql_builder_subject_variable (sparql, "category"); tracker_sparql_builder_predicate (sparql, "a"); tracker_sparql_builder_object (sparql, "nfo:SoftwareCategory"); tracker_sparql_builder_subject_variable (sparql, "icon"); tracker_sparql_builder_predicate (sparql, "nfo:softwareCategoryIcon"); tracker_sparql_builder_object_variable (sparql, "category"); tracker_sparql_builder_where_close (sparql); /* (d) all nfo:SoftwareCategory in our graph */ tracker_sparql_builder_delete_open (sparql, TRACKER_OWN_GRAPH_URN); tracker_sparql_builder_subject_variable (sparql, "category"); tracker_sparql_builder_predicate (sparql, "a"); tracker_sparql_builder_object (sparql, "rdfs:Resource"); tracker_sparql_builder_delete_close (sparql); tracker_sparql_builder_where_open (sparql); tracker_sparql_builder_subject_variable (sparql, "category"); tracker_sparql_builder_predicate (sparql, "a"); tracker_sparql_builder_object (sparql, "nfo:SoftwareCategory"); tracker_sparql_builder_where_close (sparql); /* Execute a sync update, we don't want the apps miner to start before * we finish this. */ tracker_sparql_connection_update (tracker_miner_get_connection (miner), tracker_sparql_builder_get_result (sparql), G_PRIORITY_HIGH, NULL, &error); if (error) { /* Some error happened performing the query, not good */ g_critical ("Couldn't reset mined applications: %s", error ? error->message : "unknown error"); g_error_free (error); } g_object_unref (sparql); }