pidgin/pidgin

643d7b0aadbd
facebook: preserve the timestamp on incoming messages
--- a/libpurple/protocols/facebook/api.c Fri Dec 25 15:20:41 2015 -0500
+++ b/libpurple/protocols/facebook/api.c Sat Dec 26 18:01:00 2015 -0500
@@ -1441,6 +1441,8 @@
fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE,
"$.deltaNewMessage.messageMetadata"
".threadKey.threadFbId");
+ fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE,
+ "$.deltaNewMessage.messageMetadata.timestamp");
fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE,
"$.deltaNewMessage.body");
fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE,
@@ -1460,6 +1462,7 @@
msg.uid = fb_json_values_next_int(values, 0);
oid = fb_json_values_next_int(values, 0);
msg.tid = fb_json_values_next_int(values, 0);
+ msg.tstamp = fb_json_values_next_int(values, 0);
if (msg.uid == priv->uid) {
msg.flags |= FB_API_MESSAGE_FLAG_SELF;
@@ -2258,6 +2261,8 @@
fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
"$.message_sender.messaging_actor.id");
fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.message.text");
+ fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE,
+ "$.timestamp_precise");
fb_json_values_add(values, FB_JSON_TYPE_STR, FALSE, "$.sticker.id");
fb_json_values_add(values, FB_JSON_TYPE_STR, TRUE, "$.message_id");
fb_json_values_set_array(values, FALSE, "$.messages.nodes");
@@ -2274,6 +2279,9 @@
msg.uid = FB_ID_FROM_STR(str);
msg.tid = tid;
+ str = fb_json_values_next_str(values, "0");
+ msg.tstamp = g_ascii_strtoll(str, NULL, 10);
+
if (body != NULL) {
dmsg = fb_api_message_dup(&msg, FALSE);
dmsg->text = g_strdup(body);
--- a/libpurple/protocols/facebook/api.h Fri Dec 25 15:20:41 2015 -0500
+++ b/libpurple/protocols/facebook/api.h Sat Dec 26 18:01:00 2015 -0500
@@ -335,6 +335,7 @@
* @flags: The #FbApiMessageFlags.
* @uid: The user #FbId.
* @tid: The thread #FbId.
+ * @tstamp: The timestamp in milliseconds (UTC).
* @text: The message text.
*
* Represents a Facebook user message.
@@ -344,6 +345,7 @@
FbApiMessageFlags flags;
FbId uid;
FbId tid;
+ gint64 tstamp;
gchar *text;
};
--- a/libpurple/protocols/facebook/facebook.c Fri Dec 25 15:20:41 2015 -0500
+++ b/libpurple/protocols/facebook/facebook.c Sat Dec 26 18:01:00 2015 -0500
@@ -469,6 +469,7 @@
gchar tid[FB_ID_STRMAX];
gchar uid[FB_ID_STRMAX];
gint id;
+ gint64 tstamp;
GSList *l;
PurpleAccount *acct;
PurpleChatConversation *chat;
@@ -493,6 +494,7 @@
self = (msg->flags & FB_API_MESSAGE_FLAG_SELF) != 0;
flags = self ? PURPLE_MESSAGE_SEND : PURPLE_MESSAGE_RECV;
+ tstamp = msg->tstamp / 1000;
if (msg->flags & FB_API_MESSAGE_FLAG_IMAGE) {
if (!(msg->flags & FB_API_MESSAGE_FLAG_DONE)) {
@@ -517,7 +519,7 @@
fb_data_set_unread(fata, msg->uid, TRUE);
}
- fb_util_serv_got_im(gc, uid, text, flags, time(NULL));
+ fb_util_serv_got_im(gc, uid, text, flags, tstamp);
g_free(html);
continue;
}
@@ -542,7 +544,7 @@
fb_data_set_unread(fata, msg->tid, TRUE);
}
- fb_util_serv_got_chat_in(gc, id, uid, text, flags, time(NULL));
+ fb_util_serv_got_chat_in(gc, id, uid, text, flags, tstamp);
g_free(html);
}
}