tracker r2895 - in trunk: . data/dbus src/tracker-extract src/tracker-indexer tests/tracker-extract



Author: mr
Date: Fri Feb  6 20:31:47 2009
New Revision: 2895
URL: http://svn.gnome.org/viewvc/tracker?rev=2895&view=rev

Log:
	* src/tracker-extract/dummy.c:
	* src/tracker-extract/tracker-extract-abw.c:
	* src/tracker-extract/tracker-extract-exif.c:
	* src/tracker-extract/tracker-extract-gstreamer-helix.c:
	* src/tracker-extract/tracker-extract-gstreamer-tagreadbin.c:
	* src/tracker-extract/tracker-extract-gstreamer.c:
	* src/tracker-extract/tracker-extract-html.c:
	* src/tracker-extract/tracker-extract-imagemagick.c:
	* src/tracker-extract/tracker-extract-jpeg.c:
	* src/tracker-extract/tracker-extract-libxine.c:
	* src/tracker-extract/tracker-extract-mp3.c: 
	* src/tracker-extract/tracker-extract-mplayer.c:
	* src/tracker-extract/tracker-extract-msoffice.c:
	* src/tracker-extract/tracker-extract-oasis.c: 
	* src/tracker-extract/tracker-extract-pdf.c: 
	* src/tracker-extract/tracker-extract-playlist.c:
	* src/tracker-extract/tracker-extract-png.c:
	* src/tracker-extract/tracker-extract-ps.c:
	* src/tracker-extract/tracker-extract-tiff.c:
	* src/tracker-extract/tracker-extract-totem.c:
	* src/tracker-extract/tracker-extract-vorbis.c:
	* src/tracker-extract/tracker-extract-xmp.c: 
	* src/tracker-extract/tracker-xmp.c: Renamed 'Extractor' to 'Extract' 

	* data/dbus/Makefile.am:
	* data/dbus/org.freedesktop.Tracker.Extract.service.in:
	* data/dbus/tracker-extract.xml:
	* src/tracker-extract/Makefile.am:
	* src/tracker-extract/tracker-extract.[ch]: New DBus object with
	introspection to request metadata for a file and mime type.

	* src/tracker-indexer/Makefile.am:
	* src/tracker-indexer/tracker-dbus.h:
	* src/tracker-indexer/tracker-module-metadata-utils.c: Call the
	new extracter over DBus.

	* tests/tracker-extract/tracker-extract-jpeg-test.c:
	* tests/tracker-extract/tracker-extract-mp3-test.c:
	* tests/tracker-extract/tracker-extract-png-test.c:
	* tests/tracker-extract/tracker-extract-test-utils.c:
	* tests/tracker-extract/tracker-extract-test-utils.h:
	* tests/tracker-extract/tracker-extract-testsuite-avi.c:
	* tests/tracker-extract/tracker-extract-testsuite-generic.[ch]:
	* tests/tracker-extract/tracker-extract-testsuite-jpeg.c:
	* tests/tracker-extract/tracker-extract-testsuite-mp3.c:
	* tests/tracker-extract/tracker-extract-testsuite-png.c:
	* tests/tracker-extract/tracker-extract-testsuite-tiff.c:
	* tests/tracker-extract/tracker-extract-tiff-test.c: Updated tests
	accordingly.


Added:
   trunk/data/dbus/org.freedesktop.Tracker.Extract.service.in
   trunk/data/dbus/tracker-extract.xml
   trunk/src/tracker-extract/tracker-extract.c
   trunk/src/tracker-extract/tracker-extract.h
Modified:
   trunk/ChangeLog
   trunk/data/dbus/Makefile.am
   trunk/src/tracker-extract/Makefile.am
   trunk/src/tracker-extract/dummy.c
   trunk/src/tracker-extract/tracker-escape.c
   trunk/src/tracker-extract/tracker-escape.h
   trunk/src/tracker-extract/tracker-extract-abw.c
   trunk/src/tracker-extract/tracker-extract-exif.c
   trunk/src/tracker-extract/tracker-extract-gstreamer-helix.c
   trunk/src/tracker-extract/tracker-extract-gstreamer-tagreadbin.c
   trunk/src/tracker-extract/tracker-extract-gstreamer.c
   trunk/src/tracker-extract/tracker-extract-html.c
   trunk/src/tracker-extract/tracker-extract-imagemagick.c
   trunk/src/tracker-extract/tracker-extract-jpeg.c
   trunk/src/tracker-extract/tracker-extract-libxine.c
   trunk/src/tracker-extract/tracker-extract-mp3.c
   trunk/src/tracker-extract/tracker-extract-mplayer.c
   trunk/src/tracker-extract/tracker-extract-msoffice.c
   trunk/src/tracker-extract/tracker-extract-oasis.c
   trunk/src/tracker-extract/tracker-extract-pdf.c
   trunk/src/tracker-extract/tracker-extract-playlist.c
   trunk/src/tracker-extract/tracker-extract-png.c
   trunk/src/tracker-extract/tracker-extract-ps.c
   trunk/src/tracker-extract/tracker-extract-tiff.c
   trunk/src/tracker-extract/tracker-extract-totem.c
   trunk/src/tracker-extract/tracker-extract-vorbis.c
   trunk/src/tracker-extract/tracker-extract-xmp.c
   trunk/src/tracker-extract/tracker-main.c
   trunk/src/tracker-extract/tracker-main.h
   trunk/src/tracker-extract/tracker-xmp.c
   trunk/src/tracker-indexer/Makefile.am
   trunk/src/tracker-indexer/tracker-dbus.h
   trunk/src/tracker-indexer/tracker-module-metadata-utils.c
   trunk/tests/tracker-extract/tracker-extract-jpeg-test.c
   trunk/tests/tracker-extract/tracker-extract-mp3-test.c
   trunk/tests/tracker-extract/tracker-extract-png-test.c
   trunk/tests/tracker-extract/tracker-extract-test-utils.c
   trunk/tests/tracker-extract/tracker-extract-test-utils.h
   trunk/tests/tracker-extract/tracker-extract-testsuite-avi.c
   trunk/tests/tracker-extract/tracker-extract-testsuite-generic.c
   trunk/tests/tracker-extract/tracker-extract-testsuite-generic.h
   trunk/tests/tracker-extract/tracker-extract-testsuite-jpeg.c
   trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.c
   trunk/tests/tracker-extract/tracker-extract-testsuite-png.c
   trunk/tests/tracker-extract/tracker-extract-testsuite-tiff.c
   trunk/tests/tracker-extract/tracker-extract-tiff-test.c

Modified: trunk/data/dbus/Makefile.am
==============================================================================
--- trunk/data/dbus/Makefile.am	(original)
+++ trunk/data/dbus/Makefile.am	Fri Feb  6 20:31:47 2009
@@ -9,13 +9,15 @@
 	tracker-metadata.xml				\
 	tracker-search.xml				\
 	tracker-xesam.xml				\
-	tracker-indexer.xml
+	tracker-indexer.xml				\
+	tracker-extract.xml
 
 # Services
 servicedir = $(DBUS_SERVICES_DIR)
 service_in_files =					\
 	org.freedesktop.Tracker.service.in		\
-	org.freedesktop.Tracker.Indexer.service.in
+	org.freedesktop.Tracker.Indexer.service.in	\
+	org.freedesktop.Tracker.Extract.service.in
 service_DATA = $(service_in_files:.service.in=.service)
 
 %.service: %.service.in

Added: trunk/data/dbus/org.freedesktop.Tracker.Extract.service.in
==============================================================================
--- (empty file)
+++ trunk/data/dbus/org.freedesktop.Tracker.Extract.service.in	Fri Feb  6 20:31:47 2009
@@ -0,0 +1,3 @@
+[D-BUS Service]
+Name=org.freedesktop.Tracker.Extract
+Exec= libexecdir@/tracker-extract

Added: trunk/data/dbus/tracker-extract.xml
==============================================================================
--- (empty file)
+++ trunk/data/dbus/tracker-extract.xml	Fri Feb  6 20:31:47 2009
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+<busconfig>
+    <policy context="default">
+      <deny send_interface="org.freedesktop.Tracker.Indexer"/>
+      <allow send_destination="org.freedesktop.Tracker"/>
+    </policy>
+</busconfig>
+-->
+
+<node name="/">
+  <interface name="org.freedesktop.Tracker.Extract">  
+    <method name="GetMetadata">
+      <annotation name="org.freedesktop.DBus.GLib.Async" value="true"/>
+      <arg type="s" name="path" direction="in" />
+      <arg type="s" name="mime" direction="in" />
+      <arg type="a{ss}" name="values" direction="out" />
+    </method>
+  </interface>
+</node>

Modified: trunk/src/tracker-extract/Makefile.am
==============================================================================
--- trunk/src/tracker-extract/Makefile.am	(original)
+++ trunk/src/tracker-extract/Makefile.am	Fri Feb  6 20:31:47 2009
@@ -6,6 +6,7 @@
 INCLUDES = 								\
 	-DLOCALEDIR=\""$(localedir)"\" 					\
 	-DMODULESDIR=\"$(modulesdir)\"					\
+	-DG_LOG_DOMAIN=\"Tracker\"					\
 	-DTRACKER_COMPILATION						\
 	-I$(top_srcdir)/src 						\
 	$(EXEMPI_CFLAGS) 						\
@@ -225,7 +226,7 @@
 	$(GLIB2_LIBS)
 
 dbus_sources = 								\
-	tracker-extractor-glue.h
+	tracker-extract-glue.h
 
 %-glue.h: $(top_srcdir)/data/dbus/%.xml
 	$(DBUSBINDINGTOOL) --mode=glib-server --output=$@ --prefix=$(subst -,_,$*) $^

