/pidgin/main: ad2ee74b913a: facebook: ignore messages which are ...
James Geboski
jgeboski at gmail.com
Thu Jan 7 15:34:25 EST 2016
Changeset: ad2ee74b913ae50e170b1d06413fa2a494a9ee76
Author: James Geboski <jgeboski at gmail.com>
Date: 2016-01-07 14:06 -0500
Branch: default
URL: https://hg.pidgin.im/pidgin/main/rev/ad2ee74b913a
Description:
facebook: ignore messages which are sequentially duplicated
Sometimes Facebook will sent a batch of duplicated messages over the
MQTT stream. There are occasions where Facebook will send duplicated
messages which are not sequential, however, it does not occur at the
rete of the sequential duplication. This is likely due to the fact that
the plugin is using an older revision of the Messenger protocol.
For now, we should attempt to ignore sequential duplicates from being
from being display. This fix is not bullet proof, but it is simple, and
should cut down on the duplicated message spam.
The proper fix is likely going to be to update the plugin to use a more
recent Messenger protocol revision.
diffstat:
libpurple/protocols/facebook/api.c | 22 +++++++++++++++++-----
1 files changed, 17 insertions(+), 5 deletions(-)
diffs (53 lines):
diff --git a/libpurple/protocols/facebook/api.c b/libpurple/protocols/facebook/api.c
--- a/libpurple/protocols/facebook/api.c
+++ b/libpurple/protocols/facebook/api.c
@@ -67,7 +67,7 @@ struct _FbApiPrivate
GQueue *msgs;
gboolean invisible;
guint unread;
-
+ FbId lastmid;
};
struct _FbApiData
@@ -1493,6 +1493,8 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr
values = fb_json_values_new(root);
fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE,
+ "$.deltaNewMessage.messageMetadata.offlineThreadingId");
+ fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE,
"$.deltaNewMessage.messageMetadata.actorFbId");
fb_json_values_add(values, FB_JSON_TYPE_INT, FALSE,
"$.deltaNewMessage.messageMetadata"
@@ -1511,6 +1513,20 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr
fb_json_values_set_array(values, TRUE, "$.deltas");
while (fb_json_values_update(values, &err)) {
+ id = fb_json_values_next_int(values, 0);
+
+ /* Ignore everything but new messages */
+ if (id == 0) {
+ continue;
+ }
+
+ /* Ignore sequential duplicates */
+ if (id == priv->lastmid) {
+ fb_util_debug_info("Ignoring duplicate %" FB_ID_FORMAT, id);
+ continue;
+ }
+
+ priv->lastmid = id;
fb_api_message_reset(&msg, FALSE);
msg.uid = fb_json_values_next_int(values, 0);
oid = fb_json_values_next_int(values, 0);
@@ -1525,10 +1541,6 @@ fb_api_cb_publish_ms(FbApi *api, GByteAr
}
}
- if (msg.uid == 0) {
- continue;
- }
-
body = fb_json_values_next_str(values, NULL);
if (body != NULL) {
More information about the Commits
mailing list