diff options
author | Ondrej Holy <oholy@redhat.com> | 2022-02-15 10:53:15 +0100 |
---|---|---|
committer | António Fernandes <antoniof@gnome.org> | 2022-03-05 16:22:16 +0000 |
commit | 0840fa09ab851922e57f999738a8b7c23bbe1823 (patch) | |
tree | 055a40f9aad1a33659309d6ad9bf667ee207030e | |
parent | f80e4a18bbd5d53922e01921d12327a2602487d2 (diff) | |
download | nautilus-0840fa09ab851922e57f999738a8b7c23bbe1823.tar.gz |
nautilus-search-engine: Propagate dates to calculate rank
The access and modification dates are used to calculate rank, but are
not propagated from all providers. Let's propagate them from all providers.
Relates: https://gitlab.gnome.org/GNOME/nautilus/-/issues/2152
-rw-r--r-- | src/nautilus-search-engine-model.c | 18 | ||||
-rw-r--r-- | src/nautilus-search-engine-simple.c | 26 |
2 files changed, 28 insertions, 16 deletions
diff --git a/src/nautilus-search-engine-model.c b/src/nautilus-search-engine-model.c index 8bf7da941..6d91cc65d 100644 --- a/src/nautilus-search-engine-model.c +++ b/src/nautilus-search-engine-model.c @@ -147,6 +147,10 @@ model_directory_ready_cb (NautilusDirectory *directory, for (l = files; l != NULL; l = l->next) { + g_autoptr (GDateTime) mtime = NULL; + g_autoptr (GDateTime) atime = NULL; + g_autoptr (GDateTime) ctime = NULL; + file = l->data; display_name = nautilus_file_get_display_name (file); @@ -167,6 +171,10 @@ model_directory_ready_cb (NautilusDirectory *directory, } } + mtime = g_date_time_new_from_unix_local (nautilus_file_get_mtime (file)); + atime = g_date_time_new_from_unix_local (nautilus_file_get_atime (file)); + ctime = g_date_time_new_from_unix_local (nautilus_file_get_btime (file)); + date_range = nautilus_query_get_date_range (model->query); if (found && date_range != NULL) { @@ -179,15 +187,15 @@ model_directory_ready_cb (NautilusDirectory *directory, if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_ACCESS) { - current_file_unix_time = nautilus_file_get_atime (file); + current_file_unix_time = g_date_time_to_unix (atime); } else if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_MODIFIED) { - current_file_unix_time = nautilus_file_get_mtime (file); + current_file_unix_time = g_date_time_to_unix (mtime); } else { - current_file_unix_time = nautilus_file_get_btime (file); + current_file_unix_time = g_date_time_to_unix (ctime); } found = nautilus_file_date_in_between (current_file_unix_time, @@ -201,6 +209,10 @@ model_directory_ready_cb (NautilusDirectory *directory, uri = nautilus_file_get_uri (file); hit = nautilus_search_hit_new (uri); nautilus_search_hit_set_fts_rank (hit, match); + nautilus_search_hit_set_modification_time (hit, mtime); + nautilus_search_hit_set_access_time (hit, atime); + nautilus_search_hit_set_creation_time (hit, ctime); + hits = g_list_prepend (hits, hit); g_free (uri); diff --git a/src/nautilus-search-engine-simple.c b/src/nautilus-search-engine-simple.c index 3ed02e016..bf3eea1c2 100644 --- a/src/nautilus-search-engine-simple.c +++ b/src/nautilus-search-engine-simple.c @@ -295,9 +295,6 @@ visit_directory (GFile *dir, gboolean is_hidden, found; const char *id; gboolean visited; - guint64 atime; - guint64 mtime; - guint64 ctime; GDateTime *initial_date; GDateTime *end_date; gchar *uri; @@ -323,6 +320,10 @@ visit_directory (GFile *dir, while ((info = g_file_enumerator_next_file (enumerator, data->cancellable, NULL)) != NULL) { + g_autoptr (GDateTime) mtime = NULL; + g_autoptr (GDateTime) atime = NULL; + g_autoptr (GDateTime) ctime = NULL; + display_name = g_file_info_get_display_name (info); if (display_name == NULL) { @@ -354,9 +355,9 @@ visit_directory (GFile *dir, } } - mtime = g_file_info_get_attribute_uint64 (info, "time::modified"); - atime = g_file_info_get_attribute_uint64 (info, "time::access"); - ctime = g_file_info_get_attribute_uint64 (info, "time::created"); + mtime = g_file_info_get_modification_date_time (info); + atime = g_file_info_get_access_date_time (info); + ctime = g_file_info_get_creation_date_time (info); if (found && date_range != NULL) { @@ -367,15 +368,15 @@ visit_directory (GFile *dir, if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_ACCESS) { - current_file_time = atime; + current_file_time = g_date_time_to_unix (atime); } else if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_MODIFIED) { - current_file_time = mtime; + current_file_time = g_date_time_to_unix (mtime); } else { - current_file_time = ctime; + current_file_time = g_date_time_to_unix (ctime); } found = nautilus_file_date_in_between (current_file_time, initial_date, @@ -385,15 +386,14 @@ visit_directory (GFile *dir, if (found) { NautilusSearchHit *hit; - GDateTime *date; uri = g_file_get_uri (child); hit = nautilus_search_hit_new (uri); g_free (uri); nautilus_search_hit_set_fts_rank (hit, match); - date = g_date_time_new_from_unix_local (mtime); - nautilus_search_hit_set_modification_time (hit, date); - g_date_time_unref (date); + nautilus_search_hit_set_modification_time (hit, mtime); + nautilus_search_hit_set_access_time (hit, atime); + nautilus_search_hit_set_creation_time (hit, ctime); data->hits = g_list_prepend (data->hits, hit); } |