Modified: trunk/src/tracker-extract/dummy.c
==============================================================================
--- trunk/src/tracker-extract/dummy.c	(original)
+++ trunk/src/tracker-extract/dummy.c	Fri Feb  6 20:31:47 2009
@@ -28,7 +28,7 @@
 #include <glib.h>
 #include <glib/gstdio.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 
 /*
  * Prototype of the parsing function. 

Modified: trunk/src/tracker-extract/tracker-escape.c
==============================================================================
--- trunk/src/tracker-extract/tracker-escape.c	(original)
+++ trunk/src/tracker-extract/tracker-escape.c	Fri Feb  6 20:31:47 2009
@@ -25,74 +25,3 @@
 #include <glib.h>
 
 #include "tracker-escape.h"
-
-gchar *
-tracker_escape_metadata (const gchar *str)
-{
-        gchar *dest, *d;
-
-	if (!str) {
-		return NULL;
-	}
-
-        d = dest = g_malloc (strlen (str) * 4 + 1);
-
-        while (*str) {
-                switch (*str) {
-                case '\n':
-                        *d++ = '\\';
-                        *d++ = 'n';
-                        break;
-                case '\t':
-                        *d++ = '\\';
-                        *d++ = 't';
-                        break;
-                case '\\':
-                        *d++ = '\\';
-                        *d++ = '\\';
-                        break;
-                case '|':
-                case ';':
-                case '=':
-                {
-                        /* special case fields separators */
-                        gchar *octal_str, *o;
-
-                        o = octal_str = g_strdup_printf ("\\%o", *str);
-
-                        while (*o) {
-                                *d++ = *o++;
-                        }
-
-                        g_free (octal_str);
-                        break;
-                }
-                default:
-                        *d++ = *str;
-                        break;
-                }
-
-                str++;
-        }
-
-        *d = '\0';
-
-        return dest;
-}
-
-gchar *
-tracker_escape_metadata_printf (const gchar *format,
-                                ...)
-{
-        va_list args;
-        gchar *str, *escaped;
-
-        va_start (args, format);
-        str = g_strdup_vprintf (format, args);
-        va_end (args);
-
-        escaped = tracker_escape_metadata (str);
-        g_free (str);
-
-        return escaped;
-}

Modified: trunk/src/tracker-extract/tracker-escape.h
==============================================================================
--- trunk/src/tracker-extract/tracker-escape.h	(original)
+++ trunk/src/tracker-extract/tracker-escape.h	Fri Feb  6 20:31:47 2009
@@ -25,9 +25,9 @@
 
 G_BEGIN_DECLS
 
-gchar *tracker_escape_metadata        (const gchar *str);
-gchar *tracker_escape_metadata_printf (const gchar *format,
-                                       ...);
+/* We used to escape strings before we used DBus */
+#define tracker_escape_metadata        g_strdup
+#define tracker_escape_metadata_printf g_strdup_printf
 
 G_END_DECLS
 

Modified: trunk/src/tracker-extract/tracker-extract-abw.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-abw.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-abw.c	Fri Feb  6 20:31:47 2009
@@ -34,13 +34,13 @@
 #include <glib.h>
 #include <glib/gstdio.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-escape.h"
 
 static void extract_abw (const gchar *filename,
 			 GHashTable  *metadata);
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "application/x-abiword", extract_abw },
 	{ NULL, NULL }
 };
@@ -113,8 +113,8 @@
 	}
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-exif.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-exif.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-exif.c	Fri Feb  6 20:31:47 2009
@@ -28,7 +28,7 @@
 
 #include <libtracker-common/tracker-type-utils.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 
 #define EXIF_DATE_FORMAT "%Y:%m:%d %H:%M:%S"
 

Modified: trunk/src/tracker-extract/tracker-extract-gstreamer-helix.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-gstreamer-helix.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-gstreamer-helix.c	Fri Feb  6 20:31:47 2009
@@ -33,7 +33,7 @@
 #include <gst/gst.h>
 #include <gst/tag/tag.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-albumart.h"
 
 typedef enum {

Modified: trunk/src/tracker-extract/tracker-extract-gstreamer-tagreadbin.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-gstreamer-tagreadbin.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-gstreamer-tagreadbin.c	Fri Feb  6 20:31:47 2009
@@ -33,7 +33,7 @@
 #include <gst/tag/tag.h>
 #include <gst/interfaces/tagreader.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-albumart.h"
 
 typedef enum {

Modified: trunk/src/tracker-extract/tracker-extract-gstreamer.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-gstreamer.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-gstreamer.c	Fri Feb  6 20:31:47 2009
@@ -64,7 +64,7 @@
 
 #include <libtracker-common/tracker-type-utils.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-albumart.h"
 
 /*

Modified: trunk/src/tracker-extract/tracker-extract-html.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-html.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-html.c	Fri Feb  6 20:31:47 2009
@@ -26,7 +26,7 @@
 
 #include <libxml/HTMLparser.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-escape.h"
 
 typedef enum {
@@ -41,7 +41,7 @@
 static void extract_html (const gchar *filename,
 			  GHashTable  *metadata);
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "text/html",		   extract_html },
 	{ "application/xhtml+xml", extract_html },
 	{ NULL, NULL }
@@ -222,8 +222,8 @@
 	}
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-imagemagick.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-imagemagick.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-imagemagick.c	Fri Feb  6 20:31:47 2009
@@ -29,7 +29,7 @@
 
 #include <libtracker-common/tracker-os-dependant.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-xmp.h"
 
 static void extract_imagemagick (const gchar *filename, 

Modified: trunk/src/tracker-extract/tracker-extract-jpeg.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-jpeg.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-jpeg.c	Fri Feb  6 20:31:47 2009
@@ -40,7 +40,7 @@
 
 #include <libtracker-common/tracker-type-utils.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-xmp.h"
 
 #ifdef HAVE_EXEMPI
@@ -56,7 +56,7 @@
 static void extract_jpeg (const gchar *filename,
 			  GHashTable  *metadata);
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "image/jpeg", extract_jpeg },
 	{ NULL, NULL }
 };
@@ -356,8 +356,8 @@
 	}
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-libxine.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-libxine.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-libxine.c	Fri Feb  6 20:31:47 2009
@@ -17,11 +17,12 @@
  * Boston, MA  02110-1301, USA.
  */
 
+#include "config.h"
+
 #include <xine.h>
 #include <glib.h>
 
-#include "tracker-extract.h"
-
+#include "tracker-main.h"
 
 static void
 add_uint32_info (GHashTable *metadata, char *key, uint32_t info)

Modified: trunk/src/tracker-extract/tracker-extract-mp3.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-mp3.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-mp3.c	Fri Feb  6 20:31:47 2009
@@ -39,7 +39,7 @@
 #include <sys/mman.h>
 #endif /* G_OS_WIN32 */
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-albumart.h"
 #include "tracker-escape.h"
 
@@ -276,7 +276,7 @@
 	{32000, 16000, 8000}
 };
 
-static TrackerExtractorData extractor_data[] = {
+static TrackerExtractData extract_data[] = {
 	{ "audio/mpeg", extract_mp3 },
 	{ "audio/x-mp3", extract_mp3 },
 	{ NULL, NULL }
@@ -1531,8 +1531,8 @@
 	close(file);
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
-	return extractor_data;
+	return extract_data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-mplayer.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-mplayer.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-mplayer.c	Fri Feb  6 20:31:47 2009
@@ -28,13 +28,13 @@
 
 #include <libtracker-common/tracker-os-dependant.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-escape.h"
 
 static void extract_mplayer (const gchar *filename,
 			     GHashTable  *metadata);
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "audio/*", extract_mplayer },
 	{ "video/*", extract_mplayer },
 	{ NULL, NULL }
@@ -247,8 +247,8 @@
 	}
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-msoffice.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-msoffice.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-msoffice.c	Fri Feb  6 20:31:47 2009
@@ -36,12 +36,12 @@
 
 #include <libtracker-common/tracker-utils.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 
 static void extract_msoffice (const gchar *filename,
 			      GHashTable  *metadata);
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "application/msword",	  extract_msoffice },
 	{ "application/vnd.ms-*", extract_msoffice },
 	{ NULL, NULL }
@@ -222,8 +222,8 @@
 	gsf_shutdown ();
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-oasis.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-oasis.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-oasis.c	Fri Feb  6 20:31:47 2009
@@ -26,7 +26,7 @@
 
 #include <libtracker-common/tracker-os-dependant.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-escape.h"
 
 typedef enum {
@@ -63,7 +63,7 @@
 static void extract_oasis	  (const gchar		*filename,
 				   GHashTable		*metadata);
 
-static TrackerExtractorData extractor_data[] = {
+static TrackerExtractData extract_data[] = {
 	{ "application/vnd.oasis.opendocument.*", extract_oasis },
 	{ NULL, NULL }
 };
@@ -243,8 +243,8 @@
 	}
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
-	return extractor_data;
+	return extract_data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-pdf.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-pdf.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-pdf.c	Fri Feb  6 20:31:47 2009
@@ -26,7 +26,7 @@
 
 #include <glib.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-xmp.h"
 
 #include <libtracker-common/tracker-utils.h>
@@ -34,7 +34,7 @@
 static void extract_pdf (const gchar *filename,
 			 GHashTable  *metadata);
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "application/pdf", extract_pdf },
 	{ NULL, NULL }
 };
@@ -114,8 +114,8 @@
 	g_object_unref (document);
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-playlist.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-playlist.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-playlist.c	Fri Feb  6 20:31:47 2009
@@ -31,9 +31,10 @@
 #include <glib/gstdio.h>
 #include <gio/gio.h>
 
-#include "tracker-extract.h"
 #include <totem-pl-parser.h>
 
+#include "tracker-main.h"
+
 #define PLAYLIST_PROPERTY_NO_TRACKS "Playlist:Songs"
 #define PLAYLIST_PROPERTY_DURATION  "Playlist:Duration"
 #define PLAYLIST_PROPERTY_CALCULATED "Playlist:ValidDuration"
@@ -50,7 +51,7 @@
 			      GHashTable  *metadata);
 
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "audio/x-mpegurl", extract_playlist },
 	{ "audio/mpegurl", extract_playlist },
 	{ "audio/x-scpls", extract_playlist },
