tracker r1887 - in branches/indexer-split: . src/libtracker-common src/trackerd tests/libtracker-common



Author: ifrade
Date: Thu Jul 17 17:13:47 2008
New Revision: 1887
URL: http://svn.gnome.org/viewvc/tracker?rev=1887&view=rev

Log:
Get registered service and field types from tracker_ontology_

Modified:
   branches/indexer-split/ChangeLog
   branches/indexer-split/src/libtracker-common/tracker-ontology.c
   branches/indexer-split/src/libtracker-common/tracker-ontology.h
   branches/indexer-split/src/trackerd/tracker-metadata.c
   branches/indexer-split/tests/libtracker-common/tracker-ontology-test.c

Modified: branches/indexer-split/src/libtracker-common/tracker-ontology.c
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-ontology.c	(original)
+++ branches/indexer-split/src/libtracker-common/tracker-ontology.c	Thu Jul 17 17:13:47 2008
@@ -470,6 +470,43 @@
 	return tracker_service_get_show_service_files (service);
 }
 
+
+GSList *
+tracker_ontology_registered_service_types (void)
+{
+	GList *service_types = NULL, *iter = NULL;
+	GSList *names = NULL;
+	TrackerService *service;
+
+	service_types = g_hash_table_get_values (service_table);
+
+	for (iter = service_types; iter != NULL; iter = iter->next) {
+		service = (TrackerService*)iter->data;
+		names = g_slist_prepend (names, g_strdup (tracker_service_get_name (service)));
+	}
+	return names;
+}
+
+GSList *
+tracker_ontology_registered_field_types (const gchar *service_type)
+{
+	GList *field_types = NULL, *iter = NULL;
+	GSList *names = NULL;
+	TrackerField *field;
+
+	field_types = g_hash_table_get_values (metadata_table);
+
+	for (iter = field_types; iter != NULL; iter = iter->next) {
+		field = (TrackerField*)iter->data;
+
+		if (service_type == NULL 
+		    || g_str_has_prefix (tracker_field_get_name (field), service_type)) {
+			names = g_slist_prepend (names, g_strdup (tracker_field_get_name (field)));
+		}
+	}
+	return names;
+}
+
 /*
  * Service directories
  */

Modified: branches/indexer-split/src/libtracker-common/tracker-ontology.h
==============================================================================
--- branches/indexer-split/src/libtracker-common/tracker-ontology.h	(original)
+++ branches/indexer-split/src/libtracker-common/tracker-ontology.h	Thu Jul 17 17:13:47 2008
@@ -51,6 +51,8 @@
 							       const gchar    *meta_name);
 gboolean        tracker_ontology_show_service_directories     (const gchar    *service_str);
 gboolean        tracker_ontology_show_service_files           (const gchar    *service_str);
+GSList *        tracker_ontology_registered_service_types     (void);
+GSList *        tracker_ontology_registered_field_types       (const gchar    *service_type);
 
 /* Service directories */
 GSList *        tracker_ontology_get_dirs_for_service_type    (const gchar    *service);

Modified: branches/indexer-split/src/trackerd/tracker-metadata.c
==============================================================================
--- branches/indexer-split/src/trackerd/tracker-metadata.c	(original)
+++ branches/indexer-split/src/trackerd/tracker-metadata.c	Thu Jul 17 17:13:47 2008
@@ -27,6 +27,7 @@
 #include <libtracker-common/tracker-log.h>
 #include <libtracker-common/tracker-field-data.h>
 #include <libtracker-common/tracker-utils.h>
+#include <libtracker-common/tracker-type-utils.h>
 
 #include <libtracker-db/tracker-db-dbus.h>
 #include <libtracker-db/tracker-db-manager.h>
@@ -353,10 +354,10 @@
 				       DBusGMethodInvocation  *context,
 				       GError                **error)
 {
-	TrackerDBInterface  *iface;
-	TrackerDBResultSet  *result_set;
 	guint                request_id;
 	gchar              **values = NULL;
+	const gchar         *requested = NULL;
+	GSList              *registered = NULL;
 	GError              *actual_error = NULL;
 
 	request_id = tracker_dbus_get_next_request_id ();
@@ -379,20 +380,14 @@
 		return;
 	}
 
-	/* Here it doesn't matter which one we ask, as long as it has common.db
-	 * attached. The service ones are cached connections, so we can use
-	 * those instead of asking for an individual-file connection (like what
-	 * the original code had) */
+	requested = (strcmp (service_type, "*") == 0 ? NULL : service_type);
 
-	/* iface = tracker_db_manager_get_db_interfaceX (TRACKER_DB_COMMON); */
+	registered = tracker_ontology_registered_field_types (requested);
 
-	iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
+	values = tracker_gslist_to_string_list (registered);
 
-	result_set = tracker_db_metadata_get_types (iface, service_type, FALSE);
-	if (result_set) {
-		values = tracker_dbus_query_result_to_strv (result_set, 1, NULL);
-		g_object_unref (result_set);
-	}
+	g_slist_foreach (registered, (GFunc) g_free, NULL);
+	g_slist_free (registered);
 
 	dbus_g_method_return (context, values);
 
