[tracker/tracker-0.10] tracker-miner-fs: Use XDG locations not static values for desktop files



commit ff9f075778f048e7e5be16c0494b7318c176dcca
Author: Martyn Russell <martyn lanedo com>
Date:   Thu Aug 18 12:18:20 2011 +0100

    tracker-miner-fs: Use XDG locations not static values for desktop files
    
    We were using just $prefix/share/{applications|desktop-directories}. Now we
    use {applications|desktop-directories} for all XDG system dirs and XDG user
    dirs. This list can include for example:
    
    : Setting up applications to iterate from XDG system directories
    :   Adding:'/usr/share/gnome-classic/applications'
    :   Adding:'/usr/share/gnome-classic/desktop-directories'
    :   Adding:'/usr/share/gnome/applications'
    :   Adding:'/usr/share/gnome/desktop-directories'
    :   Adding:'/usr/local/share/applications'
    :   Adding:'/usr/local/share/desktop-directories'
    :   Adding:'/usr/share/applications'
    :   Adding:'/usr/share/desktop-directories'
    : Setting up applications to iterate from XDG user directories
    :   Adding:'/home/martyn/.local/share/applications'
    :   Adding:'/home/martyn/.local/share/desktop-directories'
    : Setting up applications to iterate from MeegoTouch directories
    :   Adding:'/usr/lib/duicontrolpanel/'
    
    Previously the list was 3 locations. So now more applications are indexed.
    
    This fixes NB#256958

 src/miners/fs/tracker-miner-applications.c |   64 +++++++++++++++++++++++----
 1 files changed, 54 insertions(+), 10 deletions(-)
---
diff --git a/src/miners/fs/tracker-miner-applications.c b/src/miners/fs/tracker-miner-applications.c
index 1762f13..ee3fe52 100644
--- a/src/miners/fs/tracker-miner-applications.c
+++ b/src/miners/fs/tracker-miner-applications.c
@@ -106,14 +106,44 @@ miner_applications_initable_iface_init (GInitableIface *iface)
 	iface->init = miner_applications_initable_init;
 }
 
+static void
+miner_applications_basedir_add (TrackerMinerFS *fs,
+                                const gchar    *basedir)
+{
+	GFile *file;
+	gchar *path;
+
+	/* Add $dir/applications */
+	path = g_build_filename (basedir, "applications", NULL);
+	file = g_file_new_for_path (path);
+	g_message ("  Adding:'%s'", path);
+	tracker_miner_fs_directory_add (fs, file, TRUE);
+	g_object_unref (file);
+	g_free (path);
+
+	/* Add $dir/desktop-directories */
+	path = g_build_filename (basedir, "desktop-directories", NULL);
+	file = g_file_new_for_path (path);
+	g_message ("  Adding:'%s'", path);
+	tracker_miner_fs_directory_add (fs, file, TRUE);
+	g_object_unref (file);
+	g_free (path);
+}
+
 static gboolean
 miner_applications_initable_init (GInitable     *initable,
                                   GCancellable  *cancellable,
                                   GError       **error)
 {
 	TrackerMinerFS *fs;
-	GFile *file;
 	GError *inner_error = NULL;
+#ifdef HAVE_MEEGOTOUCH
+	GFile *file;
+	const gchar *path;
+#endif /* HAVE_MEEGOTOUCH */
+	const gchar * const *xdg_dirs;
+	const gchar *user_data_dir;
+	gint i;
 
 	fs = TRACKER_MINER_FS (initable);
 
@@ -123,23 +153,37 @@ miner_applications_initable_init (GInitable     *initable,
 		return FALSE;
 	}
 
-	file = g_file_new_for_path ("/usr/share/applications/");
-	tracker_miner_fs_directory_add (fs, file, TRUE);
-	g_object_unref (file);
+	g_message ("Setting up applications to iterate from XDG system directories");
 
-	file = g_file_new_for_path ("/usr/share/desktop-directories/");
-	tracker_miner_fs_directory_add (fs, file, TRUE);
-	g_object_unref (file);
+	/* Add all XDG system and local dirs */
+	xdg_dirs = g_get_system_data_dirs ();
+
+	for (i = 0; xdg_dirs[i]; i++) {
+		miner_applications_basedir_add (fs, xdg_dirs[i]);
+	}
+
+	g_message ("Setting up applications to iterate from XDG user directories");
+
+	user_data_dir = g_get_user_data_dir ();
+	if (user_data_dir) {
+		miner_applications_basedir_add (fs, user_data_dir);
+	}
 
 #ifdef HAVE_MEEGOTOUCH
-	file = g_file_new_for_path ("/usr/lib/duicontrolpanel/");
+	/* NOTE: We don't use miner_applications_basedir_add() for
+	 * this location because it is unique to MeeGoTouch.
+	 */
+	path = "/usr/lib/duicontrolpanel/";
+
+	g_message ("Setting up applications to iterate from MeegoTouch directories");
+	g_message ("  Adding:'%s'", path);
+
+	file = g_file_new_for_path (path);
 	tracker_miner_fs_directory_add (fs, file, TRUE);
 	g_object_unref (file);
 	tracker_miner_applications_meego_init ();
 #endif /* HAVE_MEEGOTOUCH */
 
-	/* FIXME: Check XDG_DATA_DIRS and also process applications in there */
-
 	return TRUE;
 }
 



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