[tracker] tracker-miner-fs: Update indexed countries when config file changes
- From: Martyn James Russell <mr src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [tracker] tracker-miner-fs: Update indexed countries when config file changes
- Date: Sun, 7 Feb 2010 12:11:12 +0000 (UTC)
commit 39beff0ef5b186f5fdf61f44016385eacbb2e9ea
Author: Martyn Russell <martyn lanedo com>
Date: Sat Feb 6 16:34:01 2010 +0100
tracker-miner-fs: Update indexed countries when config file changes
src/libtracker-miner/tracker-miner-fs.c | 36 ++++-
src/libtracker-miner/tracker-miner-fs.h | 3 +-
src/tracker-miner-fs/tracker-miner-files.c | 202 ++++++++++++++++++++-------
3 files changed, 181 insertions(+), 60 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index 8b02ac4..fe2d837 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -2509,18 +2509,42 @@ tracker_miner_fs_get_throttle (TrackerMinerFS *fs)
}
/**
- * tracker_miner_fs_get_throttle:
+ * tracker_miner_fs_get_directories:
* @fs: a #TrackerMinerFS
+ * @recurse: whether the directory is inspected recursively
*
- * Gets the current throttle value. see tracker_miner_fs_set_throttle().
+ * Gets the directories which are queued to be inspected either
+ * recursively or non-recursively according to @recurse.
*
- * Returns: current throttle value.
+ * See: tracker_miner_fs_directory_add().
+ *
+ * Returns: a new %GList pointer which must be freed with
+ * g_list_free(). The data in the list consists of referenced %GFile
+ * pointers which must be unreferenced when finished with.
**/
GList *
-tracker_miner_fs_get_directories (TrackerMinerFS *fs)
+tracker_miner_fs_get_directories (TrackerMinerFS *fs,
+ gboolean recurse)
{
- g_return_val_if_fail (TRACKER_IS_MINER_FS (fs), 0);
+ GList *l, *dirs;
+
+ g_return_val_if_fail (TRACKER_IS_MINER_FS (fs), NULL);
+
+ dirs = NULL;
+
+ for (l = fs->private->directories; l; l = l->next) {
+ DirectoryData *dd = l->data;
+
+ if (!dd) {
+ g_warning ("Expected DirectoryData to be non-NULL");
+ continue;
+ }
- return fs->private->directories;
+ if (dd->recurse == recurse) {
+ dirs = g_list_prepend (dirs, g_object_ref (dd->file));
+ }
+ }
+
+ return g_list_reverse (dirs);
}
diff --git a/src/libtracker-miner/tracker-miner-fs.h b/src/libtracker-miner/tracker-miner-fs.h
index 456dba7..14426ee 100644
--- a/src/libtracker-miner/tracker-miner-fs.h
+++ b/src/libtracker-miner/tracker-miner-fs.h
@@ -104,7 +104,8 @@ void tracker_miner_fs_file_notify (TrackerMinerFS *fs,
void tracker_miner_fs_set_throttle (TrackerMinerFS *fs,
gdouble throttle);
gdouble tracker_miner_fs_get_throttle (TrackerMinerFS *fs);
-GList * tracker_miner_fs_get_directories (TrackerMinerFS *fs);
+GList * tracker_miner_fs_get_directories (TrackerMinerFS *fs,
+ gboolean recurse);
G_END_DECLS
diff --git a/src/tracker-miner-fs/tracker-miner-files.c b/src/tracker-miner-fs/tracker-miner-files.c
index 021451a..920d608 100644
--- a/src/tracker-miner-fs/tracker-miner-files.c
+++ b/src/tracker-miner-fs/tracker-miner-files.c
@@ -84,63 +84,65 @@ enum {
PROP_CONFIG
};
-static void miner_files_set_property (GObject *object,
- guint param_id,
- const GValue *value,
- GParamSpec *pspec);
-static void miner_files_get_property (GObject *object,
- guint param_id,
- GValue *value,
- GParamSpec *pspec);
-static void miner_files_finalize (GObject *object);
-static void miner_files_constructed (GObject *object);
-
-static void mount_pre_unmount_cb (GVolumeMonitor *volume_monitor,
- GMount *mount,
- TrackerMinerFiles *mf);
+static void miner_files_set_property (GObject *object,
+ guint param_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void miner_files_get_property (GObject *object,
+ guint param_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void miner_files_finalize (GObject *object);
+static void miner_files_constructed (GObject *object);
+static void mount_pre_unmount_cb (GVolumeMonitor *volume_monitor,
+ GMount *mount,
+ TrackerMinerFiles *mf);
#ifdef HAVE_HAL
-static void mount_point_added_cb (TrackerStorage *storage,
- const gchar *udi,
- const gchar *mount_point,
- gpointer user_data);
-static void mount_point_removed_cb (TrackerStorage *storage,
- const gchar *udi,
- const gchar *mount_point,
- gpointer user_data);
-
-static void check_battery_status (TrackerMinerFiles *fs);
-static void battery_status_cb (GObject *object,
- GParamSpec *pspec,
- gpointer user_data);
+static void mount_point_added_cb (TrackerStorage *storage,
+ const gchar *udi,
+ const gchar *mount_point,
+ gpointer user_data);
+static void mount_point_removed_cb (TrackerStorage *storage,
+ const gchar *udi,
+ const gchar *mount_point,
+ gpointer user_data);
+static void check_battery_status (TrackerMinerFiles *fs);
+static void battery_status_cb (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data);
#endif
-static void init_mount_points (TrackerMinerFiles *miner);
-static void disk_space_check_start (TrackerMinerFiles *mf);
-static void disk_space_check_stop (TrackerMinerFiles *mf);
-static void low_disk_space_limit_cb (GObject *gobject,
- GParamSpec *arg1,
- gpointer user_data);
-
-static DBusGProxy * extractor_create_proxy (void);
-
-static gboolean miner_files_check_file (TrackerMinerFS *fs,
- GFile *file);
-static gboolean miner_files_check_directory (TrackerMinerFS *fs,
- GFile *file);
-static gboolean miner_files_check_directory_contents (TrackerMinerFS *fs,
- GFile *parent,
- GList *children);
-static gboolean miner_files_process_file (TrackerMinerFS *fs,
- GFile *file,
- TrackerSparqlBuilder *sparql,
- GCancellable *cancellable);
-static gboolean miner_files_monitor_directory (TrackerMinerFS *fs,
- GFile *file);
-static gboolean miner_files_writeback_file (TrackerMinerFS *fs,
- GFile *file,
- TrackerSparqlBuilder *sparql,
- GCancellable *cancellable);
+static void init_mount_points (TrackerMinerFiles *miner);
+static void disk_space_check_start (TrackerMinerFiles *mf);
+static void disk_space_check_stop (TrackerMinerFiles *mf);
+static void low_disk_space_limit_cb (GObject *gobject,
+ GParamSpec *arg1,
+ gpointer user_data);
+static void index_recursive_directories_cb (GObject *gobject,
+ GParamSpec *arg1,
+ gpointer user_data);
+static void index_single_directories_cb (GObject *gobject,
+ GParamSpec *arg1,
+ gpointer user_data);
+static DBusGProxy *extractor_create_proxy (void);
+static gboolean miner_files_check_file (TrackerMinerFS *fs,
+ GFile *file);
+static gboolean miner_files_check_directory (TrackerMinerFS *fs,
+ GFile *file);
+static gboolean miner_files_check_directory_contents (TrackerMinerFS *fs,
+ GFile *parent,
+ GList *children);
+static gboolean miner_files_process_file (TrackerMinerFS *fs,
+ GFile *file,
+ TrackerSparqlBuilder *sparql,
+ GCancellable *cancellable);
+static gboolean miner_files_monitor_directory (TrackerMinerFS *fs,
+ GFile *file);
+static gboolean miner_files_writeback_file (TrackerMinerFS *fs,
+ GFile *file,
+ TrackerSparqlBuilder *sparql,
+ GCancellable *cancellable);
G_DEFINE_TYPE (TrackerMinerFiles, tracker_miner_files, TRACKER_TYPE_MINER_FS)
@@ -419,6 +421,12 @@ miner_files_constructed (GObject *object)
g_signal_connect (mf->private->config, "notify::low-disk-space-limit",
G_CALLBACK (low_disk_space_limit_cb),
mf);
+ g_signal_connect (mf->private->config, "notify::index-recursive-directories",
+ G_CALLBACK (index_recursive_directories_cb),
+ mf);
+ g_signal_connect (mf->private->config, "notify::index-single-directories",
+ G_CALLBACK (index_single_directories_cb),
+ mf);
g_slist_foreach (mounts, (GFunc) g_free, NULL);
g_slist_free (mounts);
@@ -943,6 +951,94 @@ low_disk_space_limit_cb (GObject *gobject,
disk_space_check_cb (mf);
}
+static void
+update_directories_from_new_config (TrackerMinerFS *mf,
+ TrackerConfig *config,
+ gboolean recurse)
+{
+ GList *old_dirs, *l;
+ GSList *new_dirs, *sl;
+
+ old_dirs = tracker_miner_fs_get_directories (TRACKER_MINER_FS (mf), recurse);
+
+ if (recurse) {
+ new_dirs = tracker_config_get_index_recursive_directories (config);
+ } else {
+ new_dirs = tracker_config_get_index_single_directories (config);
+ }
+
+ /* First remove all directories removed from the config */
+ for (l = old_dirs; l; l = l->next) {
+ gchar *path;
+
+ path = g_file_get_path (l->data);
+
+ /* If we are not still in the list, remove the dir */
+ if (!tracker_string_in_gslist (path, new_dirs)) {
+ tracker_miner_fs_directory_remove (TRACKER_MINER_FS (mf),
+ l->data);
+ }
+
+ g_free (path);
+ }
+
+ /* Second add directories which are new */
+ for (sl = new_dirs; sl; sl = sl->next) {
+ const gchar *path;
+ gboolean found;
+
+ path = sl->data;
+ found = FALSE;
+
+ for (l = old_dirs; l && !found; l = l->next) {
+ GFile *old_file;
+ gchar *old_path;
+
+ old_file = l->data;
+ old_path = g_file_get_path (old_file);
+
+ if (strcmp (old_path, path) == 0) {
+ found = TRUE;
+ }
+
+ g_free (old_path);
+ }
+
+ if (!found) {
+ GFile *file;
+
+ file = g_file_new_for_path (path);
+ tracker_miner_fs_directory_add (TRACKER_MINER_FS (mf),
+ file,
+ recurse);
+ g_object_unref (file);
+ }
+ }
+
+ g_list_foreach (old_dirs, (GFunc) g_object_unref, NULL);
+ g_list_free (old_dirs);
+}
+
+static void
+index_recursive_directories_cb (GObject *gobject,
+ GParamSpec *arg1,
+ gpointer user_data)
+{
+ update_directories_from_new_config (TRACKER_MINER_FS (user_data),
+ TRACKER_CONFIG (gobject),
+ TRUE);
+}
+
+static void
+index_single_directories_cb (GObject *gobject,
+ GParamSpec *arg1,
+ gpointer user_data)
+{
+ update_directories_from_new_config (TRACKER_MINER_FS (user_data),
+ TRACKER_CONFIG (gobject),
+ FALSE);
+}
+
static gboolean
miner_files_check_file (TrackerMinerFS *fs,
GFile *file)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]