[nautilus/wip/csoriano/search-popover] f with date ranges
- From: Carlos Soriano Sánchez <csoriano src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus/wip/csoriano/search-popover] f with date ranges
- Date: Mon, 1 Feb 2016 23:42:38 +0000 (UTC)
commit 8a56ebd101a59cbb06fc01373ffe0600ac2e8ecd
Author: Carlos Soriano <csoriano gnome org>
Date: Tue Feb 2 00:41:21 2016 +0100
f with date ranges
libnautilus-private/nautilus-query.c | 9 ++---
libnautilus-private/nautilus-search-engine-model.c | 29 +++++++----------
.../nautilus-search-engine-simple.c | 21 ++++++------
.../nautilus-search-engine-tracker.c | 33 ++++++++++++++------
libnautilus-private/nautilus-ui-utilities.c | 26 +++++++++++++++
libnautilus-private/nautilus-ui-utilities.h | 4 ++
src/nautilus-query-editor.c | 3 ++
src/nautilus-search-popover.c | 5 +++
8 files changed, 88 insertions(+), 42 deletions(-)
---
diff --git a/libnautilus-private/nautilus-query.c b/libnautilus-private/nautilus-query.c
index 121ee1a..83293e8 100644
--- a/libnautilus-private/nautilus-query.c
+++ b/libnautilus-private/nautilus-query.c
@@ -190,11 +190,10 @@ nautilus_query_class_init (NautilusQueryClass *class)
*/
g_object_class_install_property (gobject_class,
PROP_DATE_RANGE,
- g_param_spec_boxed ("date",
- "Date range of the query",
- "The range date of the query",
- G_TYPE_POINTER,
- G_PARAM_READWRITE));
+ g_param_spec_pointer ("date-range",
+ "Date range of the query",
+ "The range date of the query",
+ G_PARAM_READWRITE));
/**
* NautilusQuery::location:
diff --git a/libnautilus-private/nautilus-search-engine-model.c
b/libnautilus-private/nautilus-search-engine-model.c
index 1f7a87f..8a6b7a2 100644
--- a/libnautilus-private/nautilus-search-engine-model.c
+++ b/libnautilus-private/nautilus-search-engine-model.c
@@ -129,13 +129,12 @@ model_directory_ready_cb (NautilusDirectory *directory,
gdouble match;
gboolean found;
NautilusSearchHit *hit;
- GDateTime *date;
+ GDateTime *initial_date;
+ GDateTime *end_date;
GPtrArray *date_range;
files = nautilus_directory_get_file_list (directory);
mime_types = nautilus_query_get_mime_types (model->details->query);
- date_range = nautilus_query_get_date_range (model->details->query);
- date = date_range ? g_ptr_array_index (date_range, 0) : NULL;
hits = NULL;
for (l = files; l != NULL; l = l->next) {
@@ -157,28 +156,24 @@ model_directory_ready_cb (NautilusDirectory *directory,
}
}
- if (found && date != NULL) {
+ date_range = nautilus_query_get_date_range (model->details->query);
+ if (found && date_range != NULL) {
NautilusQuerySearchType type;
- guint64 query_time, current_file_time;
-
+ guint64 current_file_unix_time;
type = nautilus_query_get_search_type (model->details->query);
+ initial_date = g_ptr_array_index (date_range, 0);
+ end_date = g_ptr_array_index (date_range, 1);
if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_ACCESS) {
- current_file_time = nautilus_file_get_atime (file);
+ current_file_unix_time = nautilus_file_get_atime (file);
} else {
- current_file_time = nautilus_file_get_mtime (file);
+ current_file_unix_time = nautilus_file_get_mtime (file);
}
-
- query_time = g_date_time_to_unix (date);
-
- if (current_file_time == 0) {
- /* Silently ignore errors */
- found = FALSE;
- } else {
- found = (query_time <= current_file_time);
- }
+ found = nautilus_file_date_in_between (current_file_unix_time,
+ initial_date,
+ end_date);
}
if (found) {
diff --git a/libnautilus-private/nautilus-search-engine-simple.c
b/libnautilus-private/nautilus-search-engine-simple.c
index 43e753c..e6deed9 100644
--- a/libnautilus-private/nautilus-search-engine-simple.c
+++ b/libnautilus-private/nautilus-search-engine-simple.c
@@ -214,7 +214,8 @@ visit_directory (GFile *dir, SearchThreadData *data)
guint64 atime;
guint64 mtime;
GPtrArray *date_range;
- GDateTime *date;
+ GDateTime *initial_date;
+ GDateTime *end_date;
enumerator = g_file_enumerate_children (dir,
@@ -261,12 +262,13 @@ visit_directory (GFile *dir, SearchThreadData *data)
mtime = g_file_info_get_attribute_uint64 (info, "time::modified");
atime = g_file_info_get_attribute_uint64 (info, "time::access");
- date_range = nautilus_query_get_date_range (data->query);
- date = date_range ? g_ptr_array_index (date_range, 0) : NULL;
- if (found && date != NULL) {
+ date_range = nautilus_query_get_date_range (data->query);
+ if (found && date_range != NULL) {
NautilusQuerySearchType type;
- guint64 current_file_time, query_time;
+ guint64 current_file_time;
+ initial_date = g_ptr_array_index (date_range, 0);
+ end_date = g_ptr_array_index (date_range, 1);
type = nautilus_query_get_search_type (data->query);
if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_ACCESS) {
@@ -274,12 +276,11 @@ visit_directory (GFile *dir, SearchThreadData *data)
} else {
current_file_time = mtime;
}
-
- query_time = g_date_time_to_unix (date);
-
- found = (query_time <= current_file_time);
+ found = nautilus_file_date_in_between (current_file_time,
+ initial_date,
+ end_date);
}
-
+
if (found) {
NautilusSearchHit *hit;
GDateTime *date;
diff --git a/libnautilus-private/nautilus-search-engine-tracker.c
b/libnautilus-private/nautilus-search-engine-tracker.c
index 20115a2..7218e3a 100644
--- a/libnautilus-private/nautilus-search-engine-tracker.c
+++ b/libnautilus-private/nautilus-search-engine-tracker.c
@@ -263,7 +263,6 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
GList *mimetypes, *l;
gint mime_count;
gboolean recursive;
- GDateTime *date;
GPtrArray *date_range;
tracker = NAUTILUS_SEARCH_ENGINE_TRACKER (provider);
@@ -295,9 +294,6 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
location = nautilus_query_get_location (tracker->details->query);
location_uri = location ? g_file_get_uri (location) : NULL;
mimetypes = nautilus_query_get_mime_types (tracker->details->query);
- date_range = nautilus_query_get_date_range (tracker->details->query);
- date = date_range ? g_ptr_array_index (date_range, 0) : NULL;
-
mime_count = g_list_length (mimetypes);
sparql = g_string_new ("SELECT DISTINCT nie:url(?urn) fts:rank(?urn)
tracker:coalesce(nfo:fileLastModified(?urn), nie:contentLastModified(?urn)) AS ?mtime
tracker:coalesce(nfo:fileLastAccessed(?urn), nie:contentAccessed(?urn)) AS ?atime \n"
@@ -319,22 +315,38 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
g_string_append_printf (sparql, "fn:contains(fn:lower-case(nfo:fileName(?urn)), '%s')", search_text);
- if (date != NULL) {
+ date_range = nautilus_query_get_date_range (tracker->details->query);
+ if (date_range) {
NautilusQuerySearchType type;
- gchar *date_format;
+ gchar *initial_date_format;
+ gchar *end_date_format;
+ GDateTime *initial_date;
+ GDateTime *end_date;
+ GDateTime *shifted_end_date;
+
+ initial_date = g_ptr_array_index (date_range, 0);
+ end_date = g_ptr_array_index (date_range, 1);
+ /* As we do for other searches, we want to make the end date inclusive.
+ * For that, add a day to it */
+ shifted_end_date = g_date_time_add_days (end_date, 1);
type = nautilus_query_get_search_type (tracker->details->query);
- date_format = g_date_time_format (date, "%Y-%m-%dT%H:%M:%S");
+ initial_date_format = g_date_time_format (initial_date, "%Y-%m-%dT%H:%M:%S");
+ end_date_format = g_date_time_format (shifted_end_date, "%Y-%m-%dT%H:%M:%S");
g_string_append (sparql, " && ");
if (type == NAUTILUS_QUERY_SEARCH_TYPE_LAST_ACCESS) {
- g_string_append_printf (sparql, "?atime <= \"%s\"^^xsd:dateTime", date_format);
+ g_string_append_printf (sparql, "?atime <= \"%s\"^^xsd:dateTime",
initial_date_format);
+ g_string_append_printf (sparql, " && ?atime >= \"%s\"^^xsd:dateTime",
end_date_format);
} else {
- g_string_append_printf (sparql, "?mtime <= \"%s\"^^xsd:dateTime", date_format);
+ g_string_append_printf (sparql, "?mtime <= \"%s\"^^xsd:dateTime",
initial_date_format);
+ g_string_append_printf (sparql, " && ?mtime >= \"%s\"^^xsd:dateTime",
end_date_format);
}
- g_free (date_format);
+
+ g_free (initial_date_format);
+ g_free (end_date_format);
}
if (mime_count > 0) {
@@ -352,6 +364,7 @@ nautilus_search_engine_tracker_start (NautilusSearchProvider *provider)
}
g_string_append (sparql, ")} ORDER BY DESC (fts:rank(?urn))");
+ g_print ("%s", sparql->str);
tracker->details->cancellable = g_cancellable_new ();
tracker_sparql_connection_query_async (tracker->details->connection,
diff --git a/libnautilus-private/nautilus-ui-utilities.c b/libnautilus-private/nautilus-ui-utilities.c
index e57b157..98e07ac 100644
--- a/libnautilus-private/nautilus-ui-utilities.c
+++ b/libnautilus-private/nautilus-ui-utilities.c
@@ -326,3 +326,29 @@ nautilus_ui_frame_video (GdkPixbuf **pixbuf)
1, 1, GDK_INTERP_NEAREST, 255);
}
}
+
+gboolean
+nautilus_file_date_in_between (guint64 unix_file_time,
+ GDateTime *initial_date,
+ GDateTime *end_date)
+{
+ GDateTime *date;
+ gboolean in_between;
+
+ /* Silently ignore errors */
+ if (unix_file_time == 0)
+ return FALSE;
+
+ date = g_date_time_new_from_unix_local (unix_file_time);
+
+ /* For the end date, we want to make end_date inclusive,
+ * for that the difference between the start of the day and the in_between
+ * has to be more than -1 day
+ */
+ in_between = g_date_time_difference (date, initial_date) > 0 &&
+ g_date_time_difference (end_date, date) / G_TIME_SPAN_DAY > -1;
+
+ g_date_time_unref (date);
+
+ return in_between;
+}
diff --git a/libnautilus-private/nautilus-ui-utilities.h b/libnautilus-private/nautilus-ui-utilities.h
index 283293c..b7943ed 100644
--- a/libnautilus-private/nautilus-ui-utilities.h
+++ b/libnautilus-private/nautilus-ui-utilities.h
@@ -47,4 +47,8 @@ char * nautilus_escape_action_name (const char *action_na
void nautilus_ui_frame_image (GdkPixbuf **pixbuf);
void nautilus_ui_frame_video (GdkPixbuf **pixbuf);
+gboolean nautilus_file_date_in_between (guint64 file_unix_time,
+ GDateTime *initial_date,
+ GDateTime *end_date);
+
#endif /* NAUTILUS_UI_UTILITIES_H */
diff --git a/src/nautilus-query-editor.c b/src/nautilus-query-editor.c
index cc9ed3e..0639846 100644
--- a/src/nautilus-query-editor.c
+++ b/src/nautilus-query-editor.c
@@ -375,7 +375,10 @@ search_popover_date_range_changed_cb (NautilusSearchPopover *popover,
if (!priv->query)
create_query (editor);
+ g_print ("query editor range changed\n");
nautilus_query_set_date_range (priv->query, data);
+
+ nautilus_query_editor_changed (editor);
}
static void
diff --git a/src/nautilus-search-popover.c b/src/nautilus-search-popover.c
index 9279368..ec681ec 100644
--- a/src/nautilus-search-popover.c
+++ b/src/nautilus-search-popover.c
@@ -372,6 +372,8 @@ date_entry_activate (GtkEntry *entry,
update_date_label (popover, date_range);
show_date_selection_widgets (popover, FALSE);
emit_date_changes_for_day (popover, date_range);
+
+ g_ptr_array_unref (date_range);
}
g_date_time_unref (now);
@@ -397,6 +399,9 @@ dates_listbox_row_activated (GtkListBox *listbox,
update_date_label (popover, date_range);
show_date_selection_widgets (popover, FALSE);
emit_date_changes_for_day (popover, date_range);
+
+ g_ptr_array_unref (date_range);
+ g_date_time_unref (now);
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]