* optimization of modest_text_utils_get_display_date,
[modest] / src / modest-text-utils.c
index 83de27d..b0f547d 100644 (file)
@@ -524,9 +524,9 @@ modest_text_utils_split_addresses_list (const gchar *addresses)
 
 void
 modest_text_utils_address_range_at_position (const gchar *recipients_list,
-                                            gint position,
-                                            gint *start,
-                                            gint *end)
+                                            guint position,
+                                            guint *start,
+                                            guint *end)
 {
        gchar *current = NULL;
        gint range_start = 0;
@@ -534,8 +534,12 @@ modest_text_utils_address_range_at_position (const gchar *recipients_list,
        gint index;
        gboolean is_quoted = FALSE;
 
+       g_return_if_fail (recipients_list);
+       g_return_if_fail (position < g_utf8_strlen(recipients_list, -1));
+               
        index = 0;
-       for (current = (gchar *) recipients_list; *current != '\0'; current = g_utf8_find_next_char (current, NULL)) {
+       for (current = (gchar *) recipients_list; *current != '\0';
+            current = g_utf8_find_next_char (current, NULL)) {
                gunichar c = g_utf8_get_char (current);
 
                if ((c == ',') && (!is_quoted)) {
@@ -1101,33 +1105,23 @@ modest_text_utils_utf8_strcmp (const gchar* s1, const gchar *s2, gboolean insens
 const gchar*
 modest_text_utils_get_display_date (time_t date)
 {
-       time_t now;
 #define DATE_BUF_SIZE 64 
-       static const guint ONE_DAY = 24 * 60 * 60; /* seconds in one day */
        static gchar date_buf[DATE_BUF_SIZE];
+       
+       /* calculate the # of days since epoch for 
+        * for today and for the date provided 
+        * based on idea from pvanhoof */
+       int day      = time(NULL) / (24 * 60 * 60);
+       int date_day = date       / (24 * 60 * 60);
 
-       gchar today_buf [DATE_BUF_SIZE];  
-
-       modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, "%x", date); 
-
-       now = time (NULL);
+       /* if it's today, show the time, if it's not today, show the date instead */
 
-       /* we check if the date is within the last 24h, if not, we don't
-        * have to do the extra, expensive strftime, which was very visible
-        * in the profiles.
-        */
-       if (abs(now - date) < ONE_DAY) {
-               
-               /* it's within the last 24 hours, but double check */
-               /* use the localized dates */
-               modest_text_utils_strftime (today_buf,  DATE_BUF_SIZE, "%x", now); 
+       if (day == date_day) /* is the date today? */
+               modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, "%X", date);
+       else 
+               modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, "%x", date); 
 
-               /* if it's today, use the time instead */
-               if (strcmp (date_buf, today_buf) == 0)
-                       modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, "%X", date);
-       }
-       
-       return date_buf;
+       return date_buf; /* this is a static buffer, don't free! */
 }