[tracker/extractor-dev: 1/2] libtracker-extract: Added example to examples/libtracker-extract



commit 43e2c9b4ef1b1541661fc8db1ee7410a2af9d658
Author: Martyn Russell <martyn lanedo com>
Date:   Mon Mar 8 16:27:44 2010 +0000

    libtracker-extract: Added example to examples/libtracker-extract
    
    Moved mockup from src/tracker-extract/ to here.
    Used MP3 source and added comments to detail what is going on

 configure.ac                                       |    1 +
 .../libtracker-client-sections.txt                 |    2 +
 .../libtracker-common-sections.txt                 |    2 -
 examples/Makefile.am                               |    1 +
 examples/libtracker-extract/Makefile.am            |   23 ++
 .../libtracker-extract/tracker-extract-mockup.c    |  345 ++++++++++++++++++++
 src/libtracker-client/tracker.c                    |  236 +++++++++++++-
 src/libtracker-client/tracker.h                    |    5 +
 src/libtracker-common/tracker-common.h             |   16 +-
 src/libtracker-common/tracker-utils.c              |  198 -----------
 src/libtracker-common/tracker-utils.h              |    4 -
 src/plugins/kmail/tracker-kmail-registrar.c        |    5 +-
 src/tracker-extract/Makefile.am                    |   16 -
 src/tracker-extract/tracker-extract-gstreamer.c    |    7 +-
 src/tracker-extract/tracker-extract-mockup.c       |   95 ------
 src/tracker-extract/tracker-extract-mp3.c          |    7 +-
 16 files changed, 625 insertions(+), 338 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index e797e47..37d47ac 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1702,6 +1702,7 @@ AC_CONFIG_FILES([
 	utils/tracker-fts/Makefile
         utils/services/Makefile
 	examples/Makefile
+        examples/libtracker-extract/Makefile
         examples/libtracker-miner/Makefile
 	examples/rss-reader/Makefile
 ])
diff --git a/docs/reference/libtracker-client/libtracker-client-sections.txt b/docs/reference/libtracker-client/libtracker-client-sections.txt
index a337ea1..7e33943 100644
--- a/docs/reference/libtracker-client/libtracker-client-sections.txt
+++ b/docs/reference/libtracker-client/libtracker-client-sections.txt
@@ -30,6 +30,8 @@ tracker_cancel_last_call
 <FILE>tracker_misc</FILE>
 <TITLE>Utilities</TITLE>
 tracker_sparql_escape
+tracker_uri_printf_escaped
+tracker_uri_vprintf_escaped
 </SECTION>
 
 <SECTION>
diff --git a/docs/reference/libtracker-common/libtracker-common-sections.txt b/docs/reference/libtracker-common/libtracker-common-sections.txt
index 930b639..9244f82 100644
--- a/docs/reference/libtracker-common/libtracker-common-sections.txt
+++ b/docs/reference/libtracker-common/libtracker-common-sections.txt
@@ -395,8 +395,6 @@ tracker_string_replace
 tracker_string_remove
 tracker_seconds_estimate_to_string
 tracker_seconds_to_string
-tracker_uri_vprintf_escaped
-tracker_uri_printf_escaped
 </SECTION>
 
 <SECTION>
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 44c1e3f..41a8a67 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,5 +1,6 @@
 include $(top_srcdir)/Makefile.decl
 
 SUBDIRS = 			\
+	libtracker-extract	\
 	libtracker-miner	\
 	rss-reader