@@ -137,8 +138,8 @@
         g_object_unref (pl);
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-png.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-png.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-png.c	Fri Feb  6 20:31:47 2009
@@ -39,7 +39,7 @@
 
 #include <libtracker-common/tracker-type-utils.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-xmp.h"
 #include "tracker-escape.h"
 
@@ -70,7 +70,7 @@
 	{ NULL,			NULL,		      NULL},
 };
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "image/png", extract_png },
 	{ NULL, NULL }
 };
@@ -267,8 +267,8 @@
 	}
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-ps.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-ps.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-ps.c	Fri Feb  6 20:31:47 2009
@@ -37,7 +37,7 @@
 #include <libtracker-common/tracker-type-utils.h>
 #include <libtracker-common/tracker-os-dependant.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-escape.h"
 
 #ifndef HAVE_GETLINE
@@ -59,7 +59,7 @@
 static void extract_ps	  (const gchar *filename,
 			   GHashTable  *metadata);
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "application/x-gzpostscript",	extract_ps_gz },
 	{ "application/postscript",	extract_ps    },
 	{ NULL, NULL }
@@ -354,8 +354,8 @@
 	g_unlink (gunzipped);
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-tiff.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-tiff.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-tiff.c	Fri Feb  6 20:31:47 2009
@@ -29,7 +29,7 @@
 
 #include <libtracker-common/tracker-type-utils.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-xmp.h"
 
 #define XMP_NAMESPACE_LENGTH 29
@@ -57,7 +57,7 @@
 			       GHashTable  *metadata);
 static gchar *date_to_iso8601 (gchar       *date);
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "image/tiff", extract_tiff },
 	{ NULL, NULL }
 };
