diff options
author | David Laban <david.laban@collabora.co.uk> | 2011-05-26 16:20:02 -0400 |
---|---|---|
committer | David Laban <david.laban@collabora.co.uk> | 2011-05-26 18:21:57 -0400 |
commit | 8f7b395881cffcb2935aae9c2b70b601b482c18a (patch) | |
tree | 99f67f9e43307a03fe0d3a42083ebed5072d7cda | |
parent | 2d32cc4e86c2b26d07d603db154b8731720c3963 (diff) | |
download | telepathy-logger-8f7b395881cffcb2935aae9c2b70b601b482c18a.tar.gz |
Update timestamp recording in text-channel
timestamp == original_message_{sent || received}
|| message_{sent || received} || now.
edit_timestamp == supersedes ? message_{sent || received} || now: 0
-rw-r--r-- | telepathy-logger/text-channel.c | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/telepathy-logger/text-channel.c b/telepathy-logger/text-channel.c index cb6efb7..d500f69 100644 --- a/telepathy-logger/text-channel.c +++ b/telepathy-logger/text-channel.c @@ -308,7 +308,23 @@ get_message_pending_id (TpMessage *m) static guint64 -get_message_timestamp (TpMessage *message) +get_original_message_timestamp (TpMessage *message) +{ + gint64 timestamp; + + timestamp = tp_asv_get_int64 (tp_message_peek (message, 0), + "original-message-sent", NULL); + + if (timestamp == 0) + timestamp = tp_asv_get_int64 (tp_message_peek (message, 0), + "original-message-received", NULL); + + return timestamp; +} + + +static guint64 +get_network_timestamp (TpMessage *message) { GDateTime *datetime = g_date_time_new_now_utc (); guint64 now = g_date_time_to_unix (datetime); @@ -319,30 +335,42 @@ get_message_timestamp (TpMessage *message) if (timestamp == 0) timestamp = tp_message_get_received_timestamp (message); + if (timestamp == 0) + { + DEBUG ("TpMessage is not timestamped. Using current time instead."); + timestamp = now; + } + if (timestamp - now > 60 * 60) DEBUG ("timestamp is more than an hour in the future."); else if (now - timestamp > 60 * 60) DEBUG ("timestamp is more than an hour in the past."); - if (timestamp == 0) - timestamp = now; - g_date_time_unref (datetime); + return timestamp; } static guint64 -get_original_message_timestamp (TpMessage *message) +get_message_edit_timestamp (TpMessage *message) +{ + if (tp_message_get_supersedes (message) != NULL) + return get_network_timestamp (message); + else + return 0; +} + + +static guint64 +get_message_timestamp (TpMessage *message) { gint64 timestamp; - timestamp = tp_asv_get_int64 (tp_message_peek (message, 0), - "original-message-sent", NULL); + timestamp = get_original_message_timestamp (message); if (timestamp == 0) - timestamp = tp_asv_get_int64 (tp_message_peek (message, 0), - "original-message-received", NULL); + timestamp = get_network_timestamp (message); return timestamp; } @@ -419,7 +447,7 @@ tpl_text_channel_store_message (TplTextChannel *self, "timestamp", timestamp, "message-token", tp_message_get_token (message), "supersedes-token", tp_message_get_supersedes (message), - "original-timestamp", get_original_message_timestamp (message), + "edit-timestamp", get_message_edit_timestamp (message), /* TplTextEvent */ "message-type", type, "message", text, |