diff --git a/examples/libtracker-extract/Makefile.am b/examples/libtracker-extract/Makefile.am
new file mode 100644
index 0000000..eb6987d
--- /dev/null
+++ b/examples/libtracker-extract/Makefile.am
@@ -0,0 +1,23 @@
+include $(top_srcdir)/Makefile.decl
+
+module_flags = -module -avoid-version -no-undefined
+modulesdir = $(libdir)/tracker-$(TRACKER_API_VERSION)/extract-modules
+
+INCLUDES = 								\
+	-DLOCALEDIR=\""$(localedir)"\" 					\
+	-DMODULESDIR=\"$(modulesdir)\"					\
+	-I$(top_srcdir)/src 						\
+	$(WARN_CFLAGS)							\
+	$(GLIB2_CFLAGS)							\
+	$(GCOV_CFLAGS)
+
+modules_LTLIBRARIES = libextract-mockup.la
+
+libextract_mockup_la_SOURCES = tracker-extract-mockup.c
+libextract_mockup_la_LDFLAGS = $(module_flags)
+libextract_mockup_la_LIBADD = 						\
+	$(top_builddir)/src/libtracker-extract/libtracker-extract- TRACKER_API_VERSION@.la \
+	$(top_builddir)/src/libtracker-common/libtracker-common.la	\
+	$(GLIB2_LIBS)  							\
+	$(GCOV_LIBS)
+
diff --git a/examples/libtracker-extract/tracker-extract-mockup.c b/examples/libtracker-extract/tracker-extract-mockup.c
new file mode 100644
index 0000000..03879cc
--- /dev/null
+++ b/examples/libtracker-extract/tracker-extract-mockup.c
@@ -0,0 +1,345 @@
+/*
+ * Copyright (C) 2010, Your name <Your email address>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <stdio.h>
+
+/* TODO: Include any 3rd party libraries here. */
+
+/* #include <libtracker-common/tracker-file-utils.h> */
+/* #include <libtracker-common/tracker-utils.h> */
+
+#include <gio/gio.h>
+
+#include <libtracker-extract/tracker-extract.h>
+#include <libtracker-extract/tracker-utils.h>
+
+#include <libtracker-client/tracker.h>
+
+static void extract_mockup (const gchar          *uri,
+                            TrackerSparqlBuilder *preupdate,
+                            TrackerSparqlBuilder *metadata);
+
+static TrackerExtractData data[] = {
+	/* TODO: Insert mime types and functions here. */
+	{ "audio/mpeg",  extract_mockup },
+	{ "audio/x-mp3", extract_mockup },
+	{ NULL, NULL }
+};
+
+static void
+extract_mockup (const gchar          *uri,
+                TrackerSparqlBuilder *preupdate,
+                TrackerSparqlBuilder *metadata)
+{
+	/* File information */
+	FILE *f;
+	GFileInfo *info;
+	GFile *file;
+	GError *error = NULL;
+	gchar *filename;
+	goffset size;
+
+	/* Data input */
+	gchar *title_tagv1;
+	gchar *title_tagv2;
+	gchar *title_tagv3;
+	gchar *title_unknown;
+	gchar *lyricist_tagv2;
+	gchar *lyricist_unknown;
+
+	/* Coalesced input */
+	gchar *title;
+	gchar *performer;
+	gchar *performer_uri;
+	gchar *lyricist;
+	gchar *lyricist_uri;
+	gchar *album;
+	gchar *album_uri;
+	gchar *genre;
+	gchar *text;
+	gchar *recording_time;
+	gchar *copyright;
+	gchar *publisher;
+	gchar *comment;
+	gchar *composer;
+	gchar *composer_uri;
+	gint track_number;
+	gint track_count;
+	guint32 duration;
+
+	filename = g_filename_from_uri (uri, NULL, NULL);
+
+	file = g_file_new_for_path (filename);
+	info = g_file_query_info (file,
+	                          G_FILE_ATTRIBUTE_STANDARD_SIZE,
+	                          G_FILE_QUERY_INFO_NONE,
+	                          NULL,
+	                          &error);
+
+	if (G_UNLIKELY (error)) {
+		g_message ("Could not get size for '%s', %s",
+		           filename,
+		           error->message);
+		g_error_free (error);
+		size = 0;
+	} else {
+		size = g_file_info_get_size (info);
+		g_object_unref (info);
+	}
+
+	g_object_unref (file);
+
+	/* TODO: Do any pre-checks on the file
+	 * (i.e check file size so we don't handle files of 0 size)
+	 */
+	if (size < 64) {
+		g_free (filename);
+		return;
+	}
+
+	/* TODO: Open file */
+	f = fopen (filename, "r");
+
+	if (!f) {
+		g_free (filename);
+		return;
+	}
+	
+	/* TODO: Get data from file.
+	 *
+	 * (We will use dummy data for this example)
+	 */
+	title_tagv1 = NULL;
+	title_tagv2 = g_strdup ("Burn The Witch");
+	title_tagv3 = g_strdup ("");
+	title_unknown = g_strdup ("Unknown");
+
+	lyricist_tagv2 = g_strdup ("Someone");
+	lyricist_unknown = g_strdup ("Someone");
+
+	/* TODO: Close file */
+	fclose (f);
+
+	/* TODO: Make sure we coalesce duplicate values */
+	title = tracker_extract_coalesce (4, title_tagv1, title_tagv2, title_tagv3, title_unknown);
+	lyricist = tracker_extract_coalesce (2, lyricist_tagv2, lyricist_unknown);
+
+	performer = g_strdup ("Stone Gods");
+	composer = NULL;
+	album = g_strdup ("Silver Spoons And Broken Bones");
+	genre = g_strdup ("Rock");
+	recording_time = NULL;
+	publisher = NULL;
+	text = g_strdup ("Some description");
+	copyright = g_strdup ("Who knows?");
+	comment = g_strdup ("I love this track");
+	track_number = 1;
+	track_count = 12;
+	duration = 32;
+
+	/* TODO: Do any pre-updates
+	 *
+	 * (This involves creating any database nodes for consistent
+	 *  data objects, for example, an artist which might be used n times)
+	 */
+	if (performer) {
+		performer_uri = tracker_uri_printf_escaped ("urn:artist:%s", performer);
+
+		tracker_sparql_builder_insert_open (preupdate, NULL);
+		tracker_sparql_builder_subject_iri (preupdate, performer_uri);
+		tracker_sparql_builder_predicate (preupdate, "a");
+		tracker_sparql_builder_object (preupdate, "nmm:Artist");
+		tracker_sparql_builder_predicate (preupdate, "nmm:artistName");
+		tracker_sparql_builder_object_unvalidated (preupdate, performer);
+		tracker_sparql_builder_insert_close (preupdate);
+	} else {
+		performer_uri = NULL;
+	}
+
+	if (composer) {
+		composer_uri = tracker_uri_printf_escaped ("urn:artist:%s", composer);
+
+		tracker_sparql_builder_insert_open (preupdate, NULL);
+		tracker_sparql_builder_subject_iri (preupdate, composer_uri);
+		tracker_sparql_builder_predicate (preupdate, "a");
+		tracker_sparql_builder_object (preupdate, "nmm:Artist");
+		tracker_sparql_builder_predicate (preupdate, "nmm:artistName");
+		tracker_sparql_builder_object_unvalidated (preupdate, composer);
+		tracker_sparql_builder_insert_close (preupdate);
+	} else {
+		composer_uri = NULL;
+	}
+
+	if (lyricist) {
+		lyricist_uri = tracker_uri_printf_escaped ("urn:artist:%s", lyricist);
+
+		tracker_sparql_builder_insert_open (preupdate, NULL);
+		tracker_sparql_builder_subject_iri (preupdate, lyricist_uri);
+		tracker_sparql_builder_predicate (preupdate, "a");
+		tracker_sparql_builder_object (preupdate, "nmm:Artist");
+		tracker_sparql_builder_predicate (preupdate, "nmm:artistName");
+		tracker_sparql_builder_object_unvalidated (preupdate, lyricist);
+		tracker_sparql_builder_insert_close (preupdate);
+	} else {
+		lyricist_uri = NULL;
+	}
+
+	if (album) {
+		album_uri = tracker_uri_printf_escaped ("urn:album:%s", album);
+
+		tracker_sparql_builder_insert_open (preupdate, NULL);
+		tracker_sparql_builder_subject_iri (preupdate, album_uri);
+		tracker_sparql_builder_predicate (preupdate, "a");
+		tracker_sparql_builder_object (preupdate, "nmm:MusicAlbum");
+		tracker_sparql_builder_predicate (preupdate, "nmm:albumTitle");
+		tracker_sparql_builder_object_unvalidated (preupdate, album);
+		tracker_sparql_builder_insert_close (preupdate);
+
+		if (track_count > 0) {
+			tracker_sparql_builder_delete_open (preupdate, NULL);
+			tracker_sparql_builder_subject_iri (preupdate, album_uri);
+			tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
+			tracker_sparql_builder_object_variable (preupdate, "unknown");
+			tracker_sparql_builder_delete_close (preupdate);
+
+			tracker_sparql_builder_where_open (preupdate);
+			tracker_sparql_builder_subject_iri (preupdate, album_uri);
+			tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
+			tracker_sparql_builder_object_variable (preupdate, "unknown");
+			tracker_sparql_builder_where_close (preupdate);
+
+			tracker_sparql_builder_insert_open (preupdate, NULL);
+			tracker_sparql_builder_subject_iri (preupdate, album_uri);
+			tracker_sparql_builder_predicate (preupdate, "nmm:albumTrackCount");
+			tracker_sparql_builder_object_int64 (preupdate, track_count);
+			tracker_sparql_builder_insert_close (preupdate);
+		}
+	} else {
+		album_uri = NULL;
+	}
+
+	/* TODO: Do any metadata updates
+	 *
+	 * (This is where you can use entities created in the
+	 *  pre-updates part, like an artist).
+	 */
+	tracker_sparql_builder_predicate (metadata, "a");
+	tracker_sparql_builder_object (metadata, "nmm:MusicPiece");
+	tracker_sparql_builder_object (metadata, "nfo:Audio");
+
+	if (title) {
+		tracker_sparql_builder_predicate (metadata, "nie:title");
+		tracker_sparql_builder_object_unvalidated (metadata, title);
+		g_free (title);
+	}
+
+	if (lyricist_uri) {
+		tracker_sparql_builder_predicate (metadata, "nmm:lyricist");
+		tracker_sparql_builder_object_iri (metadata, lyricist_uri);
+		g_free (lyricist_uri);
+	}
+
+	if (performer_uri) {
+		tracker_sparql_builder_predicate (metadata, "nmm:performer");
+		tracker_sparql_builder_object_iri (metadata, performer_uri);
+		g_free (performer_uri);
+	}
+
+	if (composer_uri) {
+		tracker_sparql_builder_predicate (metadata, "nmm:composer");
+		tracker_sparql_builder_object_iri (metadata, composer_uri);
+		g_free (composer_uri);
+	}
+
+	if (album_uri) {
+		tracker_sparql_builder_predicate (metadata, "nmm:musicAlbum");
+		tracker_sparql_builder_object_iri (metadata, album_uri);
+		g_free (album_uri);
+	}
+
+	if (recording_time) {
+		tracker_sparql_builder_predicate (metadata, "nie:contentCreated");
+		tracker_sparql_builder_object_unvalidated (metadata, recording_time);
+		g_free (recording_time);
+	}
+
+	if (genre) {
+		tracker_sparql_builder_predicate (metadata, "nfo:genre");
+		tracker_sparql_builder_object_unvalidated (metadata, genre);
+		g_free (genre);
+	}
+
+	if (copyright) {
+		tracker_sparql_builder_predicate (metadata, "nie:copyright");
+		tracker_sparql_builder_object_unvalidated (metadata, copyright);
+		g_free (copyright);
+	}
+
+	if (comment) {
+		tracker_sparql_builder_predicate (metadata, "nie:comment");
+		tracker_sparql_builder_object_unvalidated (metadata, comment);
+		g_free (comment);
+	}
+
+	if (publisher) {
+		tracker_sparql_builder_predicate (metadata, "nco:publisher");
+		tracker_sparql_builder_object_blank_open (metadata);
+		tracker_sparql_builder_predicate (metadata, "a");
+		tracker_sparql_builder_object (metadata, "nco:Contact");
+		tracker_sparql_builder_predicate (metadata, "nco:fullname");
+		tracker_sparql_builder_object_unvalidated (metadata, publisher);
+		tracker_sparql_builder_object_blank_close (metadata);
+		g_free (publisher);
+	}
+
+	if (track_number > 0) {
+		tracker_sparql_builder_predicate (metadata, "nmm:trackNumber");
+		tracker_sparql_builder_object_int64 (metadata, track_number);
+	}
+
+	if (duration > 0) {
+		tracker_sparql_builder_predicate (metadata, "nfo:duration");
+		tracker_sparql_builder_object_int64 (metadata, duration);
+	}
+
+	if (text) {
+		/* NOTE: This is for Full Text Search (FTS) indexing content */
+		tracker_sparql_builder_predicate (metadata, "nie:plainTextContent");
+		tracker_sparql_builder_object_unvalidated (metadata, text);
+		g_free (text);
+	}
+
+	/* TODO: Clean up */
+	g_free (album);
+	g_free (composer);
+	g_free (performer);
+	g_free (filename);
+}
+
+TrackerExtractData *
+tracker_extract_get_data (void)
+{
+	/* NOTE: This function has to exist, tracker-extract checks
+	 * the symbole table for this function and if it doesn't
+	 * exist, the module is not loaded to be used as an extractor.
+	 */
+	return data;
+}
diff --git a/src/libtracker-client/tracker.c b/src/libtracker-client/tracker.c
index c2ad45e..c522231 100644
--- a/src/libtracker-client/tracker.c
+++ b/src/libtracker-client/tracker.c
@@ -488,9 +488,9 @@ is_service_available (void)
 gchar *
 tracker_sparql_escape (const gchar *str)
 {
-	gchar       *escaped_string;
+	gchar  *escaped_string;
 	const gchar *p;
-	gchar       *q;
+	gchar *q;
 
 	g_return_val_if_fail (str != NULL, NULL);
 
@@ -498,6 +498,7 @@ tracker_sparql_escape (const gchar *str)
 
 	p = str;
 	q = escaped_string;
+
 	while (*p != '\0') {
 		switch (*p) {
 		case '\t':
@@ -539,6 +540,237 @@ tracker_sparql_escape (const gchar *str)
 	return escaped_string;
 }
 
+static const char *
+find_conversion (const char  *format,
+                 const char **after)
+{
+	const char *start = format;
+	const char *cp;
+
+	while (*start != '\0' && *start != '%')
+		start++;
+
+	if (*start == '\0') {
+		*after = start;
+		return NULL;
+	}
+
+	cp = start + 1;
+
+	if (*cp == '\0') {
+		*after = cp;
+		return NULL;
+	}
+
+	/* Test for positional argument.  */
+	if (*cp >= '0' && *cp <= '9') {
+		const char *np;
+
+		for (np = cp; *np >= '0' && *np <= '9'; np++)
+			;
+		if (*np == '$')
+			cp = np + 1;
+	}
+
+	/* Skip the flags.  */
+	for (;;) {
+		if (*cp == '\'' ||
+		    *cp == '-' ||
+		    *cp == '+' ||
+		    *cp == ' ' ||
+		    *cp == '#' ||
+		    *cp == '0')
+			cp++;
+		else
+			break;
+	}
+
+	/* Skip the field width.  */
+	if (*cp == '*') {
+		cp++;
+
+		/* Test for positional argument.  */
+		if (*cp >= '0' && *cp <= '9') {
+			const char *np;
+
+			for (np = cp; *np >= '0' && *np <= '9'; np++)
+				;
+			if (*np == '$')
+				cp = np + 1;
+		}
+	} else {
+		for (; *cp >= '0' && *cp <= '9'; cp++)
+			;
+	}
+
+	/* Skip the precision.  */
+	if (*cp == '.') {
+		cp++;
+		if (*cp == '*') {
+			/* Test for positional argument.  */
+			if (*cp >= '0' && *cp <= '9') {
+				const char *np;
+
+				for (np = cp; *np >= '0' && *np <= '9'; np++)
+					;
+				if (*np == '$')
+					cp = np + 1;
+			}
+		} else {
+			for (; *cp >= '0' && *cp <= '9'; cp++)
+				;
+		}
+	}
+
+	/* Skip argument type/size specifiers.  */
+	while (*cp == 'h' ||
+	       *cp == 'L' ||
+	       *cp == 'l' ||
+	       *cp == 'j' ||
+	       *cp == 'z' ||
+	       *cp == 'Z' ||
+	       *cp == 't')
+		cp++;
+
+	/* Skip the conversion character.  */
+	cp++;
+
+	*after = cp;
+	return start;
+}
+
+/**
+ * tracker_uri_vprintf_escaped:
+ * @format: a standard printf() format string, but notice
+ *     <link linkend="string-precision">string precision pitfalls</link>
+ * @args: the list of parameters to insert into the format string
+ * 
+ * Similar to the standard C vsprintf() function but safer, since it 
+ * calculates the maximum space required and allocates memory to hold 
+ * the result. 
+ *
+ * The result is escaped using g_uri_escape_string().
+ *
+ * Returns: a newly-allocated string holding the result which should
+ * be freed with g_free() when finished with.
+ *
+ * Since: 0.8
+ */
+gchar *
+tracker_uri_vprintf_escaped (const gchar *format,
+                             va_list      args)
+{
+	GString *format1;
+	GString *format2;
+	GString *result = NULL;
+	gchar *output1 = NULL;
+	gchar *output2 = NULL;
+	const char *p;
+	gchar *op1, *op2;
+	va_list args2;
+
+	format1 = g_string_new (NULL);
+	format2 = g_string_new (NULL);
+	p = format;
+	while (TRUE) {
+		const char *after;
+		const char *conv = find_conversion (p, &after);
+		if (!conv)
+			break;
+
+		g_string_append_len (format1, conv, after - conv);
+		g_string_append_c (format1, 'X');
+		g_string_append_len (format2, conv, after - conv);
+		g_string_append_c (format2, 'Y');
+
+		p = after;
+	}
+
+	/* Use them to format the arguments
+	 */
+	G_VA_COPY (args2, args);
+
+	output1 = g_strdup_vprintf (format1->str, args);
+	va_end (args);
+	if (!output1)
+		goto cleanup;
+
+	output2 = g_strdup_vprintf (format2->str, args2);
+	va_end (args2);
+	if (!output2)
+		goto cleanup;
+
+	result = g_string_new (NULL);
+
+	op1 = output1;
+	op2 = output2;
+	p = format;
+	while (TRUE) {
+		const char *after;
+		const char *output_start;
+		const char *conv = find_conversion (p, &after);
+		char *escaped;
+
+		if (!conv) {
+			g_string_append_len (result, p, after - p);
+			break;
+		}
+
+		g_string_append_len (result, p, conv - p);
+		output_start = op1;
+		while (*op1 == *op2) {
+			op1++;
+			op2++;
+		}
+
+		*op1 = '\0';
+		escaped = g_uri_escape_string (output_start, NULL, FALSE);
+		g_string_append (result, escaped);
+		g_free (escaped);
+
+		p = after;
+		op1++;
+		op2++;
+	}
+
+ cleanup:
+	g_string_free (format1, TRUE);
+	g_string_free (format2, TRUE);
+	g_free (output1);
+	g_free (output2);
+
+	if (result)
+		return g_string_free (result, FALSE);
+	else
+		return NULL;
+}
+
+/**
+ * tracker_uri_printf_escaped:
+ * @format: a standard printf() format string, but notice
+ *     <link linkend="string-precision">string precision pitfalls</link>
+ * @Varargs: the parameters to insert into the format string
+ *
+ * Calls tracker_uri_vprintf_escaped() with the @Varargs supplied.
+ 
+ * Returns: a newly-allocated string holding the result which should
+ * be freed with g_free() when finished with.
+ *
+ * Since: 0.8
+ **/
+gchar *
+tracker_uri_printf_escaped (const gchar *format, ...)
+{
+	gchar *result;
+	va_list args;
+
+	va_start (args, format);
+	result = tracker_uri_vprintf_escaped (format, args);
+	va_end (args);
+
+	return result;
+}
+
 /**
  * tracker_client_new:
  * @flags: This can be one or more combinations of #TrackerClientFlags
diff --git a/src/libtracker-client/tracker.h b/src/libtracker-client/tracker.h
index 4a44815..06b7c90 100644
--- a/src/libtracker-client/tracker.h
+++ b/src/libtracker-client/tracker.h
@@ -89,8 +89,13 @@ gboolean       tracker_cancel_call                         (TrackerClient
                                                             guint                   call_id);
 gboolean       tracker_cancel_last_call                    (TrackerClient          *client);
 
+/* Utilities */
 gchar *        tracker_sparql_escape                       (const gchar            *str);
 
+gchar *        tracker_uri_vprintf_escaped                 (const gchar            *format,
+                                                            va_list                 args);
+gchar *        tracker_uri_printf_escaped                  (const gchar            *format, 
+                                                            ...);
 
 /* Synchronous API */
 GPtrArray *    tracker_statistics_get                      (TrackerClient          *client,
diff --git a/src/libtracker-common/tracker-common.h b/src/libtracker-common/tracker-common.h
index 06252f8..a1fe4dd 100644
--- a/src/libtracker-common/tracker-common.h
+++ b/src/libtracker-common/tracker-common.h
@@ -30,26 +30,20 @@ G_BEGIN_DECLS
 
 #define __LIBTRACKER_COMMON_INSIDE__
 
-/* Not installed headers */
-#if 0
-#include "tracker-dbus.h"
-#include "tracker-ioprio.h"
-#include "tracker-log.h"
-#include "tracker-os-dependant.h"
-#include "tracker-power.h"
-#include "tracker-storage.h"
-#endif
-
-/* Installed headers */
 #include "tracker-class.h"
 #include "tracker-config-file.h"
 #include "tracker-date-time.h"
+#include "tracker-dbus.h"
 #include "tracker-file-utils.h"
+#include "tracker-ioprio.h"
 #include "tracker-keyfile-object.h"
 #include "tracker-language.h"
+#include "tracker-log.h"
 #include "tracker-namespace.h"
 #include "tracker-ontology.h"
 #include "tracker-ontologies.h"
+#include "tracker-os-dependant.h"
+#include "tracker-power.h"
 #include "tracker-property.h"
 #include "tracker-type-utils.h"
 #include "tracker-utils.h"
diff --git a/src/libtracker-common/tracker-utils.c b/src/libtracker-common/tracker-utils.c
index 365c342..15f5e15 100644
--- a/src/libtracker-common/tracker-utils.c
+++ b/src/libtracker-common/tracker-utils.c
@@ -218,203 +218,5 @@ tracker_seconds_to_string (gdouble  seconds_elapsed,
 	return str;
 }
 
-static const char *
-find_conversion (const char  *format,
-                 const char **after)
-{
-	const char *start = format;
-	const char *cp;
-
-	while (*start != '\0' && *start != '%')
-		start++;
-
-	if (*start == '\0') {
-		*after = start;
-		return NULL;
-	}
-
-	cp = start + 1;
-
-	if (*cp == '\0') {
-		*after = cp;
-		return NULL;
-	}
-
-	/* Test for positional argument.  */
-	if (*cp >= '0' && *cp <= '9') {
-		const char *np;
-
-		for (np = cp; *np >= '0' && *np <= '9'; np++)
-			;
-		if (*np == '$')
-			cp = np + 1;
-	}
-
-	/* Skip the flags.  */
-	for (;;) {
-		if (*cp == '\'' ||
-		    *cp == '-' ||
-		    *cp == '+' ||
-		    *cp == ' ' ||
-		    *cp == '#' ||
-		    *cp == '0')
-			cp++;
-		else
-			break;
-	}
-
-	/* Skip the field width.  */
-	if (*cp == '*') {
-		cp++;
-
-		/* Test for positional argument.  */
-		if (*cp >= '0' && *cp <= '9') {
-			const char *np;
-
-			for (np = cp; *np >= '0' && *np <= '9'; np++)
-				;
-			if (*np == '$')
-				cp = np + 1;
-		}
-	} else {
-		for (; *cp >= '0' && *cp <= '9'; cp++)
-			;
-	}
-
-	/* Skip the precision.  */
-	if (*cp == '.') {
-		cp++;
-		if (*cp == '*') {
-			/* Test for positional argument.  */
-			if (*cp >= '0' && *cp <= '9') {
-				const char *np;
-
-				for (np = cp; *np >= '0' && *np <= '9'; np++)
-					;
-				if (*np == '$')
-					cp = np + 1;
-			}
-		} else {
-			for (; *cp >= '0' && *cp <= '9'; cp++)
-				;
-		}
-	}
-
-	/* Skip argument type/size specifiers.  */
-	while (*cp == 'h' ||
-	       *cp == 'L' ||
-	       *cp == 'l' ||
-	       *cp == 'j' ||
-	       *cp == 'z' ||
-	       *cp == 'Z' ||
-	       *cp == 't')
-		cp++;
-
-	/* Skip the conversion character.  */
-	cp++;
-
-	*after = cp;
-	return start;
-}
-
-gchar *
-tracker_uri_vprintf_escaped (const gchar *format,
-                             va_list      args)
-{
-	GString *format1;
-	GString *format2;
-	GString *result = NULL;
-	gchar *output1 = NULL;
-	gchar *output2 = NULL;
-	const char *p;
-	char       *op1, *op2;
-	va_list args2;
-
-	format1 = g_string_new (NULL);
-	format2 = g_string_new (NULL);
-	p = format;
-	while (TRUE) {
-		const char *after;
-		const char *conv = find_conversion (p, &after);
-		if (!conv)
-			break;
-
-		g_string_append_len (format1, conv, after - conv);
-		g_string_append_c (format1, 'X');
-		g_string_append_len (format2, conv, after - conv);
-		g_string_append_c (format2, 'Y');
-
-		p = after;
-	}
-
-	/* Use them to format the arguments
-	 */
-	G_VA_COPY (args2, args);
-
-	output1 = g_strdup_vprintf (format1->str, args);
-	va_end (args);
-	if (!output1)
-		goto cleanup;
-
-	output2 = g_strdup_vprintf (format2->str, args2);
-	va_end (args2);
-	if (!output2)
-		goto cleanup;
-
-	result = g_string_new (NULL);
-
-	op1 = output1;
-	op2 = output2;
-	p = format;
-	while (TRUE) {
-		const char *after;
-		const char *output_start;
-		const char *conv = find_conversion (p, &after);
-		char *escaped;
-
-		if (!conv) {
-			g_string_append_len (result, p, after - p);
-			break;
-		}
-
-		g_string_append_len (result, p, conv - p);
-		output_start = op1;
-		while (*op1 == *op2) {
-			op1++;
-			op2++;
-		}
-
-		*op1 = '\0';
-		escaped = g_uri_escape_string (output_start, NULL, FALSE);
-		g_string_append (result, escaped);
-		g_free (escaped);
-
-		p = after;
-		op1++;
-		op2++;
-	}
-
- cleanup:
-	g_string_free (format1, TRUE);
-	g_string_free (format2, TRUE);
-	g_free (output1);
-	g_free (output2);
 
-	if (result)
-		return g_string_free (result, FALSE);
-	else
-		return NULL;
-}
 
-gchar *
-tracker_uri_printf_escaped (const gchar *format, ...)
-{
-	char *result;
-	va_list args;
-
-	va_start (args, format);
-	result = tracker_uri_vprintf_escaped (format, args);
-	va_end (args);
-
-	return result;
-}
diff --git a/src/libtracker-common/tracker-utils.h b/src/libtracker-common/tracker-utils.h
index 60f4261..bc052c2 100644
--- a/src/libtracker-common/tracker-utils.h
+++ b/src/libtracker-common/tracker-utils.h
@@ -42,10 +42,6 @@ gchar *  tracker_seconds_estimate_to_string (gdouble      seconds_elapsed,
                                              guint        items_remaining);
 gchar *  tracker_seconds_to_string          (gdouble      seconds_elapsed,
                                              gboolean     short_string);
-gchar*   tracker_uri_vprintf_escaped        (const gchar *format,
-                                             va_list      args);
-gchar*   tracker_uri_printf_escaped         (const gchar *format,
-                                             ...);
 
 G_END_DECLS
 
diff --git a/src/plugins/kmail/tracker-kmail-registrar.c b/src/plugins/kmail/tracker-kmail-registrar.c
index 8291ea7..4d94fc9 100644
--- a/src/plugins/kmail/tracker-kmail-registrar.c
+++ b/src/plugins/kmail/tracker-kmail-registrar.c
@@ -27,11 +27,12 @@
 #include <glib-object.h>
 #include <dbus/dbus-glib-bindings.h>
 
+#include <libtracker-common/tracker-common.h>
+
 #include <libtracker-data/tracker-data-manager.h>
 
 #include <libtracker-client/tracker-sparql-builder.h>
-
-#include <libtracker-common/tracker-dbus.h>
+#include <libtracker-client/tracker.h>
 
 #include <tracker-store/tracker-push-registrar.h>
 #include <tracker-store/tracker-store.h>
diff --git a/src/tracker-extract/Makefile.am b/src/tracker-extract/Makefile.am
index 1f6f5d9..1bcffd9 100644
--- a/src/tracker-extract/Makefile.am
+++ b/src/tracker-extract/Makefile.am
@@ -94,11 +94,6 @@ if HAVE_TOTEM_PL_PARSER
 modules_LTLIBRARIES += libextract-playlist.la
 endif
 
-# A mockup extractor for testing purposes
-if HAVE_MOCKUP
-modules_LTLIBRARIES += libextract-mockup.la
-endif
-
 # ABW
 libextract_abw_la_SOURCES = tracker-extract-abw.c
 libextract_abw_la_LDFLAGS = $(module_flags)
@@ -274,17 +269,6 @@ libextract_tiff_la_LIBADD = 						\
 	$(GLIB2_LIBS) 							\
 	$(GCOV_LIBS)
 
-# MOCKUP
-if HAVE_MOCKUP
-libextract_mockup_la_SOURCES = tracker-extract-mockup.c
-libextract_mockup_la_LDFLAGS = $(module_flags)
-libextract_mockup_la_LIBADD = 						\
-	$(top_builddir)/src/libtracker-extract/libtracker-extract- TRACKER_API_VERSION@.la \
-	$(top_builddir)/src/libtracker-common/libtracker-common.la	\
-	$(GLIB2_LIBS)  							\
-	$(GCOV_LIBS)
-endif
-
 # Playlists using totem-pl-parser
 libextract_playlist_la_SOURCES = tracker-extract-playlist.c
 libextract_playlist_la_LDFLAGS = $(module_flags)
diff --git a/src/tracker-extract/tracker-extract-gstreamer.c b/src/tracker-extract/tracker-extract-gstreamer.c
index 7490b95..f54e968 100644
--- a/src/tracker-extract/tracker-extract-gstreamer.c
+++ b/src/tracker-extract/tracker-extract-gstreamer.c
@@ -35,10 +35,9 @@ long long int llroundl(long double x);
 #include <gst/gst.h>
 #include <gst/tag/tag.h>
 
-#include <libtracker-common/tracker-type-utils.h>
-#include <libtracker-common/tracker-file-utils.h>
-#include <libtracker-common/tracker-ontologies.h>
-#include <libtracker-common/tracker-utils.h>
+#include <libtracker-common/tracker-common.h>
+
+#include <libtracker-client/tracker.h>
 
 #include <libtracker-extract/tracker-extract.h>
 #include <libtracker-extract/tracker-utils.h>
diff --git a/src/tracker-extract/tracker-extract-mp3.c b/src/tracker-extract/tracker-extract-mp3.c
index aaf9466..dd31256 100644
--- a/src/tracker-extract/tracker-extract-mp3.c
+++ b/src/tracker-extract/tracker-extract-mp3.c
@@ -43,10 +43,9 @@
 #include <enca.h>
 #endif
 
-#include <libtracker-common/tracker-date-time.h>
-#include <libtracker-common/tracker-file-utils.h>
-#include <libtracker-common/tracker-ontologies.h>
-#include <libtracker-common/tracker-utils.h>
+#include <libtracker-common/tracker-common.h>
+
+#include <libtracker-client/tracker.h>
 
 #include <libtracker-extract/tracker-extract.h>
 #include <libtracker-extract/tracker-utils.h>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]