[tracker-miners/wip/carlosg/speed-track: 3/40] libtracker-miner: Add "is_dir" argument to TrackerFileNotifier::file-* signals
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [tracker-miners/wip/carlosg/speed-track: 3/40] libtracker-miner: Add "is_dir" argument to TrackerFileNotifier::file-* signals
- Date: Sun, 18 Oct 2020 20:58:42 +0000 (UTC)
commit 7a00ec637f1e511c069c0a08169e324e4d84863d
Author: Carlos Garnacho <carlosg gnome org>
Date: Sun Oct 4 16:42:11 2020 +0200
libtracker-miner: Add "is_dir" argument to TrackerFileNotifier::file-* signals
The TrackerFileNotifier already knows this piece of info, so let it known
via the signals, instead of letting the upper parts figure it out by themselves.
src/libtracker-miner/tracker-file-notifier.c | 47 ++++++++++++----------
src/libtracker-miner/tracker-miner-fs.c | 10 ++++-
.../libtracker-miner/tracker-file-notifier-test.c | 4 ++
3 files changed, 38 insertions(+), 23 deletions(-)
---
diff --git a/src/libtracker-miner/tracker-file-notifier.c b/src/libtracker-miner/tracker-file-notifier.c
index e44e7fbee..8513b3629 100644
--- a/src/libtracker-miner/tracker-file-notifier.c
+++ b/src/libtracker-miner/tracker-file-notifier.c
@@ -267,6 +267,7 @@ file_notifier_traverse_tree_foreach (GFile *file,
GFile *current_root;
gchar *hash, *mimetype;
gboolean stop = FALSE;
+ gboolean is_dir;
notifier = user_data;
priv = tracker_file_notifier_get_instance_private (notifier);
@@ -280,6 +281,7 @@ file_notifier_traverse_tree_foreach (GFile *file,
quark_property_extractor_hash);
mimetype = tracker_file_system_steal_property (priv->file_system, file,
quark_property_mimetype);
+ is_dir = tracker_file_system_get_file_type (priv->file_system, file) == G_FILE_TYPE_DIRECTORY;
/* If we're crawling over a subdirectory of a root index, it's been
* already notified in the crawling op that made it processed, so avoid
@@ -293,22 +295,22 @@ file_notifier_traverse_tree_foreach (GFile *file,
if (store_mtime && !disk_mtime) {
/* In store but not in disk, delete */
- g_signal_emit (notifier, signals[FILE_DELETED], 0, file);
+ g_signal_emit (notifier, signals[FILE_DELETED], 0, file, is_dir);
stop = TRUE;
goto out;
} else if (disk_mtime && !store_mtime) {
/* In disk but not in store, create */
- g_signal_emit (notifier, signals[FILE_CREATED], 0, file);
+ g_signal_emit (notifier, signals[FILE_CREATED], 0, file, is_dir);
} else if (store_mtime && disk_mtime && *disk_mtime != *store_mtime) {
/* Mtime changed, update */
- g_signal_emit (notifier, signals[FILE_UPDATED], 0, file, FALSE);
+ g_signal_emit (notifier, signals[FILE_UPDATED], 0, file, FALSE, is_dir);
} else if (mimetype) {
const gchar *current_hash;
current_hash = tracker_extract_module_manager_get_hash (mimetype);
if (g_strcmp0 (hash, current_hash) != 0)
- g_signal_emit (notifier, signals[FILE_UPDATED], 0, file, FALSE);
+ g_signal_emit (notifier, signals[FILE_UPDATED], 0, file, FALSE, is_dir);
} else if (!store_mtime && !disk_mtime) {
/* what are we doing with such file? should happen rarely,
* only with files that we've queried, but we decided not
@@ -829,7 +831,7 @@ notifier_query_root_contents (TrackerFileNotifier *notifier)
if ((flags & TRACKER_DIRECTORY_FLAG_IGNORE) != 0) {
if ((flags & TRACKER_DIRECTORY_FLAG_PRESERVE) == 0) {
- g_signal_emit (notifier, signals[FILE_DELETED], 0, directory);
+ g_signal_emit (notifier, signals[FILE_DELETED], 0, directory, TRUE);
}
/* Move on to next root */
@@ -944,7 +946,7 @@ tracker_file_notifier_ensure_parents (TrackerFileNotifier *notifier,
NULL);
g_object_unref (parent);
- g_signal_emit (notifier, signals[FILE_CREATED], 0, canonical);
+ g_signal_emit (notifier, signals[FILE_CREATED], 0, canonical, TRUE);
if (tracker_indexing_tree_file_is_root (priv->indexing_tree, canonical)) {
break;
@@ -997,7 +999,7 @@ monitor_item_created_cb (TrackerMonitor *monitor,
g_object_unref (parent);
g_object_ref (canonical);
- g_signal_emit (notifier, signals[FILE_DELETED], 0, canonical);
+ g_signal_emit (notifier, signals[FILE_DELETED], 0, canonical, TRUE);
file_notifier_current_root_check_remove_directory (notifier, canonical);
tracker_file_system_forget_files (priv->file_system, canonical,
G_FILE_TYPE_UNKNOWN);
@@ -1045,7 +1047,7 @@ monitor_item_created_cb (TrackerMonitor *monitor,
canonical = tracker_file_system_get_file (priv->file_system,
file, file_type, NULL);
- g_signal_emit (notifier, signals[FILE_CREATED], 0, canonical);
+ g_signal_emit (notifier, signals[FILE_CREATED], 0, canonical, is_directory);
if (!is_directory) {
tracker_file_system_forget_files (priv->file_system, canonical,
@@ -1084,7 +1086,7 @@ monitor_item_updated_cb (TrackerMonitor *monitor,
tracker_file_notifier_get_file_iri (notifier, canonical, TRUE);
}
- g_signal_emit (notifier, signals[FILE_UPDATED], 0, canonical, FALSE);
+ g_signal_emit (notifier, signals[FILE_UPDATED], 0, canonical, FALSE, is_directory);
if (!is_directory) {
tracker_file_system_forget_files (priv->file_system, canonical,
@@ -1115,7 +1117,7 @@ monitor_item_attribute_updated_cb (TrackerMonitor *monitor,
/* Fetch the interned copy */
canonical = tracker_file_system_get_file (priv->file_system,
file, file_type, NULL);
- g_signal_emit (notifier, signals[FILE_UPDATED], 0, canonical, TRUE);
+ g_signal_emit (notifier, signals[FILE_UPDATED], 0, canonical, TRUE, is_directory);
if (!is_directory) {
tracker_file_system_forget_files (priv->file_system, canonical,
@@ -1197,7 +1199,7 @@ monitor_item_deleted_cb (TrackerMonitor *monitor,
* reference in order to prevent that.
*/
g_object_ref (canonical);
- g_signal_emit (notifier, signals[FILE_DELETED], 0, canonical);
+ g_signal_emit (notifier, signals[FILE_DELETED], 0, canonical, is_directory);
file_notifier_current_root_check_remove_directory (notifier, canonical);
@@ -1310,7 +1312,7 @@ monitor_item_moved_cb (TrackerMonitor *monitor,
/* Source file was not stored, check dest file as new */
if (!is_directory || !dest_is_recursive) {
- g_signal_emit (notifier, signals[FILE_CREATED], 0, other_file);
+ g_signal_emit (notifier, signals[FILE_CREATED], 0, other_file,
is_directory);
} else if (is_directory) {
/* Crawl dest directory */
notifier_queue_root (notifier, other_file, flags, FALSE);
@@ -1324,7 +1326,7 @@ monitor_item_moved_cb (TrackerMonitor *monitor,
file);
}
- g_signal_emit (notifier, signals[FILE_DELETED], 0, file);
+ g_signal_emit (notifier, signals[FILE_DELETED], 0, file, is_directory);
file_notifier_current_root_check_remove_directory (notifier, file);
} else {
/* Handle move */
@@ -1352,10 +1354,10 @@ monitor_item_moved_cb (TrackerMonitor *monitor,
}
}
- g_signal_emit (notifier, signals[FILE_MOVED], 0, file, other_file);
+ g_signal_emit (notifier, signals[FILE_MOVED], 0, file, other_file, is_directory);
if (extension_changed (file, other_file))
- g_signal_emit (notifier, signals[FILE_UPDATED], 0, other_file, FALSE);
+ g_signal_emit (notifier, signals[FILE_UPDATED], 0, other_file, FALSE,
is_directory);
}
tracker_file_system_forget_files (priv->file_system, file,
@@ -1448,7 +1450,7 @@ indexing_tree_directory_removed (TrackerIndexingTree *indexing_tree,
} else if (tracker_indexing_tree_file_is_root (indexing_tree,
parent)) {
g_signal_emit (notifier, signals[FILE_CREATED],
- 0, directory);
+ 0, directory, TRUE);
}
g_object_unref (parent);
@@ -1458,7 +1460,7 @@ indexing_tree_directory_removed (TrackerIndexingTree *indexing_tree,
if ((flags & TRACKER_DIRECTORY_FLAG_PRESERVE) == 0) {
/* Directory needs to be deleted from the store too */
- g_signal_emit (notifier, signals[FILE_DELETED], 0, directory);
+ g_signal_emit (notifier, signals[FILE_DELETED], 0, directory, TRUE);
}
elem = g_list_find_custom (priv->pending_index_roots, directory,
@@ -1524,7 +1526,8 @@ indexing_tree_child_updated (TrackerIndexingTree *indexing_tree,
notifier_queue_root (notifier, canonical, flags, FALSE);
} else if (tracker_indexing_tree_file_is_indexable (priv->indexing_tree,
canonical, child_type)) {
- g_signal_emit (notifier, signals[FILE_UPDATED], 0, canonical, FALSE);
+ g_signal_emit (notifier, signals[FILE_UPDATED], 0, canonical, FALSE,
+ child_type == G_FILE_TYPE_DIRECTORY);
}
}
@@ -1691,7 +1694,7 @@ tracker_file_notifier_class_init (TrackerFileNotifierClass *klass)
NULL, NULL,
NULL,
G_TYPE_NONE,
- 1, G_TYPE_FILE);
+ 2, G_TYPE_FILE, G_TYPE_BOOLEAN);
signals[FILE_UPDATED] =
g_signal_new ("file-updated",
G_TYPE_FROM_CLASS (klass),
@@ -1701,7 +1704,7 @@ tracker_file_notifier_class_init (TrackerFileNotifierClass *klass)
NULL, NULL,
NULL,
G_TYPE_NONE,
- 2, G_TYPE_FILE, G_TYPE_BOOLEAN);
+ 3, G_TYPE_FILE, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN);
signals[FILE_DELETED] =
g_signal_new ("file-deleted",
G_TYPE_FROM_CLASS (klass),
@@ -1711,7 +1714,7 @@ tracker_file_notifier_class_init (TrackerFileNotifierClass *klass)
NULL, NULL,
NULL,
G_TYPE_NONE,
- 1, G_TYPE_FILE);
+ 2, G_TYPE_FILE, G_TYPE_BOOLEAN);
signals[FILE_MOVED] =
g_signal_new ("file-moved",
G_TYPE_FROM_CLASS (klass),
@@ -1721,7 +1724,7 @@ tracker_file_notifier_class_init (TrackerFileNotifierClass *klass)
NULL, NULL,
NULL,
G_TYPE_NONE,
- 2, G_TYPE_FILE, G_TYPE_FILE);
+ 3, G_TYPE_FILE, G_TYPE_FILE, G_TYPE_BOOLEAN);
signals[DIRECTORY_STARTED] =
g_signal_new ("directory-started",
G_TYPE_FROM_CLASS (klass),
diff --git a/src/libtracker-miner/tracker-miner-fs.c b/src/libtracker-miner/tracker-miner-fs.c
index ade945912..ea1b49073 100644
--- a/src/libtracker-miner/tracker-miner-fs.c
+++ b/src/libtracker-miner/tracker-miner-fs.c
@@ -207,17 +207,21 @@ static void indexing_tree_directory_removed (TrackerIndexingTree
gpointer user_data);
static void file_notifier_file_created (TrackerFileNotifier *notifier,
GFile *file,
+ gboolean is_dir,
gpointer user_data);
static void file_notifier_file_deleted (TrackerFileNotifier *notifier,
GFile *file,
+ gboolean is_dir,
gpointer user_data);
static void file_notifier_file_updated (TrackerFileNotifier *notifier,
GFile *file,
gboolean attributes_only,
+ gboolean is_dir,
gpointer user_data);
static void file_notifier_file_moved (TrackerFileNotifier *notifier,
GFile *source,
GFile *dest,
+ gboolean is_dir,
gpointer user_data);
static void file_notifier_directory_started (TrackerFileNotifier *notifier,
GFile *directory,
@@ -2044,6 +2048,7 @@ miner_fs_queue_event (TrackerMinerFS *fs,
static void
file_notifier_file_created (TrackerFileNotifier *notifier,
GFile *file,
+ gboolean is_dir,
gpointer user_data)
{
TrackerMinerFS *fs = user_data;
@@ -2056,12 +2061,13 @@ file_notifier_file_created (TrackerFileNotifier *notifier,
static void
file_notifier_file_deleted (TrackerFileNotifier *notifier,
GFile *file,
+ gboolean is_dir,
gpointer user_data)
{
TrackerMinerFS *fs = user_data;
QueueEvent *event;
- if (tracker_file_notifier_get_file_type (notifier, file) == G_FILE_TYPE_DIRECTORY) {
+ if (is_dir) {
/* Cancel all pending tasks on files inside the path given by file */
tracker_task_pool_foreach (fs->priv->task_pool,
task_pool_cancel_foreach,
@@ -2076,6 +2082,7 @@ static void
file_notifier_file_updated (TrackerFileNotifier *notifier,
GFile *file,
gboolean attributes_only,
+ gboolean is_dir,
gpointer user_data)
{
TrackerMinerFS *fs = user_data;
@@ -2090,6 +2097,7 @@ static void
file_notifier_file_moved (TrackerFileNotifier *notifier,
GFile *source,
GFile *dest,
+ gboolean is_dir,
gpointer user_data)
{
TrackerMinerFS *fs = user_data;
diff --git a/tests/libtracker-miner/tracker-file-notifier-test.c
b/tests/libtracker-miner/tracker-file-notifier-test.c
index 7b8ebfd08..86b0785ab 100644
--- a/tests/libtracker-miner/tracker-file-notifier-test.c
+++ b/tests/libtracker-miner/tracker-file-notifier-test.c
@@ -122,6 +122,7 @@ perform_file_operation (TestCommonContext *fixture,
static void
file_notifier_file_created_cb (TrackerFileNotifier *notifier,
GFile *file,
+ gboolean is_dir,
gpointer user_data)
{
TestCommonContext *fixture = user_data;
@@ -143,6 +144,7 @@ static void
file_notifier_file_updated_cb (TrackerFileNotifier *notifier,
GFile *file,
gboolean attributes_only,
+ gboolean is_dir,
gpointer user_data)
{
TestCommonContext *fixture = user_data;
@@ -163,6 +165,7 @@ file_notifier_file_updated_cb (TrackerFileNotifier *notifier,
static void
file_notifier_file_deleted_cb (TrackerFileNotifier *notifier,
GFile *file,
+ gboolean is_dir,
gpointer user_data)
{
TestCommonContext *fixture = user_data;
@@ -197,6 +200,7 @@ static void
file_notifier_file_moved_cb (TrackerFileNotifier *notifier,
GFile *file,
GFile *other_file,
+ gboolean is_dir,
gpointer user_data)
{
TestCommonContext *fixture = user_data;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]