facebook: preserve the timestamp on incoming messages

Sat, 26 Dec 2015 18:01:00 -0500

author
James Geboski <jgeboski@gmail.com>
date
Sat, 26 Dec 2015 18:01:00 -0500
changeset 37475
643d7b0aadbd
parent 37474
1852eb9052a0
child 37476
2a83ef0aed86
child 37487
d1c752a86448

facebook: preserve the timestamp on incoming messages

libpurple/protocols/facebook/api.c file | annotate | diff | comparison | revisions
libpurple/protocols/facebook/api.h file | annotate | diff | comparison | revisions
libpurple/protocols/facebook/facebook.c file | annotate | diff | comparison | revisions
--- 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);
 	}
 }

mercurial