[gnome-calendar] search-view: changed sorting of results



commit b86f3817050c043da3d8df179cc6eeadab5838de
Author: Erick Pérez Castellanos <erick red gmail com>
Date:   Mon Feb 16 12:51:32 2015 -0500

    search-view: changed sorting of results
    
    This sorting promotes the results closer to the time when the search was done.

 src/gcal-search-view.c |   48 +++++++++++++++++++++++++++++++-----------------
 1 files changed, 31 insertions(+), 17 deletions(-)
---
diff --git a/src/gcal-search-view.c b/src/gcal-search-view.c
index d94cfa9..c2da9cf 100644
--- a/src/gcal-search-view.c
+++ b/src/gcal-search-view.c
@@ -46,6 +46,7 @@ typedef struct
   gint            num_results;
   gchar          *field;
   gchar          *query;
+  time_t          current_utc_date;
 
   /* property */
   icaltimetype   *date;
@@ -215,10 +216,9 @@ sort_by_event (GtkListBoxRow *row1,
 {
   GcalSearchViewPrivate *priv;
   GcalEventData *ev1, *ev2;
-  ECalComponentText summary1, summary2;
   ECalComponentDateTime date1, date2;
-  gchar *down1, *down2;
   gint result;
+  time_t start1, start2, diff1, diff2;
 
   priv = gcal_search_view_get_instance_private (GCAL_SEARCH_VIEW (user_data));
 
@@ -232,23 +232,34 @@ sort_by_event (GtkListBoxRow *row1,
   e_cal_component_get_dtstart (ev1->event_component, &date1);
   e_cal_component_get_dtstart (ev2->event_component, &date2);
 
-  /* Second, compare by their dates */
-  result = icaltime_compare (*date1.value, *date2.value);
-  e_cal_component_free_datetime (&date1);
-  e_cal_component_free_datetime (&date2);
-
-  if (result != 0)
-    return -1 * result;
+  start1 = icaltime_as_timet_with_zone (*(date1.value), date1.value->zone != NULL ? date1.value->zone : 
e_cal_util_get_system_timezone ());
+  start2 = icaltime_as_timet_with_zone (*(date2.value), date2.value->zone != NULL ? date2.value->zone : 
e_cal_util_get_system_timezone ());
+  diff1 = start1 - priv->current_utc_date;
+  diff2 = start2 - priv->current_utc_date;
 
-  e_cal_component_get_summary (ev1->event_component, &summary1);
-  e_cal_component_get_summary (ev2->event_component, &summary2);
-  down1 = g_utf8_strdown (summary1.value, -1);
-  down2 = g_utf8_strdown (summary2.value, -1);
+  if (diff1 == diff2)
+    {
+      result = 0;
+    }
+  else
+    {
+      if (diff1 == 0)
+        result = -1;
+      else if (diff2 == 0)
+        result = 1;
+
+      if (diff1 > 0 && diff2 < 0)
+        result = -1;
+      else if (diff2 > 0 && diff1 < 0)
+        result = 1;
+      else if (diff1 < 0 && diff2 < 0)
+        result = ABS (diff1) - ABS (diff2);
+      else if (diff1 > 0 && diff2 > 0)
+        result = diff1 - diff2;
+    }
 
-  /* First, by their names */
-  result = g_strcmp0 (down1, down2);
-  g_free (down1);
-  g_free (down2);
+  e_cal_component_free_datetime (&date1);
+  e_cal_component_free_datetime (&date2);
 
   return result;
 }
@@ -797,6 +808,9 @@ gcal_search_view_search (GcalSearchView *view,
         priv->subscribed = TRUE;
       }
 
+      /* update internal current time_t */
+      priv->current_utc_date = time (NULL);
+
       gcal_manager_set_query (priv->manager, search_query);
       gtk_widget_show (priv->listbox);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]