This is my first patch, so please be gentle :-)

Implements .desktop file indexing as Application services.
Nothing is done to libtracker to support querying, yet. But it's a start.

Best regards
/Marcus
Index: src/trackerd/tracker-metadata.c
===================================================================
--- src/trackerd/tracker-metadata.c	(revision 514)
+++ src/trackerd/tracker-metadata.c	(working copy)
@@ -138,9 +138,6 @@
 				"text/x-tcl"
 };
 
-
-
-
 static MetadataFileType
 tracker_get_metadata_type (const char *mime)
 {
Index: src/trackerd/tracker-db.c
===================================================================
--- src/trackerd/tracker-db.c	(revision 514)
+++ src/trackerd/tracker-db.c	(working copy)
@@ -22,6 +22,9 @@
 #include <time.h>
 #include <glib/gstdio.h>
 
+#include <config.h>
+#include <glib/gi18n-lib.h>
+
 #include "tracker-db.h"
 #include "tracker-email.h"
 #include "tracker-metadata.h"
@@ -1032,8 +1035,90 @@
 void
 tracker_db_index_application (DBConnection *db_con, FileInfo *info)
 {
+	/* Index application metadata from .desktop files */
+	
+	GHashTable	*meta_table;
 
-/* todo */
+	GError *error = NULL;
+	GKeyFile *key_file = NULL;
+
+	gchar *type = NULL;
+	gchar *tmp_str = NULL;
+	gchar desktop_entry[] = { "Desktop Entry" };
+	const gchar * const *locale_array;
+	locale_array = g_get_language_names();
+
+	key_file = g_key_file_new();
+
+	if ( g_key_file_load_from_file( key_file, info->uri, G_KEY_FILE_NONE, &error) == TRUE) {
+	
+		type = g_key_file_get_string(key_file, desktop_entry, "Type", NULL);
+
+		/* We're only interested in apps */
+		if ( type != NULL && strcmp(type, "Application") == 0 ) {
+
+			meta_table = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
+
+			g_hash_table_insert (meta_table, "App:LocaleName", g_strdup(locale_array[0]));
+
+			if((tmp_str = g_key_file_get_locale_string(
+					key_file,
+					desktop_entry,
+					"Name",
+					locale_array[0],
+					NULL)) != NULL) {
+				
+				g_hash_table_insert (meta_table, "App:Name", tmp_str);
+			}
+
+			if((tmp_str = g_key_file_get_locale_string(
+					key_file,
+					desktop_entry,
+					"GenericName",
+					locale_array[0],
+					NULL)) != NULL) {
+				
+				g_hash_table_insert (meta_table, "App:GenericName", tmp_str);
+			}
+
+			if((tmp_str = g_key_file_get_locale_string(
+					key_file,
+					desktop_entry,
+					"Comment",
+					locale_array[0],
+					NULL)) != NULL) {
+				
+				g_hash_table_insert (meta_table, "App:Comment", tmp_str);
+			}
+
+			if((tmp_str = g_key_file_get_locale_string(
+					key_file,
+					desktop_entry,
+					"Categories",
+					locale_array[0],
+					NULL)) != NULL) {
+				
+				g_hash_table_insert (meta_table, "App:Categories", tmp_str);
+			}
+
+			if((tmp_str = g_key_file_get_locale_string(
+					key_file,
+					desktop_entry,
+					"Exec",
+					locale_array[0],
+					NULL)) != NULL) {
+				
+				g_hash_table_insert (meta_table, "App:Exec", tmp_str);
+			}
+
+			tracker_db_index_service (db_con, info, "Applications", meta_table, NULL, FALSE, TRUE, FALSE, FALSE);
+
+			g_hash_table_destroy (meta_table);
+		}
+
+		g_key_file_free(key_file);
+		g_free(type);
+	}
 }
 
 
Index: src/trackerd/tracker-utils.c
===================================================================
--- src/trackerd/tracker-utils.c	(revision 514)
+++ src/trackerd/tracker-utils.c	(working copy)
@@ -102,7 +102,6 @@
 	return g_strdup (def->parent);
 }
 
