static gboolean get_file_metadata (TrackerExtractTask *task, TrackerExtractInfo **info_out) { TrackerExtractInfo *info; GFile *file; gchar *mime_used = NULL; gint items = 0; *info_out = NULL; file = g_file_new_for_uri (task->file); info = tracker_extract_info_new (file, task->mimetype, task->graph); g_object_unref (file); if (task->mimetype && *task->mimetype) { /* We know the mime */ mime_used = g_strdup (task->mimetype); } else { tracker_extract_info_unref (info); return FALSE; } /* Now we have sanity checked everything, actually get the * data we need from the extractors. */ if (mime_used) { if (task->cur_func) { TrackerSparqlBuilder *statements; g_debug ("Using %s...", g_module_name (task->cur_module)); (task->cur_func) (info); statements = tracker_extract_info_get_metadata_builder (info); items = tracker_sparql_builder_get_length (statements); if (items > 0) { tracker_sparql_builder_insert_close (statements); task->success = TRUE; } } g_free (mime_used); } g_debug ("Done (%d objects added)\n", items); if (items == 0) { tracker_extract_info_unref (info); info = NULL; } *info_out = info; return (items > 0); }
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); }
static gboolean get_file_metadata (TrackerExtractTask *task, TrackerExtractInfo **info_out) { TrackerExtractInfo *info; GFile *file; gchar *mime_used = NULL; #ifdef HAVE_LIBSTREAMANALYZER gchar *content_type = NULL; #endif gint items = 0; g_debug ("Extracting..."); *info_out = NULL; file = g_file_new_for_uri (task->file); info = tracker_extract_info_new (file, task->mimetype, task->graph); g_object_unref (file); #ifdef HAVE_LIBSTREAMANALYZER /* FIXME: This entire section is completely broken, * it doesn't even build these days. It should be removed or fixed. * -mr (05/09/11) */ if (!priv->force_internal_extractors) { g_debug (" Using libstreamanalyzer..."); tracker_topanalyzer_extract (task->file, statements, &content_type); if (tracker_sparql_builder_get_length (statements) > 0) { g_free (content_type); tracker_sparql_builder_insert_close (statements); *info_out = info; return TRUE; } } else { g_debug (" Using internal extractors ONLY..."); } #endif /* HAVE_LIBSTREAMANALYZER */ if (task->mimetype && *task->mimetype) { /* We know the mime */ mime_used = g_strdup (task->mimetype); } #ifdef HAVE_LIBSTREAMANALYZER else if (content_type && *content_type) { /* We know the mime from LSA */ mime_used = content_type; g_strstrip (mime_used); } #endif /* HAVE_LIBSTREAMANALYZER */ else { tracker_extract_info_unref (info); return FALSE; } /* Now we have sanity checked everything, actually get the * data we need from the extractors. */ if (mime_used) { if (task->cur_func) { TrackerSparqlBuilder *statements; g_debug (" Using %s...", g_module_name (task->cur_module)); (task->cur_func) (info); statements = tracker_extract_info_get_metadata_builder (info); items = tracker_sparql_builder_get_length (statements); if (items > 0) { tracker_sparql_builder_insert_close (statements); g_debug ("Done (%d items)", items); task->success = TRUE; } } g_free (mime_used); } if (items == 0) { g_debug ("No extractor or failed"); tracker_extract_info_unref (info); info = NULL; } *info_out = info; return (items > 0); }