summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Laban <david.laban@collabora.co.uk>2011-05-26 16:20:02 -0400
committerDavid Laban <david.laban@collabora.co.uk>2011-05-26 18:21:57 -0400
commit8f7b395881cffcb2935aae9c2b70b601b482c18a (patch)
tree99f67f9e43307a03fe0d3a42083ebed5072d7cda
parent2d32cc4e86c2b26d07d603db154b8731720c3963 (diff)
downloadtelepathy-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.c48
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,