--- a/libpurple/protocols/jabber/message.c Sat Jan 08 20:52:48 2022 -0600
+++ b/libpurple/protocols/jabber/message.c Sat Jan 08 20:54:48 2022 -0600
@@ -90,6 +90,8 @@
g_list_free(jm->eventitems);
+ g_clear_pointer(&jm->sent, g_date_time_unref); @@ -204,7 +206,8 @@
flags |= jm->outgoing ? PURPLE_MESSAGE_SEND : PURPLE_MESSAGE_RECV;
- purple_serv_got_im(gc, contact, body->str, flags, jm->sent);
+ purple_serv_got_im(gc, contact, body->str, flags, + (time_t)g_date_time_to_unix(jm->sent)); @@ -266,14 +269,17 @@
if(jm->xhtml || jm->body) {
+ time_t sent = (time_t)g_date_time_to_unix(jm->sent); purple_serv_got_chat_in(jm->js->gc, chat->id, jid->resource,
messageFlags | (jm->delayed ? PURPLE_MESSAGE_DELAYED : 0),
- jm->xhtml ? jm->xhtml : jm->body, jm->sent);
+ jm->xhtml ? jm->xhtml : jm->body, sent); purple_conversation_write_system_message(
PURPLE_CONVERSATION(chat->conv),
jm->xhtml ? jm->xhtml : jm->body, messageFlags);
@@ -392,7 +398,7 @@
PurpleXmlNode *child = NULL, *received = NULL;
gboolean delayed = FALSE, is_outgoing = FALSE, is_forwarded = FALSE;
- time_t timestamp = time(NULL);
+ GDateTime *timestamp = g_date_time_new_now_utc(); /* Check if we have a carbons received element from our own account. */
from = purple_xmlnode_get_attrib(packet, "from");
@@ -441,11 +447,19 @@
+ GDateTime *delayed_ts = NULL; + GTimeZone *tz = g_time_zone_new_utc(); const gchar *ts = purple_xmlnode_get_attrib(delay,
- timestamp = purple_str_to_time(ts, TRUE, NULL, NULL, NULL);
+ delayed_ts = g_date_time_new_from_iso8601(ts, tz); + if(delayed_ts != NULL) { + g_date_time_unref(timestamp); + timestamp = delayed_ts; @@ -584,16 +598,37 @@
for(items = purple_xmlnode_get_child(child,"items"); items; items = items->next)
jm->eventitems = g_list_append(jm->eventitems, items);
} else if(purple_strequal(child->name, "delay") && purple_strequal(xmlns, NS_DELAYED_DELIVERY)) {
- const char *timestamp = purple_xmlnode_get_attrib(child, "stamp");
- jm->sent = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL);
+ const char *stamp = purple_xmlnode_get_attrib(child, "stamp"); + GDateTime *delayed_ts = NULL; + GTimeZone *tz = g_time_zone_new_utc(); + delayed_ts = g_date_time_new_from_iso8601(stamp, tz); + if(delayed_ts != NULL) { + g_date_time_unref(jm->sent); } else if(purple_strequal(child->name, "x")) {
if(purple_strequal(xmlns, NS_DELAYED_DELIVERY_LEGACY)) {
- const char *timestamp = purple_xmlnode_get_attrib(child, "stamp");
- jm->sent = purple_str_to_time(timestamp, TRUE, NULL, NULL, NULL);
+ const char *stamp = purple_xmlnode_get_attrib(child, "stamp"); + GDateTime *delayed_ts = NULL; + GTimeZone *tz = g_time_zone_new_utc(); + delayed_ts = g_date_time_new_from_iso8601(stamp, tz); + if(delayed_ts != NULL) { + g_date_time_unref(jm->sent); } else if(purple_strequal(xmlns, "jabber:x:conference") &&
jm->type != JABBER_MESSAGE_GROUPCHAT_INVITE &&
jm->type != JABBER_MESSAGE_ERROR) {
--- a/libpurple/protocols/jabber/message.h Sat Jan 08 20:52:48 2022 -0600
+++ b/libpurple/protocols/jabber/message.h Sat Jan 08 20:54:48 2022 -0600
@@ -41,7 +41,7 @@