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 #include +#include +#include + #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;