summaryrefslogtreecommitdiff
path: root/telepathy-logger/log-store-xml.c
diff options
context:
space:
mode:
authorDavid Laban <david.laban@collabora.co.uk>2011-05-24 19:41:23 -0400
committerDavid Laban <david.laban@collabora.co.uk>2011-05-24 19:58:50 -0400
commit60d97e7e6a2e8cb984964a707e7eb5fe7e8b811e (patch)
treed6919800f191b691ecf0eefc7e0bd3c7a1032c2e /telepathy-logger/log-store-xml.c
parent54dc7de099329b26dc801c70ad0981385fb137dd (diff)
downloadtelepathy-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.c35
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);