diff options
author | David Laban <david.laban@collabora.co.uk> | 2011-05-24 19:41:23 -0400 |
---|---|---|
committer | David Laban <david.laban@collabora.co.uk> | 2011-05-24 19:58:50 -0400 |
commit | 60d97e7e6a2e8cb984964a707e7eb5fe7e8b811e (patch) | |
tree | d6919800f191b691ecf0eefc7e0bd3c7a1032c2e /telepathy-logger/log-store-xml.c | |
parent | 54dc7de099329b26dc801c70ad0981385fb137dd (diff) | |
download | telepathy-logger-60d97e7e6a2e8cb984964a707e7eb5fe7e8b811e.tar.gz |
add_text_event/parse_text_node: use original-timestamp for edits
* Store/parse original-timestamp prop in xml.
* Put the event in the file pointed to by original-timestamp
* If it doesn't exist, fall back to the message's timestamp.
Diffstat (limited to 'telepathy-logger/log-store-xml.c')
-rw-r--r-- | telepathy-logger/log-store-xml.c | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/telepathy-logger/log-store-xml.c b/telepathy-logger/log-store-xml.c index e047616..3a04d21 100644 --- a/telepathy-logger/log-store-xml.c +++ b/telepathy-logger/log-store-xml.c @@ -500,6 +500,7 @@ add_text_event (TplLogStoreXml *self, GError **error) { gboolean ret = FALSE; + guint64 timestamp; TpDBusDaemon *bus_daemon; TpAccount *account; TplEntity *sender; @@ -568,9 +569,23 @@ add_text_event (TplLogStoreXml *self, gchar *supersedes_token = g_markup_escape_text (token_str, -1); g_string_append_printf (event, " supersedes-token='%s'", supersedes_token); + + timestamp = tpl_text_event_get_original_timestamp (message); + if (timestamp != 0) + { + gchar *original_timestamp_str = + log_store_xml_format_timestamp (timestamp); + g_string_append_printf (event, " original-timestamp='%s'", + original_timestamp_str); + g_free (original_timestamp_str); + } } + } + if (timestamp == 0) + timestamp = tpl_event_get_timestamp (TPL_EVENT (message)); + g_string_append_printf (event, ">%s</message>\n" LOG_FOOTER, body); DEBUG ("writing text event from %s (ts %s)", @@ -578,8 +593,7 @@ add_text_event (TplLogStoreXml *self, ret = _log_store_xml_write_to_store (self, account, _tpl_event_get_target (TPL_EVENT (message)), event->str, - TPL_TYPE_TEXT_EVENT, tpl_event_get_timestamp (TPL_EVENT (message)), - error); + TPL_TYPE_TEXT_EVENT, timestamp, error); out: g_free (contact_id); @@ -1077,6 +1091,8 @@ parse_text_node (TplLogStoreXml *self, TplEntity *receiver; gchar *time_str; gint64 timestamp; + gchar *original_time_str; + gint64 original_timestamp = 0; gchar *sender_id; gchar *sender_name; gchar *sender_avatar_token; @@ -1090,12 +1106,16 @@ parse_text_node (TplLogStoreXml *self, body = (gchar *) xmlNodeGetContent (node); time_str = (gchar *) xmlGetProp (node, (const xmlChar *) "time"); + original_time_str = (gchar *) xmlGetProp (node, + (const xmlChar *) "original-timestamp"); sender_id = (gchar *) xmlGetProp (node, (const xmlChar *) "id"); sender_name = (gchar *) xmlGetProp (node, (const xmlChar *) "name"); sender_avatar_token = (gchar *) xmlGetProp (node, (const xmlChar *) "token"); - message_token = (gchar *) xmlGetProp (node, (const xmlChar *) "message-token"); - supersedes_token = (gchar *) xmlGetProp (node, (const xmlChar *) "supersedes-token"); + message_token = (gchar *) xmlGetProp (node, + (const xmlChar *) "message-token"); + supersedes_token = (gchar *) xmlGetProp (node, + (const xmlChar *) "supersedes-token"); is_user_str = (gchar *) xmlGetProp (node, (const xmlChar *) "isuser"); msg_type_str = (gchar *) xmlGetProp (node, (const xmlChar *) "type"); @@ -1107,6 +1127,11 @@ parse_text_node (TplLogStoreXml *self, timestamp = _tpl_time_parse (time_str); + if (supersedes_token != NULL && original_time_str != NULL) + { + original_timestamp = _tpl_time_parse (original_time_str); + } + if (is_room) receiver = tpl_entity_new_from_room_id (target_id); else if (is_user) @@ -1131,11 +1156,13 @@ parse_text_node (TplLogStoreXml *self, "message", body, "message-token", message_token, "supersedes-token", supersedes_token, + "original-timestamp", original_timestamp, NULL); g_object_unref (sender); g_object_unref (receiver); xmlFree (time_str); + xmlFree (original_time_str); xmlFree (sender_id); xmlFree (sender_name); xmlFree (body); |