summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2018-06-22 23:56:57 +0200
committerCarlos Garnacho <carlosg@gnome.org>2018-06-23 13:27:53 +0200
commit56c65a7103f84199f16dba4de57b39bb01001481 (patch)
tree31f6645b35c86fd6c8f8443b5702ba3923378165 /src
parent219eabe0e82053436e44be5201366ab25b232659 (diff)
downloadtracker-56c65a7103f84199f16dba4de57b39bb01001481.tar.gz
libtracker-miner: Emit ::file-updated on file extension changes
We have no access to past/current GFileInfos, so detect changes in file extensions to handle the cases where a change of filename results in the file having a different mimetype. In these cases, ::file-updated should be emitted, so it gets the right rdf:types as per its new mimetype.
Diffstat (limited to 'src')
-rw-r--r--src/libtracker-miner/tracker-file-notifier.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/libtracker-miner/tracker-file-notifier.c b/src/libtracker-miner/tracker-file-notifier.c
index 12ba2507d..59ea41f6f 100644
--- a/src/libtracker-miner/tracker-file-notifier.c
+++ b/src/libtracker-miner/tracker-file-notifier.c
@@ -1322,6 +1322,28 @@ monitor_item_deleted_cb (TrackerMonitor *monitor,
g_object_unref (canonical);
}
+static gboolean
+extension_changed (GFile *file1,
+ GFile *file2)
+{
+ gchar *basename1, *basename2;
+ const gchar *ext1, *ext2;
+ gboolean changed;
+
+ basename1 = g_file_get_basename (file1);
+ basename2 = g_file_get_basename (file2);
+
+ ext1 = strrchr (basename1, '.');
+ ext2 = strrchr (basename2, '.');
+
+ changed = g_strcmp0 (ext1, ext2) != 0;
+
+ g_free (basename1);
+ g_free (basename2);
+
+ return changed;
+}
+
static void
monitor_item_moved_cb (TrackerMonitor *monitor,
GFile *file,
@@ -1445,6 +1467,9 @@ monitor_item_moved_cb (TrackerMonitor *monitor,
}
g_signal_emit (notifier, signals[FILE_MOVED], 0, file, other_file);
+
+ if (extension_changed (file, other_file))
+ g_signal_emit (notifier, signals[FILE_UPDATED], 0, other_file, FALSE);
}
tracker_file_system_forget_files (priv->file_system, file,