[evolution/evolution-3-12] Bug #730199 - [MessageList] Support dates with value larger than 2^32
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/evolution-3-12] Bug #730199 - [MessageList] Support dates with value larger than 2^32
- Date: Fri, 23 May 2014 17:01:39 +0000 (UTC)
commit 8ad84cf9fb009af8de29864e6ff4018ab58f02a4
Author: Milan Crha <mcrha redhat com>
Date: Fri May 23 18:57:12 2014 +0200
Bug #730199 - [MessageList] Support dates with value larger than 2^32
calendar/gui/e-memo-table.c | 4 --
e-util/e-cell-date.c | 13 ++++++--
e-util/e-table-extras.c | 12 ++++++++
e-util/e-table-sorting-utils.c | 18 +++++++++++
mail/message-list.c | 62 ++++++++++++++++++++++++++++++---------
mail/message-list.etspec | 6 ++--
6 files changed, 89 insertions(+), 26 deletions(-)
---
diff --git a/calendar/gui/e-memo-table.c b/calendar/gui/e-memo-table.c
index c71c22c..092ea37 100644
--- a/calendar/gui/e-memo-table.c
+++ b/calendar/gui/e-memo-table.c
@@ -400,10 +400,6 @@ memo_table_constructed (GObject *object)
cell = e_table_extras_get_cell (extras, "date");
e_cell_date_set_format_component (E_CELL_DATE (cell), "calendar");
- /* set proper format component for a default 'date' cell renderer */
- cell = e_table_extras_get_cell (extras, "date");
- e_cell_date_set_format_component (E_CELL_DATE (cell), "calendar");
-
/* Construct the table */
etspecfile = g_build_filename (
diff --git a/e-util/e-cell-date.c b/e-util/e-cell-date.c
index 973ae39..610151a 100644
--- a/e-util/e-cell-date.c
+++ b/e-util/e-cell-date.c
@@ -43,10 +43,12 @@ ecd_get_text (ECellText *cell,
gint col,
gint row)
{
- time_t date = GPOINTER_TO_INT (e_table_model_value_at (model, col, row));
+ gint64 *pdate = e_table_model_value_at (model, col, row);
const gchar *fmt_component, *fmt_part = NULL;
+ gchar *res;
- if (date == 0) {
+ if (!pdate || *pdate == 0) {
+ e_table_model_free_value (model, col, pdate);
return g_strdup (_("?"));
}
@@ -56,8 +58,11 @@ ecd_get_text (ECellText *cell,
else
fmt_part = "table";
- return e_datetime_format_format (
- fmt_component, fmt_part, DTFormatKindDateTime, date);
+ res = e_datetime_format_format (fmt_component, fmt_part, DTFormatKindDateTime, (time_t) *pdate);
+
+ e_table_model_free_value (model, col, pdate);
+
+ return res;
}
static void
diff --git a/e-util/e-table-extras.c b/e-util/e-table-extras.c
index b631dbd..07f81ba 100644
--- a/e-util/e-table-extras.c
+++ b/e-util/e-table-extras.c
@@ -107,6 +107,15 @@ e_strint_compare (gconstpointer data1,
return e_int_compare (GINT_TO_POINTER (int1), GINT_TO_POINTER (int2));
}
+static gint
+e_int64ptr_compare (gconstpointer data1,
+ gconstpointer data2)
+{
+ const gint64 *pa = data1, *pb = data2;
+
+ return (*pa == *pb) ? 0 : (*pa < *pb) ? -1 : 1;
+}
+
/* UTF-8 strncasecmp - not optimized */
static gint
@@ -276,6 +285,9 @@ e_table_extras_init (ETableExtras *extras)
e_table_extras_add_compare (
extras, "string-integer",
(GCompareDataFunc) e_strint_compare);
+ e_table_extras_add_compare (
+ extras, "pointer-integer64",
+ (GCompareDataFunc) e_int64ptr_compare);
e_table_extras_add_search (extras, "string", e_string_search);
diff --git a/e-util/e-table-sorting-utils.c b/e-util/e-table-sorting-utils.c
index 494ebf4..972a3fc 100644
--- a/e-util/e-table-sorting-utils.c
+++ b/e-util/e-table-sorting-utils.c
@@ -391,6 +391,24 @@ e_table_sorting_utils_tree_sort (ETreeModel *source,
map_table[i] = map_copy[map[i]];
}
+ for (j = 0; j < cols; j++) {
+ ETableColumnSpecification *spec;
+ ETableCol *col;
+
+ spec = e_table_sort_info_sorting_get_nth (
+ sort_info, j, &closure.sort_type[j]);
+
+ col = e_table_header_get_column_by_spec (full_header, spec);
+ if (col == NULL) {
+ gint last = e_table_header_count (full_header) - 1;
+ col = e_table_header_get_column (full_header, last);
+ }
+
+ for (i = 0; i < count; i++) {
+ e_tree_model_free_value (source, col->spec->compare_col, closure.vals[i * cols + j]);
+ }
+ }
+
g_free (map);
g_free (map_copy);
diff --git a/mail/message-list.c b/mail/message-list.c
index 571788b..72f4893 100644
--- a/mail/message-list.c
+++ b/mail/message-list.c
@@ -1650,10 +1650,15 @@ ml_tree_value_at_ex (ETreeModel *etm,
tag = camel_message_info_user_tag (msg_info, "due-by");
if (tag && *tag) {
+ gint64 *res;
+
due_by = camel_header_decode_date (tag, NULL);
- return GINT_TO_POINTER (due_by);
+ res = g_new0 (gint64, 1);
+ *res = (gint64) due_by;
+
+ return res;
} else {
- return GINT_TO_POINTER (0);
+ return NULL;
}
}
case COL_FOLLOWUP_FLAG:
@@ -1678,21 +1683,31 @@ ml_tree_value_at_ex (ETreeModel *etm,
return (gpointer) get_normalised_string (message_list, msg_info, col);
case COL_SENT: {
struct LatestData ld;
+ gint64 *res;
+
ld.sent = TRUE;
ld.latest = 0;
for_node_and_subtree_if_collapsed (message_list, node, msg_info, latest_foreach, &ld);
- return GINT_TO_POINTER (ld.latest);
+ res = g_new0 (gint64, 1);
+ *res = (gint64) ld.latest;
+
+ return res;
}
case COL_RECEIVED: {
struct LatestData ld;
+ gint64 *res;
+
ld.sent = FALSE;
ld.latest = 0;
for_node_and_subtree_if_collapsed (message_list, node, msg_info, latest_foreach, &ld);
- return GINT_TO_POINTER (ld.latest);
+ res = g_new0 (gint64, 1);
+ *res = (gint64) ld.latest;
+
+ return res;
}
case COL_TO:
str = camel_message_info_to (msg_info);
@@ -1850,17 +1865,18 @@ ml_tree_value_at_ex (ETreeModel *etm,
}
static gchar *
-filter_date (time_t date)
+filter_date (const gint64 *pdate)
{
time_t nowdate = time (NULL);
- time_t yesdate;
+ time_t yesdate, date;
struct tm then, now, yesterday;
gchar buf[26];
gboolean done = FALSE;
- if (date == 0)
+ if (!pdate || *pdate == 0)
return g_strdup (_("?"));
+ date = (time_t) *pdate;
localtime_r (&date, &then);
localtime_r (&nowdate, &now);
if (then.tm_mday == now.tm_mday &&
@@ -2913,6 +2929,7 @@ message_list_sort_value_at (ETreeModel *tree_model,
{
MessageList *message_list;
struct LatestData ld;
+ gint64 *res;
message_list = MESSAGE_LIST (tree_model);
@@ -2930,7 +2947,11 @@ message_list_sort_value_at (ETreeModel *tree_model,
e_tree_model_node_traverse (
tree_model, path, latest_foreach, &ld);
- return GINT_TO_POINTER (ld.latest);
+
+ res = g_new0 (gint64, 1);
+ *res = (gint64) ld.latest;
+
+ return res;
}
static gpointer
@@ -2965,12 +2986,9 @@ message_list_duplicate_value (ETreeModel *tree_model,
case COL_ATTACHMENT:
case COL_DELETED:
case COL_UNREAD:
- case COL_SENT:
- case COL_RECEIVED:
case COL_SIZE:
case COL_FOLLOWUP_FLAG:
case COL_FOLLOWUP_FLAG_STATUS:
- case COL_FOLLOWUP_DUE_BY:
return (gpointer) value;
case COL_FROM:
@@ -2984,6 +3002,20 @@ message_list_duplicate_value (ETreeModel *tree_model,
case COL_LABELS:
return g_strdup (value);
+ case COL_SENT:
+ case COL_RECEIVED:
+ case COL_FOLLOWUP_DUE_BY:
+ if (value) {
+ gint64 *res;
+ const gint64 *pvalue = value;
+
+ res = g_new0 (gint64, 1);
+ *res = *pvalue;
+
+ return res;
+ } else
+ return value;
+
default:
g_return_val_if_reached (NULL);
}
@@ -3001,12 +3033,9 @@ message_list_free_value (ETreeModel *tree_model,
case COL_ATTACHMENT:
case COL_DELETED:
case COL_UNREAD:
- case COL_SENT:
- case COL_RECEIVED:
case COL_SIZE:
case COL_FOLLOWUP_FLAG:
case COL_FOLLOWUP_FLAG_STATUS:
- case COL_FOLLOWUP_DUE_BY:
case COL_FROM:
case COL_FROM_NORM:
case COL_TO:
@@ -3023,6 +3052,9 @@ message_list_free_value (ETreeModel *tree_model,
case COL_MIXED_SENDER:
case COL_MIXED_RECIPIENTS:
case COL_LABELS:
+ case COL_SENT:
+ case COL_RECEIVED:
+ case COL_FOLLOWUP_DUE_BY:
g_free (value);
break;
@@ -3133,7 +3165,7 @@ message_list_value_to_string (ETreeModel *tree_model,
case COL_SENT:
case COL_RECEIVED:
case COL_FOLLOWUP_DUE_BY:
- return filter_date (GPOINTER_TO_INT (value));
+ return filter_date (value);
case COL_SIZE:
return filter_size (GPOINTER_TO_INT (value));
diff --git a/mail/message-list.etspec b/mail/message-list.etspec
index 8d2a10e..efbf8c4 100644
--- a/mail/message-list.etspec
+++ b/mail/message-list.etspec
@@ -11,9 +11,9 @@
<ETableColumn model_col="5" compare_col="21" _title="Subject" expansion="1.6" minimum_width="32"
resizable="true" cell="render_tree" compare="string" search="string"/>
- <ETableColumn model_col="6" _title="Date" expansion="0.4" minimum_width="32" resizable="true"
cell="render_date" compare="integer"/>
+ <ETableColumn model_col="6" _title="Date" expansion="0.4" minimum_width="32" resizable="true"
cell="render_date" compare="pointer-integer64"/>
- <ETableColumn model_col="7" _title="Received" expansion="0.4" minimum_width="32" resizable="true"
cell="render_date" compare="integer"/>
+ <ETableColumn model_col="7" _title="Received" expansion="0.4" minimum_width="32" resizable="true"
cell="render_date" compare="pointer-integer64"/>
<ETableColumn model_col="8" compare_col="22" _title="To" expansion="1.0" minimum_width="32"
resizable="true" cell="render_text" compare="address_compare" search="string" priority="5"/>
@@ -23,7 +23,7 @@
<ETableColumn model_col="11" _title="Follow Up Flag" expansion="0.2" minimum_width="32" resizable="true"
cell="render_text" compare="collate"/>
- <ETableColumn model_col="12" _title="Due By" expansion="0.2" minimum_width="32" resizable="true"
cell="render_date" compare="integer"/>
+ <ETableColumn model_col="12" _title="Due By" expansion="0.2" minimum_width="32" resizable="true"
cell="render_date" compare="pointer-integer64"/>
<ETableColumn model_col="13" _title="Location" expansion="0.2" minimum_width="32" resizable="true"
cell="render_text" compare="collate"/>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]