-
 int
 tracker_get_id_for_service (const char *service)
 {
@@ -1304,6 +1303,11 @@
 {
 	GSList *tmp;
 
+	/* .desktop files are Applications */
+	if (g_str_has_suffix (uri, ".desktop")) {
+		return g_strdup ("Applications");	
+	}
+
 	/* check service dir list to see if a prefix */
 	for (tmp = tracker->service_directory_list; tmp; tmp = tmp->next) {
 		char *prefix;
Index: src/tracker-extract/tracker-extract.c
===================================================================
--- src/tracker-extract/tracker-extract.c	(revision 514)
+++ src/tracker-extract/tracker-extract.c	(working copy)
@@ -134,6 +134,7 @@
 	{ "image/jpeg",					tracker_extract_exif		},
 #endif
 	{ "image/*",					tracker_extract_imagemagick	},
+
 	{ "",						NULL				}
 };
   
Index: data/sqlite-service-types.sql
===================================================================
--- data/sqlite-service-types.sql	(revision 514)
+++ data/sqlite-service-types.sql	(working copy)
@@ -56,4 +56,5 @@
 insert Into ServiceTypes (TypeID, MinID, MaxID, TypeClass, TypeName, Description, MainService) values (41,41,41, 'Conversations', 'GaimConversations', 'Gaim Conversations', 0);
 insert Into ServiceTypes (TypeID, MinID, MaxID, TypeClass, TypeName, Description, MainService) values (42,42,42, 'Conversations', 'XChatConversations', 'XChat Conversations', 0);
 
+
 insert Into ServiceTypes (TypeID, MinID, MaxID, TypeClass, TypeName, Description, MainService) values (50,50,50, 'Applications', 'Applications', 'Applications', 1);
Index: data/sqlite-metadata.sql
===================================================================
--- data/sqlite-metadata.sql	(revision 514)
+++ data/sqlite-metadata.sql	(working copy)
@@ -202,4 +202,18 @@
 insert Into MetaDataChildren (MetaDataID, ChildID) select P.ID, C.ID from MetaDataTypes P, MetaDataTypes C where P.MetaName = 'Email:Recipient' and C.MetaName = 'Email:SentTo';
 insert Into MetaDataChildren (MetaDataID, ChildID) select P.ID, C.ID from MetaDataTypes P, MetaDataTypes C where P.MetaName = 'Email:Recipient' and C.MetaName = 'Email:CC';
 
+/* Application metadata */
+
+insert Into MetaDataTypes (MetaName, DatatypeID, MultipleValues, Weight) values  ('App:Name', 0, 0, 20);
+insert Into MetaDataTypes (MetaName, DatatypeID, MultipleValues, Weight) values  ('App:GenericName', 0, 0, 15);
+insert Into MetaDataTypes (MetaName, DatatypeID, MultipleValues, Weight) values  ('App:Comment', 0, 0, 10);
+insert Into MetaDataTypes (MetaName, DatatypeID, MultipleValues, Weight) values  ('App:Exec', 0, 0, 10);
+insert Into MetaDataTypes (MetaName, DatatypeID, MultipleValues, Weight) values  ('App:Categories', 0, 0, 1);
+insert Into MetaDataTypes (MetaName, DatatypeID, MultipleValues, Weight) values  ('App:LocaleName', 0, 0, 0);
+
+insert Into MetaDataChildren (MetaDataID, ChildID) select P.ID, C.ID from MetaDataTypes P, MetaDataTypes C where P.MetaName = 'DC:Title' and C.MetaName = 'App:Name';
+insert Into MetaDataChildren (MetaDataID, ChildID) select P.ID, C.ID from MetaDataTypes P, MetaDataTypes C where P.MetaName = 'DC:Description' and C.MetaName = 'App:GenericName';
+insert Into MetaDataChildren (MetaDataID, ChildID) select P.ID, C.ID from MetaDataTypes P, MetaDataTypes C where P.MetaName = 'DC:Comments' and C.MetaName = 'App:Comment';
+
+
 end transaction;
_______________________________________________
tracker-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/tracker-list

Reply via email to