/* This function is called after the caller has completed the * GTask given on the TrackerDecoratorInfo, this definitely removes * the element being processed from queues. */ static void decorator_task_done (GObject *object, GAsyncResult *result, gpointer user_data) { TrackerDecorator *decorator = TRACKER_DECORATOR (object); TrackerDecoratorInfo *info = user_data; TrackerDecoratorPrivate *priv; GError *error = NULL; priv = decorator->priv; if (!g_task_propagate_boolean (G_TASK (result), &error)) { /* Blacklist item */ decorator_blacklist_add (decorator, info->id); if (error) { g_warning ("Task for '%s' finished with error: %s\n", info->url, error->message); g_error_free (error); } } else { TrackerSparqlBuilder *sparql; SparqlUpdate update; /* Add resulting sparql to buffer and check whether flushing */ sparql = g_task_get_task_data (G_TASK (result)); update.sparql = g_strdup (tracker_sparql_builder_get_result (sparql)); update.id = info->id; if (!priv->sparql_buffer) priv->sparql_buffer = sparql_buffer_new (); g_array_append_val (priv->sparql_buffer, update); } g_hash_table_remove (priv->tasks, result); if (priv->n_remaining_items > 0) priv->n_remaining_items--; priv->n_processed_items++; decorator_check_commit (decorator); if (priv->n_remaining_items == 0) { decorator_finish (decorator); decorator_rebuild_cache (decorator); } else if (g_queue_is_empty (&priv->item_cache) && g_hash_table_size (priv->tasks) == 0 && (!priv->sparql_buffer || !priv->commit_buffer)) { decorator_cache_next_items (decorator); } }
static void feed_removed (FeedSettings *setts, gchar *id, TrackerSparqlConnection *tracker_client) { TrackerSparqlBuilder *sparql; sparql = tracker_sparql_builder_new_update (); tracker_sparql_builder_delete_open (sparql, NULL); tracker_sparql_builder_subject_iri (sparql, id); 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_iri (sparql, id); tracker_sparql_builder_predicate (sparql, "a"); tracker_sparql_builder_object (sparql, "rdfs:Resource"); tracker_sparql_builder_where_close (sparql); tracker_sparql_connection_update (tracker_client, tracker_sparql_builder_get_result (sparql), 0, NULL, NULL); g_object_unref (sparql); }
/* 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); }
void tracker_extract_get_metadata_by_cmdline (TrackerExtract *object, const gchar *uri, const gchar *mime) { GError *error = NULL; TrackerExtractPrivate *priv; TrackerExtractTask *task; TrackerExtractInfo *info; gboolean no_modules = TRUE; priv = TRACKER_EXTRACT_GET_PRIVATE (object); priv->disable_summary_on_finalize = TRUE; g_return_if_fail (uri != NULL); task = extract_task_new (object, uri, mime, NULL, NULL, NULL, &error); if (error) { g_printerr ("Extraction failed, %s\n", error->message); g_error_free (error); return; } task->mimetype_handlers = tracker_extract_module_manager_get_mimetype_handlers (task->mimetype); task->cur_module = tracker_mimetype_info_get_module (task->mimetype_handlers, &task->cur_func, NULL); while (task->cur_module && task->cur_func) { if (!filter_module (object, task->cur_module) && get_file_metadata (task, &info)) { const gchar *preupdate_str, *postupdate_str, *statements_str, *where; TrackerSparqlBuilder *builder; no_modules = FALSE; preupdate_str = statements_str = postupdate_str = NULL; builder = tracker_extract_info_get_metadata_builder (info); if (tracker_sparql_builder_get_length (builder) > 0) { statements_str = tracker_sparql_builder_get_result (builder); } builder = tracker_extract_info_get_preupdate_builder (info); if (tracker_sparql_builder_get_length (builder) > 0) { preupdate_str = tracker_sparql_builder_get_result (builder); } builder = tracker_extract_info_get_postupdate_builder (info); if (tracker_sparql_builder_get_length (builder) > 0) { postupdate_str = tracker_sparql_builder_get_result (builder); } where = tracker_extract_info_get_where_clause (info); g_print ("\n"); g_print ("SPARQL pre-update:\n--\n%s--\n\n", preupdate_str ? preupdate_str : ""); g_print ("SPARQL item:\n--\n%s--\n\n", statements_str ? statements_str : ""); g_print ("SPARQL where clause:\n--\n%s--\n\n", where ? where : ""); g_print ("SPARQL post-update:\n--\n%s--\n\n", postupdate_str ? postupdate_str : ""); tracker_extract_info_unref (info); break; } else { if (!tracker_mimetype_info_iter_next (task->mimetype_handlers)) { break; } task->cur_module = tracker_mimetype_info_get_module (task->mimetype_handlers, &task->cur_func, NULL); } } if (no_modules) { g_print ("No modules found to handle metadata extraction\n\n"); } extract_task_free (task); }