[tracker/miner-directory-flags: 1/4] libtracker-miner: Introduce TrackerDirectoryFlags.
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker/miner-directory-flags: 1/4] libtracker-miner: Introduce TrackerDirectoryFlags.
- Date: Mon, 25 Apr 2011 16:12:56 +0000 (UTC)
commit 2110330e789d56f0b8a5c53803b68c43cf5ee2f0
Author: Carlos Garnacho <carlosg gnome org>
Date: Mon Apr 25 15:13:07 2011 +0200
libtracker-miner: Introduce TrackerDirectoryFlags.
The recurse boolean parameter in tracker_miner_fs_directory_add()
has been replaced by these flags, so miner implementations can gain
further control on how things are performed.
src/libtracker-miner/tracker-miner-fs.c | 45 ++++++++++++++++------------
src/libtracker-miner/tracker-miner-fs.h | 11 +++++--
src/miners/fs/tracker-miner-applications.c | 6 ++--
src/miners/fs/tracker-miner-files.c | 19 +++++++----
4 files changed, 49 insertions(+), 32 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index e0dff01..dbb5f88 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -119,8 +119,8 @@ typedef struct {
typedef struct {
GFile *file;
- guint recurse : 1;
- guint ref_count : 7;
+ guint16 ref_count;
+ guint16 flags;
} DirectoryData;
typedef struct {
@@ -288,8 +288,8 @@ static void miner_paused (TrackerMiner
static void miner_resumed (TrackerMiner *miner);
static void miner_ignore_next_update (TrackerMiner *miner,
const GStrv subjects);
-static DirectoryData *directory_data_new (GFile *file,
- gboolean recurse);
+static DirectoryData *directory_data_new (GFile *file,
+ TrackerDirectoryFlags flags);
static DirectoryData *directory_data_ref (DirectoryData *dd);
static void directory_data_unref (DirectoryData *dd);
static ItemMovedData *item_moved_data_new (GFile *file,
@@ -996,15 +996,15 @@ miner_ignore_next_update (TrackerMiner *miner, const GStrv urls)
static DirectoryData *
-directory_data_new (GFile *file,
- gboolean recurse)
+directory_data_new (GFile *file,
+ TrackerDirectoryFlags flags)
{
DirectoryData *dd;
dd = g_slice_new (DirectoryData);
dd->file = g_object_ref (file);
- dd->recurse = recurse;
+ dd->flags = flags;
dd->ref_count = 1;
return dd;
@@ -1349,7 +1349,8 @@ find_config_directory (TrackerMinerFS *fs,
dirs = dirs->next;
if (g_file_equal (data->file, file) ||
- (data->recurse && (g_file_has_prefix (file, data->file)))) {
+ ((data->flags & TRACKER_DIRECTORY_RECURSE) != 0 &&
+ g_file_has_prefix (file, data->file))) {
return data;
}
}
@@ -3742,6 +3743,7 @@ crawl_directories_cb (gpointer user_data)
{
TrackerMinerFS *fs = user_data;
gchar *path, *path_utf8;
+ gboolean recurse;
gchar *str;
if (fs->private->current_directory) {
@@ -3783,7 +3785,9 @@ crawl_directories_cb (gpointer user_data)
path_utf8 = g_filename_to_utf8 (path, -1, NULL, NULL, NULL);
g_free (path);
- if (fs->private->current_directory->recurse) {
+ recurse = (fs->private->current_directory->flags & TRACKER_DIRECTORY_RECURSE) != 0;
+
+ if (recurse) {
str = g_strdup_printf ("Crawling recursively directory '%s'", path_utf8);
} else {
str = g_strdup_printf ("Crawling single directory '%s'", path_utf8);
@@ -3804,7 +3808,7 @@ crawl_directories_cb (gpointer user_data)
if (tracker_crawler_start (fs->private->crawler,
fs->private->current_directory->file,
- fs->private->current_directory->recurse)) {
+ recurse)) {
/* Crawler when restart the idle function when done */
fs->private->is_crawling = TRUE;
fs->private->crawl_directories_id = 0;
@@ -3885,7 +3889,7 @@ should_recurse_for_directory (TrackerMinerFS *fs,
data = dirs->data;
- if (data->recurse &&
+ if ((data->flags & TRACKER_DIRECTORY_RECURSE) != 0 &&
(g_file_equal (file, data->file) ||
g_file_has_prefix (file, data->file))) {
/* File is inside a recursive dir */
@@ -3909,7 +3913,7 @@ directory_compare_cb (gconstpointer a,
DirectoryData *ddb = (DirectoryData *) b;
return (g_file_equal (dda->file, ddb->file) ||
- (dda->recurse &&
+ ((dda->flags & TRACKER_DIRECTORY_RECURSE) != 0 &&
g_file_has_prefix (ddb->file, dda->file))) ? 0 : -1;
}
@@ -3922,11 +3926,14 @@ static void
tracker_miner_fs_directory_add_internal (TrackerMinerFS *fs,
GFile *file)
{
+ TrackerDirectoryFlags flags = 0;
DirectoryData *data;
- gboolean recurse;
- recurse = should_recurse_for_directory (fs, file);
- data = directory_data_new (file, recurse);
+ if (should_recurse_for_directory (fs, file)) {
+ flags |= TRACKER_DIRECTORY_RECURSE;
+ }
+
+ data = directory_data_new (file, flags);
/* Only add if not already there */
if (!g_list_find_custom (fs->private->directories,
@@ -3953,16 +3960,16 @@ tracker_miner_fs_directory_add_internal (TrackerMinerFS *fs,
* Since: 0.8
**/
void
-tracker_miner_fs_directory_add (TrackerMinerFS *fs,
- GFile *file,
- gboolean recurse)
+tracker_miner_fs_directory_add (TrackerMinerFS *fs,
+ GFile *file,
+ TrackerDirectoryFlags flags)
{
DirectoryData *dir_data;
g_return_if_fail (TRACKER_IS_MINER_FS (fs));
g_return_if_fail (G_IS_FILE (file));
- dir_data = directory_data_new (file, recurse);
+ dir_data = directory_data_new (file, flags);
/* New directory to add in config_directories? */
if (!g_list_find_custom (fs->private->config_directories,
diff --git a/src/libtracker-miner/tracker-miner-fs.h b/src/libtracker-miner/tracker-miner-fs.h
index e26c71f..76f734d 100644
--- a/src/libtracker-miner/tracker-miner-fs.h
+++ b/src/libtracker-miner/tracker-miner-fs.h
@@ -45,6 +45,11 @@ G_BEGIN_DECLS
typedef struct _TrackerMinerFS TrackerMinerFS;
typedef struct _TrackerMinerFSPrivate TrackerMinerFSPrivate;
+typedef enum {
+ TRACKER_DIRECTORY_NONE = 0,
+ TRACKER_DIRECTORY_RECURSE = 1 << 0,
+} TrackerDirectoryFlags;
+
/**
* TrackerMinerFS:
*
@@ -107,9 +112,9 @@ typedef struct {
} TrackerMinerFSClass;
GType tracker_miner_fs_get_type (void) G_GNUC_CONST;
-void tracker_miner_fs_directory_add (TrackerMinerFS *fs,
- GFile *file,
- gboolean recurse);
+void tracker_miner_fs_directory_add (TrackerMinerFS *fs,
+ GFile *file,
+ TrackerDirectoryFlags flags);
gboolean tracker_miner_fs_directory_remove (TrackerMinerFS *fs,
GFile *file);
gboolean tracker_miner_fs_directory_remove_full (TrackerMinerFS *fs,
diff --git a/src/miners/fs/tracker-miner-applications.c b/src/miners/fs/tracker-miner-applications.c
index 442dd4b..03489ed 100644
--- a/src/miners/fs/tracker-miner-applications.c
+++ b/src/miners/fs/tracker-miner-applications.c
@@ -126,16 +126,16 @@ miner_applications_initable_init (GInitable *initable,
}
file = g_file_new_for_path ("/usr/share/applications/");
- tracker_miner_fs_directory_add (fs, file, TRUE);
+ tracker_miner_fs_directory_add (fs, file, TRACKER_DIRECTORY_RECURSE);
g_object_unref (file);
file = g_file_new_for_path ("/usr/share/desktop-directories/");
- tracker_miner_fs_directory_add (fs, file, TRUE);
+ tracker_miner_fs_directory_add (fs, file, TRACKER_DIRECTORY_RECURSE);
g_object_unref (file);
#ifdef HAVE_MEEGOTOUCH
file = g_file_new_for_path ("/usr/lib/duicontrolpanel/");
- tracker_miner_fs_directory_add (fs, file, TRUE);
+ tracker_miner_fs_directory_add (fs, file, TRACKER_DIRECTORY_RECURSE);
g_object_unref (file);
tracker_miner_applications_meego_init ();
#endif /* HAVE_MEEGOTOUCH */
diff --git a/src/miners/fs/tracker-miner-files.c b/src/miners/fs/tracker-miner-files.c
index 3dd67c5..8011af8 100644
--- a/src/miners/fs/tracker-miner-files.c
+++ b/src/miners/fs/tracker-miner-files.c
@@ -454,7 +454,7 @@ miner_files_initable_init (GInitable *initable,
mf->private->quark_directory_config_root,
GINT_TO_POINTER (TRUE));
- tracker_miner_fs_directory_add (fs, file, FALSE);
+ tracker_miner_fs_directory_add (fs, file, TRACKER_DIRECTORY_NONE);
g_object_unref (file);
}
@@ -502,7 +502,7 @@ miner_files_initable_init (GInitable *initable,
mf->private->quark_directory_config_root,
GINT_TO_POINTER (TRUE));
- tracker_miner_fs_directory_add (fs, file, TRUE);
+ tracker_miner_fs_directory_add (fs, file, TRACKER_DIRECTORY_RECURSE);
g_object_unref (file);
}
@@ -1208,7 +1208,7 @@ mount_point_added_cb (TrackerStorage *storage,
(gchar *) l->data);
tracker_miner_fs_directory_add (TRACKER_MINER_FS (user_data),
config_file,
- TRUE);
+ TRACKER_DIRECTORY_RECURSE);
} else if (g_file_has_prefix (mount_point_file, config_file)) {
/* If the mount path is contained inside the config path,
* then add the mount path to re-check */
@@ -1217,7 +1217,7 @@ mount_point_added_cb (TrackerStorage *storage,
(gchar *) l->data);
tracker_miner_fs_directory_add (TRACKER_MINER_FS (user_data),
mount_point_file,
- TRUE);
+ TRACKER_DIRECTORY_RECURSE);
}
g_object_unref (config_file);
}
@@ -1236,7 +1236,7 @@ mount_point_added_cb (TrackerStorage *storage,
(gchar *) l->data);
tracker_miner_fs_directory_add (TRACKER_MINER_FS (user_data),
config_file,
- FALSE);
+ TRACKER_DIRECTORY_NONE);
}
g_object_unref (config_file);
}
@@ -1522,10 +1522,15 @@ update_directories_from_new_config (TrackerMinerFS *mf,
gboolean recurse)
{
TrackerMinerFilesPrivate *priv;
+ TrackerDirectoryFlags flags = 0;
GSList *sl;
priv = TRACKER_MINER_FILES_GET_PRIVATE (mf);
+ if (recurse) {
+ flags |= TRACKER_DIRECTORY_RECURSE;
+ }
+
g_message ("Updating %s directories changed from configuration",
recurse ? "recursive" : "single");
@@ -1565,7 +1570,7 @@ update_directories_from_new_config (TrackerMinerFS *mf,
priv->quark_directory_config_root,
GINT_TO_POINTER (TRUE));
- tracker_miner_fs_directory_add (TRACKER_MINER_FS (mf), file, recurse);
+ tracker_miner_fs_directory_add (TRACKER_MINER_FS (mf), file, flags);
g_object_unref (file);
}
}
@@ -3051,6 +3056,6 @@ miner_files_add_removable_or_optical_directory (TrackerMinerFiles *mf,
g_message (" Adding removable/optical: '%s'", mount_path);
tracker_miner_fs_directory_add (TRACKER_MINER_FS (mf),
mount_point_file,
- TRUE);
+ TRACKER_DIRECTORY_RECURSE);
g_object_unref (mount_point_file);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]