@@ -409,33 +404,21 @@
 					 DBusGMethodInvocation  *context,
 					 GError                **error)
 {
-	TrackerDBInterface  *iface;
-	TrackerDBResultSet  *result_set;
 	guint                request_id;
 	gchar              **values = NULL;
+	GSList              *registered = NULL;
 						 
 	request_id = tracker_dbus_get_next_request_id ();
 
 	tracker_dbus_request_new (request_id,
 				  "DBus request to get registered classes");
 
-	/* Here it doesn't matter which one we ask, as long as it has common.db
-	 * attached. The service ones are cached connections, so we can use
-	 * those instead of asking for an individual-file connection (like what
-	 * the original code had) */
-
-	/* iface = tracker_db_manager_get_db_interfaceX (TRACKER_DB_COMMON); */
-
-	iface = tracker_db_manager_get_db_interface_by_service (TRACKER_DB_FOR_FILE_SERVICE);
-
-	result_set = tracker_db_exec_proc (iface, 
-					   "SelectRegisteredClasses", 
-					   NULL);
-	
-	if (result_set) {
-		values = tracker_dbus_query_result_to_strv (result_set, 0, NULL);
-		g_object_unref (result_set);
-	}
+	registered = tracker_ontology_registered_service_types ();
+
+	values = tracker_gslist_to_string_list (registered);
+
+	g_slist_foreach (registered, (GFunc) g_free, NULL);
+	g_slist_free (registered);
 
 	dbus_g_method_return (context, values);
 

Modified: branches/indexer-split/tests/libtracker-common/tracker-ontology-test.c
==============================================================================
--- branches/indexer-split/tests/libtracker-common/tracker-ontology-test.c	(original)
+++ branches/indexer-split/tests/libtracker-common/tracker-ontology-test.c	Thu Jul 17 17:13:47 2008
@@ -23,6 +23,7 @@
 #include <glib.h>
 #include <glib/gtestutils.h>
 #include <tracker-test-helpers.h>
+#include <string.h>
 
 gboolean
 test_cmp_servicedef_equals (TrackerService *one, 
@@ -92,6 +93,12 @@
 	return def;
 }
 
+static gboolean
+element_in_list (GSList *list, gchar *element) 
+{
+	return (g_slist_find_custom (list, element, (GCompareFunc)strcmp) != NULL);
+}
+
 
 static GSList *
 array_to_list (char **array)                                                                          
@@ -226,12 +233,19 @@
 static void
 test_get_service_type_for_mime ()
 {
-	g_assert ( g_str_equal ("Parent service", 
-				tracker_ontology_get_service_type_for_mime ("application/rtf")));
-	g_assert ( g_str_equal ("Parent service",
-				tracker_ontology_get_service_type_for_mime ("images/jpeg")));
-	g_assert ( g_str_equal ("Other",
-				tracker_ontology_get_service_type_for_mime ("noexists/bla")));
+	gchar *value;
+
+	value = tracker_ontology_get_service_type_for_mime ("application/rtf");
+	g_assert ( g_str_equal ("Parent service", value));
+	g_free (value);
+
+	value = tracker_ontology_get_service_type_for_mime ("images/jpeg");
+	g_assert ( g_str_equal ("Parent service", value));
+	g_free (value);
+
+	value = tracker_ontology_get_service_type_for_mime ("noexists/bla");
+	g_assert ( g_str_equal ("Other", value));
+	g_free (value);
 }
 
 
@@ -303,6 +317,55 @@
         g_assert (!tracker_ontology_get_field_def ("nooooo"));
 }
 
+static void
+test_get_registered_service_types (void)
+{
+	GSList *service_types = NULL;
+
+	service_types = tracker_ontology_registered_service_types ();
+
+	g_assert_cmpint (7, ==, g_slist_length (service_types));
+	
+	g_assert (element_in_list (service_types, "Applications"));
+
+	g_slist_foreach (service_types, (GFunc)g_free, NULL);
+	g_slist_free (service_types);
+
+}
+
+static void
+test_get_registered_field_types (void)
+{
+	GSList *field_types = NULL;
+	
+	/* All registered field types */
+	field_types = tracker_ontology_registered_field_types (NULL);
+
+	g_assert_cmpint (1 ,==, g_slist_length (field_types));
+
+	g_assert (element_in_list (field_types, "App.Title"));
+
+	g_slist_foreach (field_types, (GFunc)g_free, NULL);
+	g_slist_free (field_types);
+
+	/* Music field types */
+	field_types = tracker_ontology_registered_field_types ("Music");
+
+	g_assert (!field_types);
+
+
+	/* App field types */
+	field_types = tracker_ontology_registered_field_types ("App");
+
+	g_assert_cmpint (1 ,==, g_slist_length (field_types));
+
+	g_assert (element_in_list (field_types, "App.Title"));
+
+	g_slist_foreach (field_types, (GFunc)g_free, NULL);
+	g_slist_free (field_types);
+
+}
+
 int
 main (int argc, char **argv) {
 
@@ -340,6 +403,11 @@
         g_test_add_func ("/trackerd/tracker-services/test_field_in_ontology",
                          test_field_in_ontology);
 
+	g_test_add_func ("/trackerd/tracker-services/test_get_all_registered_service_types",
+			 test_get_registered_service_types);
+	g_test_add_func ("/trackerd/tracker-services/test_get_all_registered_field_types",
+			 test_get_registered_field_types);
+
         result = g_test_run ();
         
         tracker_ontology_shutdown ();



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