diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2018-06-22 23:56:57 +0200 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2018-06-23 13:27:53 +0200 |
commit | 56c65a7103f84199f16dba4de57b39bb01001481 (patch) | |
tree | 31f6645b35c86fd6c8f8443b5702ba3923378165 | |
parent | 219eabe0e82053436e44be5201366ab25b232659 (diff) | |
download | tracker-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.
-rw-r--r-- | src/libtracker-miner/tracker-file-notifier.c | 25 |
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, |