diff options
author | Carlos Garnacho <carlos@lanedo.com> | 2009-08-26 12:51:28 +0200 |
---|---|---|
committer | Carlos Garnacho <carlos@lanedo.com> | 2009-08-26 13:48:56 +0200 |
commit | c02143b075e54135fd0b461f8a87c22053861427 (patch) | |
tree | 221779118e798d2bfbc75f98f1db07a206d144c5 /src/libtracker-miner/tracker-miner-fs.c | |
parent | 512af87a5654b5b4681dce4b788650507be95b83 (diff) | |
download | tracker-c02143b075e54135fd0b461f8a87c22053861427.tar.gz |
Make tracker_miner_fs_[add|remove]_directory() use GFile.
Diffstat (limited to 'src/libtracker-miner/tracker-miner-fs.c')
-rw-r--r-- | src/libtracker-miner/tracker-miner-fs.c | 76 |
1 files changed, 47 insertions, 29 deletions
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c index 16dd6fb7e..d04e79cbd 100644 --- a/src/libtracker-miner/tracker-miner-fs.c +++ b/src/libtracker-miner/tracker-miner-fs.c @@ -35,7 +35,7 @@ typedef struct { } ItemMovedData; typedef struct { - gchar *path; + GFile *file; gboolean recurse; } DirectoryData; @@ -99,7 +99,7 @@ static void fs_finalize (GObject *object); static gboolean fs_defaults (TrackerMinerFS *fs, GFile *file); static void miner_started (TrackerMiner *miner); -static DirectoryData *directory_data_new (const gchar *path, +static DirectoryData *directory_data_new (GFile *file, gboolean recurse); static void directory_data_free (DirectoryData *dd); static ItemMovedData *item_moved_data_new (GFile *file, @@ -373,14 +373,14 @@ miner_started (TrackerMiner *miner) } static DirectoryData * -directory_data_new (const gchar *path, - gboolean recurse) +directory_data_new (GFile *file, + gboolean recurse) { DirectoryData *dd; dd = g_slice_new (DirectoryData); - dd->path = g_strdup (path); + dd->file = g_object_ref (file); dd->recurse = recurse; return dd; @@ -393,7 +393,7 @@ directory_data_free (DirectoryData *dd) return; } - g_free (dd->path); + g_object_unref (dd->file); g_slice_free (DirectoryData, dd); } @@ -880,7 +880,7 @@ monitor_item_created_cb (TrackerMonitor *monitor, } /* Add to the list */ - tracker_miner_fs_add_directory (fs, path, TRUE); + tracker_miner_fs_add_directory (fs, file, TRUE); } g_queue_push_tail (fs->private->items_created, @@ -1150,6 +1150,7 @@ static gboolean crawl_directories_cb (gpointer user_data) { TrackerMinerFS *fs = user_data; + gchar *path; if (fs->private->current_directory) { g_critical ("One directory is already being processed, bailing out"); @@ -1171,15 +1172,18 @@ crawl_directories_cb (gpointer user_data) fs->private->directories = g_list_remove (fs->private->directories, fs->private->current_directory); + path = g_file_get_path (miner->private->current_directory->file); + g_debug ("Processing %s path '%s'\n", fs->private->current_directory->recurse ? "recursive" : "single", - fs->private->current_directory->path); + path); - if (tracker_crawler_start (fs->private->crawler, - fs->private->current_directory->path, + if (tracker_crawler_start (fs->private->crawler, path, fs->private->current_directory->recurse)) { /* Crawler when restart the idle function when done */ - fs->private->crawl_directories_id = 0; + fs->private->process_dirs_id = 0; + g_free (path); + return FALSE; } @@ -1187,6 +1191,8 @@ crawl_directories_cb (gpointer user_data) directory_data_free (fs->private->current_directory); fs->private->current_directory = NULL; + g_free (path); + return TRUE; } @@ -1247,44 +1253,56 @@ crawl_directories_stop (TrackerMinerFS *fs) void tracker_miner_fs_add_directory (TrackerMinerFS *fs, - const gchar *path, + GFile *file, gboolean recurse) { g_return_if_fail (TRACKER_IS_MINER_FS (fs)); - g_return_if_fail (path != NULL); + g_return_if_fail (G_IS_FILE (file)); fs->private->directories = g_list_append (fs->private->directories, - directory_data_new (path, recurse)); + directory_data_new (file, recurse)); crawl_directories_start (fs); } gboolean tracker_miner_fs_remove_directory (TrackerMinerFS *fs, - const gchar *path) + GFile *file) { gboolean return_val = FALSE; - GList *l; + GList *dirs; g_return_val_if_fail (TRACKER_IS_MINER_FS (fs), FALSE); - g_return_val_if_fail (path != NULL, FALSE); + g_return_val_if_fail (G_IS_FILE (file), FALSE); - if (fs->private->current_directory && - strcmp (fs->private->current_directory->path, path) == 0) { - /* Dir is being processed currently, cancel crawler */ - tracker_crawler_stop (fs->private->crawler); - return_val = TRUE; + if (fs->private->current_directory) { + GFile *current_file; + + current_file = fs->private->current_directory->file; + + if (g_file_equal (file, current_file) || + g_file_has_prefix (file, current_file)) { + /* Dir is being processed currently, cancel crawler */ + tracker_crawler_stop (fs->private->crawler); + return_val = TRUE; + } } - l = g_list_find_custom (fs->private->directories, path, - (GCompareFunc) g_strcmp0); + dirs = fs->private->directories; - if (l) { - directory_data_free (l->data); - fs->private->directories = - g_list_delete_link (fs->private->directories, l); - return_val = TRUE; + while (dirs) { + DirectoryData *data = dirs->data; + GList *link = dirs; + + dirs = dirs->next; + + if (g_file_equal (file, data->file) || + g_file_has_prefix (file, data->file)) { + directory_data_free (data); + fs->private->directories = g_list_delete_link (fs->private->directories, link); + return_val = TRUE; + } } return return_val; |