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