@@ -269,8 +269,8 @@
 	TIFFClose (image);
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-totem.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-totem.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-totem.c	Fri Feb  6 20:31:47 2009
@@ -25,7 +25,7 @@
 
 #include <libtracker-common/tracker-os-dependant.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-escape.h"
 
 static gchar *tags[][2] = {
@@ -46,7 +46,7 @@
 static void extract_totem (const gchar *filename,
 			   GHashTable  *metadata);
 
-static TrackerExtractorData data[] = {
+static TrackerExtractData data[] = {
 	{ "audio/*", extract_totem },
 	{ "video/*", extract_totem },
 	{ NULL, NULL }
@@ -83,8 +83,8 @@
 	}
 }
 
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Modified: trunk/src/tracker-extract/tracker-extract-vorbis.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-vorbis.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-vorbis.c	Fri Feb  6 20:31:47 2009
@@ -26,9 +26,7 @@
 #include <glib.h>
 #include <vorbis/vorbisfile.h>
 
-#include "tracker-extract.h"
-
-/*#include "tracker-utils.h"*/
+#include "tracker-main.h"
 
 static struct {
 	char * name;

Modified: trunk/src/tracker-extract/tracker-extract-xmp.c
==============================================================================
--- trunk/src/tracker-extract/tracker-extract-xmp.c	(original)
+++ trunk/src/tracker-extract/tracker-extract-xmp.c	Fri Feb  6 20:31:47 2009
@@ -21,31 +21,33 @@
 
 #include <glib.h>
 
-#include "tracker-extract.h"
+#include "tracker-main.h"
 #include "tracker-xmp.h"
 #include "tracker-escape.h"
 
+static void extract_xmp (const gchar *filename, 
+                         GHashTable  *metadata);
+
+static TrackerExtractData data[] = {
+	{ "application/rdf+xml", extract_xmp },
+	{ NULL, NULL }
+};
 
 static void
-tracker_extract_xmp (const gchar* filename, GHashTable *metadata)
+extract_xmp (const gchar *filename, 
+             GHashTable  *metadata)
 {
 	gchar *contents;
 	gsize length;
 	GError *error;
 
-	if ( g_file_get_contents ( filename, &contents, &length, &error ) )
+	if (g_file_get_contents (filename, &contents, &length, &error)) {
 		tracker_read_xmp (contents, length, metadata);
+        }
 }
 
-
-TrackerExtractorData data[] = {
-	{ "application/rdf+xml", tracker_extract_xmp },
-	{ NULL, NULL }
-};
-
-
-TrackerExtractorData *
-tracker_get_extractor_data (void)
+TrackerExtractData *
+tracker_get_extract_data (void)
 {
 	return data;
 }

Added: trunk/src/tracker-extract/tracker-extract.c
==============================================================================
--- (empty file)
+++ trunk/src/tracker-extract/tracker-extract.c	Fri Feb  6 20:31:47 2009
@@ -0,0 +1,375 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008, Nokia
+ *
+ * This library 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 library 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 library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ */
+
+#include "config.h"
+
+#include <string.h>
+
+#include <gmodule.h>
+#include <gio/gio.h>
+
+#include <libtracker-common/tracker-dbus.h>
+
+#include "tracker-main.h"
+#include "tracker-dbus.h"
+#include "tracker-extract.h"
+
+#define TRACKER_EXTRACT_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TRACKER_TYPE_EXTRACT, TrackerExtractPrivate))
+
+typedef struct {
+	GArray *extractors;
+} TrackerExtractPrivate;
+
+static void tracker_extract_finalize (GObject *object);
+
+G_DEFINE_TYPE(TrackerExtract, tracker_extract, G_TYPE_OBJECT)
+
+static void
+tracker_extract_class_init (TrackerExtractClass *klass)
+{
+	GObjectClass *object_class;
+
+	object_class = G_OBJECT_CLASS (klass);
+
+	object_class->finalize = tracker_extract_finalize;
+
+	g_type_class_add_private (object_class, sizeof (TrackerExtractPrivate));
+}
+
+static void
+tracker_extract_init (TrackerExtract *object)
+{
+}
+
+static void
+tracker_extract_finalize (GObject *object)
+{
+	TrackerExtractPrivate *priv;
+
+	priv = TRACKER_EXTRACT_GET_PRIVATE (object);
+
+	G_OBJECT_CLASS (tracker_extract_parent_class)->finalize (object);
+}
+
+TrackerExtract *
+tracker_extract_new (void)
+{
+	TrackerExtract *object;
+	TrackerExtractPrivate *priv;
+	GDir *dir;
+	GError *error;
+	const gchar *name;
+	GArray *extractors;
+	GArray *generic_extractors;
+
+	if (!g_module_supported ()) {
+		g_error ("Modules are not supported for this platform");
+		return NULL;
+	}
+
+	extractors = g_array_sized_new (FALSE,
+					TRUE,
+					sizeof (TrackerExtractData),
+					10);
+
+	/* This array is going to be used to store
+	 * temporarily extractors with mimetypes such as "audio / *"
+	 */
+	generic_extractors = g_array_sized_new (FALSE,
+						TRUE,
+						sizeof (TrackerExtractData),
+						10);
+
+	error = NULL;
+	dir = g_dir_open (MODULESDIR, 0, &error);
+
+	if (!dir) {
+		g_error ("Error opening modules directory: %s", error->message);
+		g_error_free (error);
+		g_array_free (extractors, TRUE);
+		extractors = NULL;
+		g_array_free (generic_extractors, TRUE);
+		return NULL;
+	}
+
+	while ((name = g_dir_read_name (dir)) != NULL) {
+		TrackerExtractDataFunc func;
+		TrackerExtractData *data;
+		GModule *module;
+		gchar *module_path;
+
+		if (!g_str_has_suffix (name, "." G_MODULE_SUFFIX)) {
+			continue;
+		}
+
+		module_path = g_build_filename (MODULESDIR, name, NULL);
+
+		module = g_module_open (module_path, G_MODULE_BIND_LOCAL);
+
+		if (!module) {
+			g_warning ("Could not load module '%s': %s", name, g_module_error ());
+			g_free (module_path);
+			continue;
+		}
+
+		g_module_make_resident (module);
+
+		if (g_module_symbol (module, "tracker_get_extract_data", (gpointer *) &func)) {
+			data = (func) ();
+
+			while (data->mime) {
+				if (strchr (data->mime, '*') != NULL) {
+					g_array_append_val (generic_extractors, *data);
+				} else {
+					g_array_append_val (extractors, *data);
+				}
+
+				data++;
+			}
+		}
+
+		g_free (module_path);
+	}
+
+	/* Append the generic extractors at the end of
+	 * the list, so the specific ones are used first
+	 */
+	g_array_append_vals (extractors,
+			     generic_extractors->data,
+			     generic_extractors->len);
+	g_array_free (generic_extractors, TRUE);
+
+	/* Set extractors */
+	object = g_object_new (TRACKER_TYPE_EXTRACT, NULL);
+
+	priv = TRACKER_EXTRACT_GET_PRIVATE (object);
+
+	priv->extractors = extractors;
+
+	return object;
+}
+
+static void
+print_file_metadata_item (gpointer key,
+			  gpointer value,
+			  gpointer user_data)
+{
+	gchar *value_utf8;
+
+	g_return_if_fail (key != NULL);
+	g_return_if_fail (value != NULL);
+
+	value_utf8 = g_locale_to_utf8 (value, -1, NULL, NULL, NULL);
+
+	if (value_utf8) {
+		value_utf8 = g_strstrip (value_utf8);
+		tracker_dbus_request_comment (GPOINTER_TO_UINT (user_data),
+					      "  Found '%s'='%s'",
+					      key,
+					      value_utf8);
+		g_free (value_utf8);
+	}
+}
+
+static GHashTable *
+get_file_metadata (TrackerExtract *extract,
+		   guint           request_id,
+		   const gchar    *path,
+		   const gchar    *mime)
+{
+	GHashTable *values;
+	gchar *path_in_locale;
+	gchar *path_used;
+	gchar *mime_used = NULL;
+
+	path_used = g_strdup (path);
+	g_strstrip (path_used);
+
+	path_in_locale = g_filename_from_utf8 (path_used, -1, NULL, NULL, NULL);
+
+	if (!path_in_locale) {
+		g_warning ("Could not convert path:'%s' from UTF-8 to locale", path_used);
+		g_free (path_used);
+		return NULL;
+	}
+
+	if (!g_file_test (path_in_locale, G_FILE_TEST_EXISTS)) {
+		g_warning ("File does not exist '%s'", path_in_locale);
+		g_free (path_in_locale);
+		return NULL;
+	}
+
+	if (mime && *mime) {
+		mime_used = g_strdup (mime);
+		g_strstrip (mime_used);
+	} else {
+		GFile *file;
+
+		/* Try to guess mime type */
+		file = g_file_new_for_path (path_in_locale);
+
+		if (file) {
+			GFileInfo *info;
+			GError *error = NULL;
+			const gchar *attributes;
+
+			attributes = 
+				G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE;
+			
+			info = g_file_query_info (file,
+						  attributes,
+						  G_FILE_QUERY_INFO_NONE,
+						  NULL,
+						  &error);
+
+			if (error) {
+				tracker_dbus_request_comment (request_id,
+							      "  Could not create GFileInfo for path:'%s', %s",
+							      path_in_locale,
+							      error ? error->message : "no error given");
+				g_error_free (error);
+			}
+			
+			if (info) {
+				mime_used = g_strdup (g_file_info_get_content_type (info));
+				g_object_unref (info);
+			}
+
+			tracker_dbus_request_comment (request_id,
+						      "  Guessing mime type as '%s' for path:'%s'",
+						      mime_used,
+						      path_in_locale);
+
+			g_object_unref (file);
+		} else {
+			tracker_dbus_request_comment (request_id,
+						      "  Could not create GFile for path:'%s'",
+						      path_in_locale);
+		}
+	}
+
+	values = g_hash_table_new_full (g_str_hash,
+					g_str_equal,
+					g_free,
+					g_free);
+
+	if (mime_used) {
+		TrackerExtractPrivate *priv;
+		TrackerExtractData *data;
+		guint i;
+
+		priv = TRACKER_EXTRACT_GET_PRIVATE (extract);
+
+		for (i = 0; i < priv->extractors->len; i++) {
+			data = &g_array_index (priv->extractors, TrackerExtractData, i);
+
+			if (g_pattern_match_simple (data->mime, mime_used)) {
+				(*data->extract) (path_in_locale, values);
+
+				if (g_hash_table_size (values) == 0) {
+					continue;
+				}
+
+				tracker_dbus_request_comment (request_id,
+							      "  Found %d metadata items",
+							      g_hash_table_size (values));
+				
+				g_free (path_in_locale);
+				g_free (path_used);
+				g_free (mime_used);
+				
+				return values;
+			}
+		}
+
+		tracker_dbus_request_comment (request_id,
+					      "  Could not find any extractors to handle metadata type");
+	} else {
+		tracker_dbus_request_comment (request_id,
+					      "  No mime available, not extracting data");
+	}
+
+	g_free (path_in_locale);
+	g_free (path_used);
+
+	return NULL;
+}
+
+void
+tracker_extract_get_metadata_by_cmdline (TrackerExtract *object,
+					 const gchar    *path,
+					 const gchar    *mime)
+{
+	guint       request_id;
+	GHashTable *values = NULL;
+
+	request_id = tracker_dbus_get_next_request_id ();
+
+	g_return_if_fail (path != NULL);
+
+	/* NOTE: Don't reset the timeout to shutdown here */
+	values = get_file_metadata (object, request_id, path, mime);
+
+	if (values) {
+		g_hash_table_foreach (values, 
+				      print_file_metadata_item, 
+				      GUINT_TO_POINTER (request_id));
+		g_hash_table_destroy (values);
+	}
+}
+
+void
+tracker_extract_get_metadata (TrackerExtract	     *object,
+			      const gchar            *path,
+			      const gchar            *mime,
+			      DBusGMethodInvocation  *context,
+			      GError		    **error)
+{
+	guint       request_id;
+	GHashTable *values = NULL;
+
+	request_id = tracker_dbus_get_next_request_id ();
+
+	tracker_dbus_async_return_if_fail (path != NULL, context);
+
+	tracker_dbus_request_new (request_id,
+				  "DBus request to extract metadata, "
+				  "path:'%s', mime:%s",
+				  path,
+				  mime);
+
+	tracker_main_shutdown_timeout_reset ();
+
+	values = get_file_metadata (object, request_id, path, mime);
+
+	if (values) {
+		g_hash_table_foreach (values, 
+				      print_file_metadata_item, 
+				      GUINT_TO_POINTER (request_id));
+	}
+
+	dbus_g_method_return (context, values);
+
+	if (values) {
+		g_hash_table_destroy (values);
+	}
+
+	tracker_dbus_request_success (request_id);
+}

Added: trunk/src/tracker-extract/tracker-extract.h
==============================================================================
--- (empty file)
+++ trunk/src/tracker-extract/tracker-extract.h	Fri Feb  6 20:31:47 2009
@@ -0,0 +1,67 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+/*
+ * Copyright (C) 2008, Nokia
+ *
+ * This library 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 library 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 library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ */
+
+#ifndef __TRACKERD_EXTRACT_H__
+#define __TRACKERD_EXTRACT_H__
+
+#include <glib-object.h>
+
+#include <dbus/dbus-glib-bindings.h>
+
+#define TRACKER_EXTRACT_SERVICE	       "org.freedesktop.Tracker.Extract"
+#define TRACKER_EXTRACT_PATH	       "/org/freedesktop/Tracker/Extract"
+#define TRACKER_EXTRACT_INTERFACE      "org.freedesktop.Tracker.Extract"
+
+G_BEGIN_DECLS
+
+#define TRACKER_TYPE_EXTRACT	       (tracker_extract_get_type ())
+#define TRACKER_EXTRACT(object)	       (G_TYPE_CHECK_INSTANCE_CAST ((object), TRACKER_TYPE_EXTRACT, TrackerExtract))
+#define TRACKER_EXTRACT_CLASS(klass)   (G_TYPE_CHECK_CLASS_CAST ((klass), TRACKER_TYPE_EXTRACT, TrackerExtractClass))
+#define TRACKER_IS_EXTRACT(object)     (G_TYPE_CHECK_INSTANCE_TYPE ((object), TRACKER_TYPE_EXTRACT))
+#define TRACKER_IS_EXTRACT_CLASS(klass)(G_TYPE_CHECK_CLASS_TYPE ((klass), TRACKER_TYPE_EXTRACT))
+#define TRACKER_EXTRACT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TRACKER_TYPE_EXTRACT, TrackerExtractClass))
+
+typedef struct TrackerExtract	   TrackerExtract;
+typedef struct TrackerExtractClass TrackerExtractClass;
+
+struct TrackerExtract {
+	GObject parent;
+};
+
+struct TrackerExtractClass {
+	GObjectClass parent;
+};
+
+GType           tracker_extract_get_type                (void);
+TrackerExtract *tracker_extract_new                     (void);
+void            tracker_extract_get_metadata            (TrackerExtract         *object,
+							 const gchar            *path,
+							 const gchar            *mime,
+							 DBusGMethodInvocation  *context,
+							 GError                **error);
+
+/* Not DBus API, convenience for command line */
+void            tracker_extract_get_metadata_by_cmdline (TrackerExtract         *object,
+							 const gchar            *path,
+							 const gchar            *mime);
+
+G_END_DECLS
+
+#endif /* __TRACKERD_EXTRACT_H__ */

Modified: trunk/src/tracker-extract/tracker-main.c
==============================================================================
--- trunk/src/tracker-extract/tracker-main.c	(original)
+++ trunk/src/tracker-extract/tracker-main.c	Fri Feb  6 20:31:47 2009
@@ -23,345 +23,74 @@
 
 #define _XOPEN_SOURCE
 #include <time.h>
-
-#include <stdio.h>
-#include <string.h>
 #include <stdlib.h>
-#include <errno.h>
 #include <locale.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <unistd.h>
 
 #include <glib.h>
 #include <glib-object.h>
 #include <glib/gi18n.h>
-#include <gmodule.h>
 
 #ifndef G_OS_WIN32
 #include <sys/resource.h>
 #endif
 
 #include <libtracker-common/tracker-os-dependant.h>
-#include <libtracker-common/tracker-type-utils.h>
-#include <libtracker-common/tracker-utils.h>
 #include <libtracker-common/tracker-thumbnailer.h>
 
+#include "tracker-main.h"
+#include "tracker-dbus.h"
 #include "tracker-extract.h"
 
-#define MAX_MEM       128
-#define MAX_MEM_AMD64 512
-
-
-#undef DISABLE_DEBUG
-
-#ifdef G_HAVE_ISO_VARARGS
-#  ifdef DISABLE_DEBUG
-#    define debug(...)
-#  else
-#    define debug(...) debug_impl (__VA_ARGS__)
-#  endif
-#elif defined(G_HAVE_GNUC_VARARGS)
-#  if DISABLE_DEBUG
-#    define debug(fmt...)
-#  else
-#    define debug(fmt...) debug_impl(fmt)
-#  endif
-#else
-#  if DISABLE_DEBUG
-#    define debug(x)
-#  else
-#    define debug debug_impl
-#  endif
-#endif
-
-static GArray *extractors = NULL;
-static guint   shutdown_timeout_id = 0;
-
-#ifndef DISABLE_DEBUG
-
-static void
-debug_impl (const gchar *msg, ...)
-{
-	va_list args;
-
-	va_start (args, msg);
-	g_vfprintf (stderr, msg, args);
-	va_end (args);
-
-	g_fprintf (stderr, "\n");
-}
-
-#endif /* DISABLE_DEBUG */
-
-static void
-initialize_extractors (void)
-{
-	GDir	    *dir;
-	GError	    *error;
-	const gchar *name;
-	GArray	    *generic_extractors;
-
-	if (extractors != NULL) {
-		return;
-	}
-
-	if (!g_module_supported ()) {
-		g_error ("Modules are not supported for this platform");
-		return;
-	}
-
-	error = NULL;
-
-	extractors = g_array_sized_new (FALSE,
-					TRUE,
-					sizeof (TrackerExtractorData),
-					10);
-
-	/* This array is going to be used to store
-	 * temporarily extractors with mimetypes such as "audio / *"
-	 */
-	generic_extractors = g_array_sized_new (FALSE,
-						TRUE,
-						sizeof (TrackerExtractorData),
-						10);
-
-	dir = g_dir_open (MODULESDIR, 0, &error);
-
-	if (!dir) {
-		g_error ("Error opening modules directory: %s", error->message);
-		g_error_free (error);
-		g_array_free (extractors, TRUE);
-		extractors = NULL;
-		g_array_free (generic_extractors, TRUE);
-		return;
-	}
-
-	while ((name = g_dir_read_name (dir)) != NULL) {
-		GModule			 *module;
-		gchar			 *module_path;
-		TrackerExtractorDataFunc func;
-		TrackerExtractorData	 *data;
-
-		if (!g_str_has_suffix (name, "." G_MODULE_SUFFIX)) {
-			continue;
-		}
-
-		module_path = g_build_filename (MODULESDIR, name, NULL);
-
-		module = g_module_open (module_path, G_MODULE_BIND_LOCAL);
-
-		if (!module) {
-			g_warning ("Could not load module '%s': %s", name, g_module_error ());
-			g_free (module_path);
-			continue;
-		}
-
-		g_module_make_resident (module);
-
-		if (g_module_symbol (module, "tracker_get_extractor_data", (gpointer *) &func)) {
-			data = (func) ();
-
-			while (data->mime) {
-				if (strchr (data->mime, '*') != NULL) {
-					g_array_append_val (generic_extractors, *data);
-				} else {
-					g_array_append_val (extractors, *data);
-				}
-
-				data++;
-			}
-		}
-
-		g_free (module_path);
-	}
-
-	/* Append the generic extractors at the end of
-	 * the list, so the specific ones are used first
-	 */
-	g_array_append_vals (extractors,
-			     generic_extractors->data,
-			     generic_extractors->len);
-	g_array_free (generic_extractors, TRUE);
-}
-
-static GHashTable *
-tracker_get_file_metadata (const gchar *uri,
-			   const gchar *mime)
-{
-	GHashTable *meta_table;
-	gchar	   *uri_in_locale;
-
-	if (!uri) {
-		return NULL;
-	}
-
-	debug ("Extractor - Getting metadata from file:'%s' with mime:'%s'",
-	       uri,
-	       mime);
-
-	uri_in_locale = g_filename_from_utf8 (uri, -1, NULL, NULL, NULL);
-
-	if (!uri_in_locale) {
-		g_warning ("Could not convert uri:'%s' from UTF-8 to locale", uri);
-		return NULL;
-	}
-
-	if (!g_file_test (uri_in_locale, G_FILE_TEST_EXISTS)) {
-		g_warning ("File does not exist '%s'", uri_in_locale);
-		g_free (uri_in_locale);
-		return NULL;
-	}
-
-	meta_table = g_hash_table_new_full (g_str_hash,
-					    g_str_equal,
-					    g_free,
-					    g_free);
-
-	if (mime) {
-		guint i;
-		TrackerExtractorData *data;
-
-		for (i = 0; i < extractors->len; i++) {
-			data = &g_array_index (extractors, TrackerExtractorData, i);
-
-			if (g_pattern_match_simple (data->mime, mime)) {
-				(*data->extractor) (uri_in_locale, meta_table);
-
-				if (g_hash_table_size (meta_table) == 0) {
-					continue;
-				}
-
-				g_free (uri_in_locale);
-
-				debug ("Extractor - Found %d metadata items",
-				       g_hash_table_size (meta_table));
-
-				return meta_table;
-			}
-		}
-
-		debug ("Extractor - Could not find any extractors to handle metadata type.");
-	} else {
-		debug ("Extractor - No mime available, not extracting data");
-	}
-
-	g_free (uri_in_locale);
-
-	return NULL;
-}
-
-static void
-print_meta_table_data (gpointer key,
-		       gpointer value,
-		       gpointer user_data)
-{
-	gchar *value_utf8;
-
-	g_return_if_fail (key != NULL);
-	g_return_if_fail (value != NULL);
-
-	value_utf8 = g_locale_to_utf8 (value, -1, NULL, NULL, NULL);
-
-	if (value_utf8) {
-		value_utf8 = g_strstrip (value_utf8);
-
-		debug ("Extractor - Found '%s' = '%s'",
-		       (gchar*) key,
-		       value_utf8);
-
-		g_print ("%s=%s;\n", (gchar*) key, value_utf8);
-
-		g_free (value_utf8);
-	}
-}
+static GMainLoop *main_loop;
+static guint      shutdown_timeout_id;
 
 static gboolean
-shutdown_app_timeout (gpointer user_data)
+shutdown_timeout_cb (gpointer user_data)
 {
-	GMainLoop *main_loop;
-
-	debug ("Extractor - Timed out, shutting down");
-
-	main_loop = (GMainLoop *) user_data;
+	shutdown_timeout_id = 0;
 	g_main_loop_quit (main_loop);
 
 	return FALSE;
 }
 
-static void
-reset_shutdown_timeout (GMainLoop *main_loop)
+void
+tracker_main_shutdown_timeout_reset (void)
 {
-	debug ("Extractor - Resetting timeout");
-
 	if (shutdown_timeout_id != 0) {
 		g_source_remove (shutdown_timeout_id);
 	}
 
-	shutdown_timeout_id = g_timeout_add (30000, shutdown_app_timeout, main_loop);
+	shutdown_timeout_id = g_timeout_add_seconds (30, 
+						     shutdown_timeout_cb, 
+						     NULL);
 }
 
 static void
-print_file_metadata (const gchar *filename,
-		     const gchar *mimetype)
+initialize_directories (void)
 {
-	GHashTable *meta;
+	gchar *user_data_dir;
 
-	if (mimetype && *mimetype) {
-		meta = tracker_get_file_metadata (filename, mimetype);
-	} else {
-		meta = tracker_get_file_metadata (filename, NULL);
-	}
-
-	if (meta) {
-		g_hash_table_foreach (meta, print_meta_table_data, NULL);
-		g_hash_table_destroy (meta);
-	}
-
-	/* Add an empty line so the indexer
-	 * knows when to stop reading
+	/* NOTE: We don't create the database directories here, the
+	 * tracker-db-manager does that for us.
 	 */
-	g_print ("\n");
-
-	debug ("Extractor - Waiting for work");
-}
-
-static gboolean
-process_input_cb (GIOChannel   *channel,
-		  GIOCondition	condition,
-		  gpointer	user_data)
-{
-	gchar *filename, *mimetype;
-
-	debug ("Extractor - Processing input");
-
-	reset_shutdown_timeout ((GMainLoop *) user_data);
-
-	g_io_channel_read_line (channel, &filename, NULL, NULL, NULL);
-	g_io_channel_read_line (channel, &mimetype, NULL, NULL, NULL);
-
-	g_strstrip (filename);
-
-	if (mimetype) {
-		g_strstrip (mimetype);
-	}
+	
+	user_data_dir = g_build_filename (g_get_user_data_dir (),
+					  "tracker",
+					  NULL);
+	
+	g_message ("Checking directory exists:'%s'", user_data_dir);
+	g_mkdir_with_parents (user_data_dir, 00755);
 
-	print_file_metadata (filename, mimetype);
-
-	g_free (filename);
-	g_free (mimetype);
-
-	return TRUE;
+	g_free (user_data_dir);
 }
 
 int
 main (int argc, char *argv[])
 {
 	GOptionContext *context;
-	GMainLoop      *main_loop;
-	GIOChannel     *input;
 	gchar          *summary;
 	TrackerConfig  *config;
+	gchar          *log_filename;
 
 	bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
 	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
@@ -376,13 +105,11 @@
 	summary = g_strconcat (_("This command works two ways:"),
 			       "\n",
 			       "\n",
+			       _(" - Calling the DBus API once running"),
+			       "\n",
 			       _(" - Passing arguments:"),
 			       "\n",
 			       "     tracker-extract [filename] [mime-type]\n",
-			       "\n",
-			       _(" - Reading filename/mime-type pairs from STDIN"),
-			       "\n",
-			       "     echo -e \"/home/foo/bar/baz.mp3\\naudio/x-mpeg\" | tracker-extract",
 			       NULL);
 
 	g_option_context_set_summary (context, summary);
@@ -391,7 +118,6 @@
 
 	g_free (summary);
 
-	debug ("Extractor - Initializing...");
 	tracker_memory_setrlimits ();
 
 	g_type_init ();
@@ -400,39 +126,69 @@
 		g_thread_init (NULL);
 	}
 
+	dbus_g_thread_init ();
+
 	g_set_application_name ("tracker-extract");
 
 	setlocale (LC_ALL, "");
 
-	initialize_extractors ();
-
 	if (argc >= 2) {
+		TrackerExtract *object;
+
+		object = tracker_extract_new ();
+		if (!object) {
+			return EXIT_FAILURE;
+		}
+
 		if (argc >= 3) {
-			print_file_metadata (argv[1], argv[2]);
+			tracker_extract_get_metadata_by_cmdline (object, argv[1], argv[2]);
 		} else {
-			print_file_metadata (argv[1], NULL);
+			tracker_extract_get_metadata_by_cmdline (object, argv[1], NULL);
 		}
 
+		g_object_unref (object);
+
 		return EXIT_SUCCESS;
 	}
 
 	config = tracker_config_new ();
-	tracker_thumbnailer_init (config, 0);
 
-	main_loop = g_main_loop_new (NULL, FALSE);
+	log_filename =
+		g_build_filename (g_get_user_data_dir (),
+				  "tracker",
+				  "tracker-extract.log",
+				  NULL);
+
+	/* Initialize subsystems */
+	initialize_directories ();
 
-	input = g_io_channel_unix_new (STDIN_FILENO);
-	g_io_add_watch (input, G_IO_IN, process_input_cb, main_loop);
+	tracker_log_init (log_filename, tracker_config_get_verbosity (config));
+	g_print ("Starting log:\n  File:'%s'\n", log_filename);
 
-	reset_shutdown_timeout (main_loop);
+	tracker_thumbnailer_init (config, 0);
+	tracker_dbus_init ();
+
+	/* Make Tracker available for introspection */
+	if (!tracker_dbus_register_objects ()) {
+		g_free (log_filename);
+		g_object_unref (config);
+
+		return EXIT_FAILURE;
+	}
 
-	debug ("Extractor - Waiting for work");
+	/* Main loop */
+	main_loop = g_main_loop_new (NULL, FALSE);
+	tracker_main_shutdown_timeout_reset ();
 	g_main_loop_run (main_loop);
+	g_main_loop_unref (main_loop);
 
+	/* Shutdown subsystems */
+	tracker_dbus_shutdown ();
 	tracker_thumbnailer_shutdown ();
-	g_object_unref (config);
+	tracker_log_shutdown ();
 
-	debug ("Extractor - Finished");
+	g_free (log_filename);
+	g_object_unref (config);
 
 	return EXIT_SUCCESS;
 }

Modified: trunk/src/tracker-extract/tracker-main.h
==============================================================================
--- trunk/src/tracker-extract/tracker-main.h	(original)
+++ trunk/src/tracker-extract/tracker-main.h	Fri Feb  6 20:31:47 2009
@@ -32,23 +32,27 @@
  * for this keyword. This is bad because it means we have to string
  * check every value returned in clients that use the Tracker API.
  * This will be fixed in due course after January some time, -mr.
- *
- * 
  */
 #define METADATA_UNKNOWN ""
 
-typedef struct TrackerExtractorData TrackerExtractorData;
+typedef struct TrackerExtractData TrackerExtractData;
 
-typedef TrackerExtractorData * (*TrackerExtractorDataFunc)(void);
+typedef TrackerExtractData * (*TrackerExtractDataFunc)(void);
 
-struct TrackerExtractorData {
+struct TrackerExtractData {
 	const gchar *mime;
 
-	void (* extractor) (const gchar *filename,
-			    GHashTable	*metadata);
+	void (* extract) (const gchar *path,
+			  GHashTable  *metadata);
 };
 
-TrackerExtractorData *tracker_get_extractor_data (void);
+/* This is defined in each extract */
+TrackerExtractData *tracker_get_extract_data            (void);
+
+/* This is used to not shutdown after the default of 30 seconds if we
+ * get more work to do.
+ */
+void                tracker_main_shutdown_timeout_reset (void);
 
 G_END_DECLS
 

Modified: trunk/src/tracker-extract/tracker-xmp.c
==============================================================================
--- trunk/src/tracker-extract/tracker-xmp.c	(original)
+++ trunk/src/tracker-extract/tracker-xmp.c	Fri Feb  6 20:31:47 2009
@@ -26,7 +26,7 @@
 #include <glib.h>
 
 #include "tracker-xmp.h"
-#include "tracker-escape.h"
+#include "tracker-main.h"
 
 #ifdef HAVE_EXEMPI
 

Modified: trunk/src/tracker-indexer/Makefile.am
==============================================================================
--- trunk/src/tracker-indexer/Makefile.am	(original)
+++ trunk/src/tracker-indexer/Makefile.am	Fri Feb  6 20:31:47 2009
@@ -86,11 +86,15 @@
         tracker-marshal.c
 
 dbus_sources = 								\
-	tracker-indexer-glue.h
+	tracker-indexer-glue.h						\
+	tracker-extract-client.h
 
 %-glue.h: $(top_srcdir)/data/dbus/%.xml
 	$(DBUSBINDINGTOOL) --mode=glib-server --output=$@ --prefix=$(subst -,_,$*) $^
 
+%-client.h: $(top_srcdir)/data/dbus/%.xml
+	$(DBUSBINDINGTOOL) --mode=glib-client --output=$@ --prefix=$(subst -,_,$*) $^
+
 BUILT_SOURCES = 							\
 	$(dbus_sources)							\
 	$(marshal_sources)

Modified: trunk/src/tracker-indexer/tracker-dbus.h
==============================================================================
--- trunk/src/tracker-indexer/tracker-dbus.h	(original)
+++ trunk/src/tracker-indexer/tracker-dbus.h	Fri Feb  6 20:31:47 2009
@@ -31,8 +31,7 @@
 gboolean    tracker_dbus_init		   (void);
 void	    tracker_dbus_shutdown	   (void);
 gboolean    tracker_dbus_register_object   (GObject *object);
-DBusGProxy* tracker_dbus_get_thumbnailer   (void);
-DBusGProxy* tracker_dbus_get_thumb_manager (void);
+DBusGProxy *tracker_dbus_extract_get_proxy (void);
 
 G_END_DECLS
 

Modified: trunk/src/tracker-indexer/tracker-module-metadata-utils.c
==============================================================================
--- trunk/src/tracker-indexer/tracker-module-metadata-utils.c	(original)
+++ trunk/src/tracker-indexer/tracker-module-metadata-utils.c	Fri Feb  6 20:31:47 2009
@@ -32,6 +32,8 @@
 #include <libtracker-common/tracker-thumbnailer.h>
 
 #include "tracker-module-metadata-utils.h"
+#include "tracker-extract-client.h"
+#include "tracker-dbus.h"
 
 #define METADATA_FILE_NAME_DELIMITED "File:NameDelimited"
 #define METADATA_FILE_EXT	     "File:Ext"
@@ -58,6 +60,40 @@
 
 static ProcessContext *metadata_context = NULL;
 
+static DBusGProxy *
+get_dbus_extract_proxy (void)
+{
+	static DBusGProxy *proxy = NULL;
+	DBusGConnection *connection;
+	GError *error = NULL;
+
+	/* FIXME: Not perfect, we leak */
+	if (G_LIKELY (proxy)) {
+		return proxy;
+	}
+
+	connection = dbus_g_bus_get (DBUS_BUS_SESSION, &error);
+
+	if (!connection) {
+		g_critical ("Could not connect to the DBus session bus, %s",
+			    error ? error->message : "no error given.");
+		g_clear_error (&error);
+		return FALSE;
+	}
+
+	/* Get proxy for Service / Path / Interface of the indexer */
+	proxy = dbus_g_proxy_new_for_name (connection,
+					   "org.freedesktop.Tracker.Extract",
+					   "/org/freedesktop/Tracker/Extract",
+					   "org.freedesktop.Tracker.Extract");
+	
+	if (!proxy) {
+		g_critical ("Couldn't create a DBusGProxy to the extract service");
+	}
+
+	return proxy;
+}
+
 static void
 process_context_invalidate (ProcessContext *context)
 {
@@ -162,168 +198,6 @@
 	return context;
 }
 
-static gboolean
-metadata_read_cb (GIOChannel   *channel,
-		  GIOCondition	condition,
-		  gpointer	user_data)
-{
-	GPtrArray *array;
-	GIOStatus status;
-	gchar *line;
-
-	if (!metadata_context) {
-		return FALSE;
-	}
-
-	if ((condition & G_IO_HUP) || (condition & G_IO_ERR)) {
-		return FALSE;
-	}
-
-	array = metadata_context->data;
-	status = G_IO_STATUS_NORMAL;
-	line = NULL;
-
-	if (!array) {
-		/* FIXME: What do we do here? This has happened to me
-		 * before and we get warnings when we try to add to
-		 * the empty array later.
-		 */
-		g_message ("EEEEEK!!!\n"
-			   "\n"
-			   "Expected metadata array to be non-NULL!\n"
-			   "\n"
-			   "This usually means we probably got '\\n' too many times "
-			   "and closed the pipe when there is more content available "
-			   "to read\n"
-			   "\n"
-			   "Stopping main loop and this callback");
-
-		g_main_loop_quit (metadata_context->data_incoming_loop);
-
-		return FALSE;
-	}
-
-	if ((condition & G_IO_IN) || (condition & G_IO_PRI)) {
-		do {
-			status = g_io_channel_read_line (metadata_context->stdout_channel,
-							 &line,
-							 NULL,
-							 NULL,
-							 NULL);
-
-			if (status == G_IO_STATUS_NORMAL && line && *line) {
-				g_strstrip (line);
-				g_strdelimit (line, ";", '\0');
-				g_ptr_array_add (array, line);
-			}
-		} while (status == G_IO_STATUS_NORMAL && line && *line);
-
-		if (status == G_IO_STATUS_EOF ||
-		    status == G_IO_STATUS_ERROR ||
-		    (status == G_IO_STATUS_NORMAL && !*line)) {
-			/* All extractor output has been processed */
-			g_main_loop_quit (metadata_context->data_incoming_loop);
-		}
-	}
-
-	return TRUE;
-}
-
-static gboolean
-metadata_setup (void)
-{
-	const gchar *argv[2] = {
-		LIBEXEC_PATH G_DIR_SEPARATOR_S "tracker-extract",
-		NULL
-	};
-
-	if (metadata_context) {
-		process_context_invalidate (metadata_context);
-		metadata_context = NULL;
-	}
-
-	metadata_context = process_context_create (argv,
-						   metadata_read_cb);
-	if (!metadata_context) {
-		return FALSE;
-	}
-
-	return TRUE;
-}
-
-static gchar **
-metadata_query_file (const gchar *path,
-		     const gchar *mimetype)
-{
-	gchar *utf_path, *str;
-	GPtrArray *array;
-	GIOStatus status;
-	GError *error = NULL;
-
-	if (!path || !mimetype) {
-		return NULL;
-	}
-
-	if (!metadata_context && !metadata_setup ()) {
-		return NULL;
-	}
-
-	utf_path = g_filename_from_utf8 (path, -1, NULL, NULL, NULL);
-
-	if (!utf_path) {
-		return NULL;
-	}
-
-	array = g_ptr_array_sized_new (10);
-	metadata_context->data = array;
-
-	str = g_strdup_printf ("%s\n%s\n", utf_path, mimetype);
-	g_free (utf_path);
-
-	/* Write path and mimetype */
-	g_io_channel_write_chars (metadata_context->stdin_channel, str, -1, NULL, NULL);
-	status = g_io_channel_flush (metadata_context->stdin_channel, &error);
-
-	if (status == G_IO_STATUS_ERROR &&
-	    error &&
-	    g_error_matches (error, G_IO_CHANNEL_ERROR, G_IO_CHANNEL_ERROR_PIPE)) {
-		/* Looks like the external extractor
-		 * process has died before the child watch
-		 * could handle it, try respawning.
-		 */
-		g_error_free (error);
-
-		metadata_setup ();
-		metadata_context->data = array;
-
-		g_io_channel_write_chars (metadata_context->stdin_channel, str, -1, NULL, NULL);
-		status = g_io_channel_flush (metadata_context->stdin_channel, NULL);
-
-		if (status == G_IO_STATUS_ERROR) {
-			/* No point in trying again */
-			process_context_invalidate (metadata_context);
-			metadata_context = NULL;
-			g_free (str);
-			return NULL;
-		}
-	}
-
-	/* It will block here until all incoming
-	 * metadata has been processed
-	 */
-	g_main_loop_run (metadata_context->data_incoming_loop);
-
-	g_ptr_array_add (array, NULL);
-
-	if (metadata_context) {
-		metadata_context->data = NULL;
-	}
-
-	g_free (str);
-
-	return (gchar **) g_ptr_array_free (array, FALSE);
-}
-
 static void
 metadata_utils_add_embedded_data (TrackerModuleMetadata *metadata,
 				  TrackerField          *field,
@@ -358,14 +232,53 @@
 }
 
 static void
+metadata_utils_get_embedded_foreach (gpointer key,
+				     gpointer value,
+				     gpointer user_data)
+{
+	TrackerModuleMetadata *metadata;
+	TrackerField *field;
+	gchar *key_str;
+	gchar *value_str;
+
+	metadata = user_data;
+	key_str = key;
+	value_str = value;
+	
+	if (!key || !value) {
+		return;
+	}
+	
+	field = tracker_ontology_get_field_by_name (key_str);
+	if (!field) {
+		g_warning ("Field name '%s' isn't described in the ontology", key_str);
+		return;
+	}
+	
+	if (tracker_field_get_multiple_values (field)) {
+		GStrv strv;
+		guint i;
+		
+		strv = g_strsplit (value_str, "|", -1);
+		
+		for (i = 0; strv[i]; i++) {
+			metadata_utils_add_embedded_data (metadata, field, strv[i]);
+		}
+		
+		g_strfreev (strv);
+	} else {
+		metadata_utils_add_embedded_data (metadata, field, value_str);
+	}
+}
+
+static void
 metadata_utils_get_embedded (const char            *path,
 			     const char            *mime_type,
 			     TrackerModuleMetadata *metadata)
 {
-	gchar **values;
+	GHashTable *values = NULL;
+	GError *error = NULL;
 	const gchar *service_type;
-	gint i;
-	TrackerField *field;
 
 	service_type = tracker_ontology_get_service_by_mime (mime_type);
 	if (!service_type) {
@@ -376,63 +289,29 @@
 		return;
 	}
 
-	values = metadata_query_file (path, mime_type);
+	/* Call extractor to get data here */
+	if (!org_freedesktop_Tracker_Extract_get_metadata (get_dbus_extract_proxy (),
+							   path, 
+							   mime_type, 
+							   &values, 
+							   &error)) {
+		g_message ("Couldn't extract metadata for path:'%s' and mime:'%s', %s",
+			   path,
+			   mime_type,
+			   error ? error->message : "no error given");
+		g_clear_error (&error);
+		return;
+	}
 
 	if (!values) {
 		return;
 	}
 
-	/* parse returned values and extract keys and associated metadata */
-	for (i = 0; values[i]; i++) {
-		gchar *meta_data, *sep;
-		const gchar *name;
-		gchar *value;
-
-		meta_data = values[i];
-		sep = strchr (meta_data, '=');
-
-		if (!sep)
-			continue;
-
-		/* zero out the separator, so we get
-		 * NULL-terminated name and value
-		 */
-		sep[0] = '\0';
-		name = meta_data;
-		value = g_strcompress (sep + 1);
-
-		if (!name || !value) {
-			g_free (value);
-			continue;
-		}
-
-		field = tracker_ontology_get_field_by_name (name);
-
-		if (!field) {
-			g_warning ("Field name '%s' isn't described in the ontology", name);
-			g_free (value);
-			continue;
-		}
-
-		if (tracker_field_get_multiple_values (field)) {
-			GStrv arr;
-			guint t;
-
-			arr = g_strsplit (value, "|",-1);
-
-			for (t = 0; arr[t]; t++) {
-				metadata_utils_add_embedded_data (metadata, field, arr[t]);
-			}
-
-			g_strfreev (arr);
-		} else {
-			metadata_utils_add_embedded_data (metadata, field, value);
-		}
-
-		g_free (value);
-	}
+	g_hash_table_foreach (values, 
+			      metadata_utils_get_embedded_foreach, 
+			      metadata);
 
-	g_strfreev (values);
+	/* Do we free this hash table? */
 }
 
 static gboolean

Modified: trunk/tests/tracker-extract/tracker-extract-jpeg-test.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-jpeg-test.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-jpeg-test.c	Fri Feb  6 20:31:47 2009
@@ -32,20 +32,19 @@
 int
 main (int argc, char **argv) {
 
+	TrackerExtractData *data;
 	gint result;
 
 	g_type_init ();
 	g_thread_init (NULL);
 	g_test_init (&argc, &argv, NULL);
-
-	TrackerExtractorData *data;
-
-	g_test_message ("Testing extractor functionality");
-	g_test_add_func ("/tracker-extract/tracker-extract-jpeg/check-extractor-data",
-			 test_tracker_extract_check_extractor_data);
+ 
+	g_test_message ("Testing extract functionality");
+	g_test_add_func ("/tracker-extract/tracker-extract-jpeg/check-extract-data",
+			 test_tracker_extract_check_extract_data);
 
 #if 0
-	data = tracker_test_extract_get_extractor ("image/jpeg");
+	data = tracker_test_extract_get_extract ("image/jpeg");
 
 	g_test_add_data_func ("/tracker-extract/tracker-extract-jpeg/basic_size",
 			      data, test_tracker_extract_jpeg_basic_size);

Modified: trunk/tests/tracker-extract/tracker-extract-mp3-test.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-mp3-test.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-mp3-test.c	Fri Feb  6 20:31:47 2009
@@ -33,18 +33,18 @@
 int
 main (int argc, char **argv) {
 
-	TrackerExtractorData *data;
+	TrackerExtractData *data;
 	gint result;
 
 	g_type_init ();
 	g_thread_init (NULL);
 	g_test_init (&argc, &argv, NULL);
 
-	g_test_message ("Testing extractor functionality");
-	g_test_add_func ("/tracker-extract/tracker-extract-mp3/check-extractor-data",
-			 test_tracker_extract_check_extractor_data);
+	g_test_message ("Testing extract functionality");
+	g_test_add_func ("/tracker-extract/tracker-extract-mp3/check-extract-data",
+			 test_tracker_extract_check_extract_data);
 
-	data = tracker_test_extract_get_extractor ("audio/mpeg");
+	data = tracker_test_extract_get_extract ("audio/mpeg");
 
 	g_test_add_data_func ("/tracker-extract/tracker-extract-mp3/access",
 			      data, access_tracker_extract_mp3);

Modified: trunk/tests/tracker-extract/tracker-extract-png-test.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-png-test.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-png-test.c	Fri Feb  6 20:31:47 2009
@@ -38,14 +38,14 @@
 	g_thread_init (NULL);
 	g_test_init (&argc, &argv, NULL);
 
-	TrackerExtractorData *data;
+	TrackerExtractData *data;
 
-	g_test_message ("Testing extractor functionality");
-	g_test_add_func ("/tracker-extract/tracker-extract-png/check-extractor-data",
-			 test_tracker_extract_check_extractor_data);
+	g_test_message ("Testing extract functionality");
+	g_test_add_func ("/tracker-extract/tracker-extract-png/check-extract-data",
+			 test_tracker_extract_check_extract_data);
 
 #if 0
-	data = tracker_test_extract_get_extractor ("image/png");
+	data = tracker_test_extract_get_extract ("image/png");
 
 	g_test_add_data_func ("/tracker-extract/tracker-extract-png/basic_size",
 			      data, test_tracker_extract_png_basic_size);

Modified: trunk/tests/tracker-extract/tracker-extract-test-utils.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-test-utils.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-test-utils.c	Fri Feb  6 20:31:47 2009
@@ -20,13 +20,13 @@
 
 #include "tracker-extract-test-utils.h"
 
-TrackerExtractorData *
-tracker_test_extract_get_extractor (const gchar *mime)
+TrackerExtractData *
+tracker_test_extract_get_extract (const gchar *mime)
 {
-	TrackerExtractorData *data;
+	TrackerExtractData *data;
 	
 	/* Search for exact match first */
-	data = tracker_get_extractor_data ();	
+	data = tracker_get_extract_data ();	
 	while (data->mime) {
 		if (strcmp (data->mime, mime) == 0) {
 			return data;
@@ -35,7 +35,7 @@
 	}
 
 	/* Search for generic */
-	data = tracker_get_extractor_data ();
+	data = tracker_get_extract_data ();
 	while (data->mime) {
 		if (g_pattern_match_simple (data->mime, mime)) {
 			return data;
@@ -46,7 +46,7 @@
 }
 
 void
-extract_file (const TrackerExtractorData *data, const gchar *file, const gchar *testdatafile)
+extract_file (const TrackerExtractData *data, const gchar *file, const gchar *testdatafile)
 {
 	GHashTable *metadata;
 	GHashTable *testdata;
@@ -69,7 +69,7 @@
 					  g_free,
 					  g_free);
 
-	(*data->extractor) (filename, metadata);
+	(*data->extract) (filename, metadata);
 
 	testdata = parse_testdata_file (testdata_filename);
 
@@ -86,7 +86,7 @@
 }
 
 void
-performance_extract_files (const TrackerExtractorData *data, const gchar *filematch, guint filecount)
+performance_extract_files (const TrackerExtractData *data, const gchar *filematch, guint filecount)
 {
 	double perftime;
 	guint i;
@@ -117,7 +117,7 @@
 			g_assert_not_reached();
 		}
 
-		(*data->extractor) (filename, metadata);
+		(*data->extract) (filename, metadata);
 
 		g_assert (g_hash_table_size (metadata) > 0);
 
@@ -132,7 +132,7 @@
 }
 
 void
-access_extract_files (const TrackerExtractorData *data, const gchar *filematch, guint filecount)
+access_extract_files (const TrackerExtractData *data, const gchar *filematch, guint filecount)
 {
 	double perftime;
 	guint i;
@@ -161,7 +161,7 @@
 			g_assert_not_reached();
 		}
 
-		(*data->extractor) (filename, metadata);
+		(*data->extract) (filename, metadata);
 
 		g_assert (g_hash_table_size (metadata) > 0);
 
@@ -169,12 +169,12 @@
 	}		
 }
 
-TrackerExtractorData *
-search_mime_extractor (const gchar *mime)
+TrackerExtractData *
+search_mime_extract (const gchar *mime)
 {
-	TrackerExtractorData *data;
+	TrackerExtractData *data;
 
-	data = tracker_get_extractor_data ();	
+	data = tracker_get_extract_data ();	
 
 	while (data->mime) {
 		if (strcmp (data->mime,mime) == 0) {

Modified: trunk/tests/tracker-extract/tracker-extract-test-utils.h
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-test-utils.h	(original)
+++ trunk/tests/tracker-extract/tracker-extract-test-utils.h	Fri Feb  6 20:31:47 2009
@@ -27,16 +27,16 @@
 
 #include <glib.h>
 
-#include <tracker-extract/tracker-extract.h>
+#include <tracker-extract/tracker-main.h>
 
-TrackerExtractorData *  tracker_test_extract_get_extractor (const gchar *mime);
-void              extract_file (const TrackerExtractorData *data, 
+TrackerExtractData *  tracker_test_extract_get_extract (const gchar *mime);
+void              extract_file (const TrackerExtractData *data, 
 				const gchar *file, 
 				const gchar *testdatafile);
-void              performance_extract_files (const TrackerExtractorData *data, 
+void              performance_extract_files (const TrackerExtractData *data, 
 					     const gchar *filematch, 
 					     guint filecount);
-void              access_extract_files (const TrackerExtractorData *data, 
+void              access_extract_files (const TrackerExtractData *data, 
 					const gchar *filematch, 
 					guint filecount);
 

Modified: trunk/tests/tracker-extract/tracker-extract-testsuite-avi.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-testsuite-avi.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-testsuite-avi.c	Fri Feb  6 20:31:47 2009
@@ -34,7 +34,7 @@
 
 void test_tracker_extract_avi_basic_tags(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_basic_tags[i].filename; i++) {

Modified: trunk/tests/tracker-extract/tracker-extract-testsuite-generic.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-testsuite-generic.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-testsuite-generic.c	Fri Feb  6 20:31:47 2009
@@ -24,15 +24,15 @@
 #include "tracker-extract-testsuite-generic.h"
 
 void
-test_tracker_extract_check_extractor_data (void)
+test_tracker_extract_check_extract_data (void)
 {
-	TrackerExtractorData *data;
+	TrackerExtractData *data;
 	guint extractors = 0;
 
-	data = tracker_get_extractor_data ();
+	data = tracker_get_extract_data ();
 
 	while (data->mime) {
-		if (data->extractor == NULL) {
+		if (data->extract == NULL) {
 			g_error ("Extractor for mime '%s' declared NULL", data->mime);
 		}
 

Modified: trunk/tests/tracker-extract/tracker-extract-testsuite-generic.h
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-testsuite-generic.h	(original)
+++ trunk/tests/tracker-extract/tracker-extract-testsuite-generic.h	Fri Feb  6 20:31:47 2009
@@ -23,6 +23,6 @@
 
 #include <tracker-extract/tracker-extract.h>
 
-void test_tracker_extract_check_extractor_data  ();
+void test_tracker_extract_check_extract_data  (void);
 
 #endif

Modified: trunk/tests/tracker-extract/tracker-extract-testsuite-jpeg.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-testsuite-jpeg.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-testsuite-jpeg.c	Fri Feb  6 20:31:47 2009
@@ -108,7 +108,7 @@
 
 void test_tracker_extract_jpeg_basic_size(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_basic_size[i].filename; i++) {
@@ -120,7 +120,7 @@
 
 void test_tracker_extract_jpeg_exif_size(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_exif_size[i].filename; i++) {
@@ -132,7 +132,7 @@
 
 void test_tracker_extract_jpeg_exif_orientation(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_exif_orientation[i].filename; i++) {
@@ -144,7 +144,7 @@
 
 void test_tracker_extract_jpeg_exif_flash(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_exif_flash[i].filename; i++) {
@@ -156,7 +156,7 @@
 
 void test_tracker_extract_jpeg_exif_tags(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_exif_tags[i].filename; i++) {
@@ -168,7 +168,7 @@
 
 void performance_tracker_extract_jpeg(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	
 	performance_extract_files (data, "/jpeg/perf_jpeg_%d.jpg", 1000);
 }

Modified: trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-testsuite-mp3.c	Fri Feb  6 20:31:47 2009
@@ -104,14 +104,14 @@
 
 void access_tracker_extract_mp3(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	
 	access_extract_files (data, "/mp3/access_%d.mp3", 4);
 }
 
 void test_tracker_extract_mp3_id3v1_basic(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_id3v1_basic[i].filename; i++) {
@@ -123,7 +123,7 @@
 
 void test_tracker_extract_mp3_id3v23_basic(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_id3v23_basic[i].filename; i++) {
@@ -135,7 +135,7 @@
 
 void test_tracker_extract_mp3_id3v23_tags(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_id3v23_tags[i].filename; i++) {
@@ -147,7 +147,7 @@
 
 void test_tracker_extract_mp3_id3v23_tcon(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_id3v23_tcon[i].filename; i++) {
@@ -159,7 +159,7 @@
 
 void test_tracker_extract_mp3_header_bitrate(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_header_bitrate[i].filename; i++) {
@@ -171,7 +171,7 @@
 
 void test_tracker_extract_mp3_header_bitrate_vbr(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_header_bitrate_vbr[i].filename; i++) {
@@ -183,7 +183,7 @@
 
 void test_tracker_extract_mp3_header_sampling(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_header_sampling[i].filename; i++) {
@@ -197,7 +197,7 @@
 
 void performance_tracker_extract_mp3(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	
 	performance_extract_files (data, "/mp3/perf_cbr_id3v1_%d.mp3", 1000);
 }

Modified: trunk/tests/tracker-extract/tracker-extract-testsuite-png.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-testsuite-png.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-testsuite-png.c	Fri Feb  6 20:31:47 2009
@@ -50,7 +50,7 @@
 
 void test_tracker_extract_png_basic_size(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_basic_size[i].filename; i++) {
@@ -62,7 +62,7 @@
 
 void test_tracker_extract_png_xmp_exif_orientation(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_xmp_exif_orientation[i].filename; i++) {
@@ -74,7 +74,7 @@
 
 void performance_tracker_extract_png(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	
 	performance_extract_files (data, "/png/perf_png_%d.png", 1000);
 }

Modified: trunk/tests/tracker-extract/tracker-extract-testsuite-tiff.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-testsuite-tiff.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-testsuite-tiff.c	Fri Feb  6 20:31:47 2009
@@ -55,7 +55,7 @@
 
 void test_tracker_extract_tiff_basic_size(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_basic_size[i].filename; i++) {
@@ -67,7 +67,7 @@
 
 void test_tracker_extract_tiff_exif_size(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_exif_size[i].filename; i++) {
@@ -81,7 +81,7 @@
 
 void test_tracker_extract_tiff_exif_orientation(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	guint i;
 
 	for (i=0; data_exif_orientation[i].filename; i++) {
@@ -93,7 +93,7 @@
 
 void performance_tracker_extract_tiff(gconstpointer data)
 {
-	const TrackerExtractorData *extractor = data;
+	const TrackerExtractData *extract = data;
 	
 	performance_extract_files (data, "/tiff/perf_tiff_%d.tif", 1000);
 }

Modified: trunk/tests/tracker-extract/tracker-extract-tiff-test.c
==============================================================================
--- trunk/tests/tracker-extract/tracker-extract-tiff-test.c	(original)
+++ trunk/tests/tracker-extract/tracker-extract-tiff-test.c	Fri Feb  6 20:31:47 2009
@@ -32,20 +32,19 @@
 int
 main (int argc, char **argv) {
 
+	TrackerExtractData *data;
 	gint result;
 
 	g_type_init ();
 	g_thread_init (NULL);
 	g_test_init (&argc, &argv, NULL);
 
-	TrackerExtractorData *data;
-
-	g_test_message ("Testing extractor functionality");
-	g_test_add_func ("/tracker-extract/tracker-extract-tiff/check-extractor-data",
-			 test_tracker_extract_check_extractor_data);
+	g_test_message ("Testing extract functionality");
+	g_test_add_func ("/tracker-extract/tracker-extract-tiff/check-extract-data",
+			 test_tracker_extract_check_extract_data);
 
 #if 0
-	data = tracker_test_extract_get_extractor ("image/tiff");
+	data = tracker_test_extract_get_extract ("image/tiff");
 
 	g_test_add_data_func ("/tracker-extract/tracker-extract-tiff/basic_size",
 			      data, test_tracker_extract_tiff_basic_size);



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